29 Eylül 2019 Pazar

squid kurulumdan ipc hatası

Squid kurulurken aşağıdaki gibi bir hata mesajı alıyorsanız;

grep squid-cf__metadata.sh /var/log/messages
Sep 29 08:05:33 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:15:37 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:16:07 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:17:26 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:18:55 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:21:18 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:33:48 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:33:51 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Sep 29 08:37:21 rhel7-satellite squid: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
[root@rhel7-satellite ~]#



fstab aşağıdaki satırı ekleyip,

shm /dev/shm tmpfs nodev,nosuid,noexec 0 0

mount -a
demeniz sorunu çözebilir.

31 Temmuz 2019 Çarşamba

selinux aksaklık nedeninin incelenmesi

selinux kullanmaya başladığımızda, audit ile ilgili sorun yaşamaya başladıysak ilk yapmamız gereken nedeni sorunun nedenini sisteme sormak olur.

Öncelikle için policy paketleri ile ilgili policycoreutils-python-2.5-29.el7_6.1.x86_64 paket yüklenmiş olmalı.

[root@rhel7lab01 ~]#
[root@rhel7lab01 ~]# yum info policycoreutils-python-2.5-29.el7_6.1.x86_64
Loaded plugins: langpacks, priorities, product-id, ps, remove-with-leaves, search-disabled-repos, show-leaves, subscription-manager, upgrade-helper
Installed Packages
Name        : policycoreutils-python
Arch        : x86_64
Version     : 2.5
Release     : 29.el7_6.1
Size        : 1.2 M
Repo        : installed
From repo   : rhel-7-server-rpms
Summary     : SELinux policy core python utilities
URL         : http://www.selinuxproject.org
License     : GPLv2
Description : The policycoreutils-python package contains the management tools use to manage
            : an SELinux environment.

[root@rhel7lab01 ~]#

Paket yüklüyse, öncelikle izin verilmeyen işlemleri listeleri, hangisi bizim aksaklığımızla alakalı ise audit bilgisini alarak izin verebiliriz

 grep  denied /var/log/audit/audit.log

[root@rhel7lab01 ~]# grep 1564549471.069:2262  /var/log/audit/audit.log |audit2why
type=AVC msg=audit(1564549471.069:2262): avc:  denied  { read } for  pid=15715 comm="nginx" name="/" dev="dm-2" ino=64 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=0

        Was caused by:
                Missing type enforcement (TE) allow rule.

                You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1564549408.164:2259): avc:  denied  { read } for  pid=15703 comm="nginx" name="/" dev="dm-2" ino=64 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=0                                                           

        Was caused by:
                Missing type enforcement (TE) allow rule.

                You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1564549419.241:2260): avc:  denied  { read } for  pid=15703 comm="nginx" name="rhel7" dev="dm-2" ino=67159104 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=0                                             

        Was caused by:
                Missing type enforcement (TE) allow rule.

                You can use audit2allow to generate a loadable module to allow this access.

incelediğimiş işlem güvenebileceğimiz bir işlemse buna izin aşağıdaki gibi izin verebiliriz.


[root@rhel7lab01 ~]# grep nginx   /var/log/audit/audit.log |audit2allow   > nginx.te
[root@rhel7lab01 ~]# cat nginx.te 


#============= httpd_t ==============

#!!!! WARNING: 'unlabeled_t' is a base type.
allow httpd_t unlabeled_t:dir read;
[root@rhel7lab01 ~]# 

[root@rhel7lab01 ~]# grep nginx   /var/log/audit/audit.log |audit2allow  -M nginx 
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i nginx.pp

[root@rhel7lab01 ~]# semodule -i nginx.pp
[root@rhel7lab01 ~]# 

selinux kullanıyorsak, sistemimizde yüklü olması faydalı olacak paketlerden bir taneside setools-console paketi. Bu paket yüklü değilse;
yum install setools-console
yükleyebiliriz. Bu kapetle gelen araçlardan bir taneside seinfo.
seinfo ile tüm selinux ile ilgili tip/etiketleri görebiliriz.
Bu komutu direk kullanacak olursak çok fazla bilgi ekrana yazılır.
# seinfo -t |wc -l
4448
 Bundan dolayı http ile ilgili olanları görmek istiyorsak;
seinfo -t |grep http


Sistemimizdeki varsayılan selinux etikelerini görmek için semanage aracından faydalanabiliriz.

[root@server1 ~]# semanage fcontext -l

Şayet web dizinimizi standart bir dizinden farklı bir yere ayarladığımızda ayarladığımız dizinin web sunucusu tarafından okunmasına izin verilmesi için semanage ile izin vermemiz gerekiyor.

örneğin web  kök dizinimizi /var/www/html den /web dizinine çevirecek olursak,
web servisininin bu dizini okuyabilmesi için aşağıdaki gibi /web dizinini etiketleriz.

semanage fcontext  -a -t httpd_sys_content_t '/web(/.*)?'

daha detaylı işlemler yapmak istiyorsak aşağıdakileri inceleyebiliriz.
# seinfo -t |grep httpd_sys
   httpd_sys_content_t
   httpd_sys_htaccess_t
   httpd_sys_ra_content_t
   httpd_sys_rw_content_t
   httpd_sys_script_t
   httpd_sys_script_exec_t

ilave olarak kullanıcılar kendi homedizinlerinde web yayını yapacaklarsa;
httpd_enable_homedirs  özelliğini on yapmamız gerekiyor. Varsayılan olarak off dur ve selinux aktif olan sistemde normal kullancıları home dizinlerinde web yayını yapamazlar.

httpd_enable_homedirs --> off
setsebool -P httpd_enable_homedirs  on








21 Temmuz 2019 Pazar

kendi ssl sertifikamızı oluşturmak

Aşağıdaki script ile kolay bir şekilde oluşturabiliriz.


remzi@han:/tmp/sslcert$ cat ~/bin/create-self-cert.sh
#!/bin/bash
set +x
if [ $# -eq  "1" ]
then
certname=$1
else
certname=`hostname -f`
fi
# openssl genrsa -des3 -out $certname.key  2048
openssl genrsa -out $certname.key  2048
openssl req    -new  -key $certname.key -out $certname.csr
openssl x509   -req  -days 3650 -in $certname.csr -signkey $certname.key -out $certname.cert



Kullanımı:

remzi@han:/tmp/sslcert$ ./create-self-cert.sh localhost


30 Haziran 2019 Pazar

cd/dvd kalıbı oluşturmada kullandığım script

# cat   createiso.sh
#!/bin/bash
export name=$1
genisoimage -U -r -v -T  -allow-limited-size -input-charset iso8859-9 --joliet -joliet-long -V $name -volset $name  -o $name.iso  $name/




openvpn kullanıcısının, vpn kullanıcı adı ve parolasını bir dosyadan okutarak otomatik bağlantıyı sağlayabilmesi


Openvpn ayar dosyasının içerisindeki
                                                             auth-user-pas
parametsini
                                                             auth-user-pass userpass.conf
ile değiştirip, userpass.conf içerisine
                                                           kullanıcıadı
                                                           kullanıcıparolası
yazmak yeterli oluyor.
artık openvpn kullanıcı olarak çalıştırdığımızda userpass.conf dosyası içinden kullanıcı adı/parolayı okuyarak bağlantıyı sağlayacaktır.

Sisteminizde birdek çok kullanıcı veya server üzerinde bu işlemi yapacak olursanız,
ayar dosyalarının ve sertifika dosyalarının sahip yetkilerini chmod 600 ile sadece dosya sahibinin okuyabileceği şekilde yapılandırmak gerekli. Aksi durumda sistemdeki her kullanıcı sertifika dosyalarınızı ve kullanıcı adı/porala bilgilerine erişebilir.

                 

22 Mayıs 2019 Çarşamba

Linux tabanlı bir sistem kurulumu yaparken nelere dikkat etmeliyim

Linux tabanlı bir işletim sistemi kurulurken, ilerleyen zamanlarda sorun çıktığında çözülmesini kolaylaştırmak veya sorunun etkisini azaltmak için genel amaçlar için kurulumu yapılacak sistemlerde  dikkat etmemiz gerekenler;

1. lvm'siz  bir sistem düşünmemek gerekiyor(istisnalar hariç)

2. işletim sistemimiz btrf dosya sistemini destekliyorsa, root bölüm için btrfs kullanılmalı ve snapper aktif olacak şekilde ayarlanmalı.  Diger bölümler(home vs.) xfs olmalı.

3. boot bölümüne 1GB alan ayırın. Bu çok büyük gibi görünsede, bir kaç yıl sonra,
eski kernellerin otomatik temizlenmemesinden(genelde unutulur) dolayı, fazla değildir.
Şayet gönün birinde boot dolur ve güncellemede kernel güncellemesi yarım kalırsa, sistem yeniden başladığında başınız ağrıyabilir.

4.  /var, /var/log, /tmp ve home bölümleri  ayrı bir lv içinde tutulmalı.
     Bu şekilde kullanım, kontrol edilip temizlenmeyen günlük veya geçici dosyaların sistemi çalışamaz hale gelmesi olasılığını azaltır, en azından log dizini dolsa bile uygulamalarınız çalışır, sadece günlükler güncellenemez. 

ilave olarak arbt ve  kdump kullaniliyorsa, 

/var/spool/abrt/

/var/crash

bolumleri unutulmamali. abrt ve crash bölümlerini en az ram miktarı kadar yapılması gerekmektedir.

mail, squid gibi uygulamalar da

/var/spool  

dizini kullanir ve kullanilmakta olan disk bolumunu doldurabilirler.

Boyle bir olumsuzlugu onlemek icin spool ve/veya spol altındaki ilgili bölümü ayrı bir lv üzerine almak sistem sağlığı icin doğru olacaktir.

5. Volum grubun tamamın kullanıma verilmemeli, en azından %10 bir bölüm, beklenmedik ihtiyac ve durumlara karşı, boş tutulmalı.

6. Sistem ram kapasitesi yeterliyse, /tmp tmpfs olarak ram kullanacak şekilde ayarlanmalı.

7. sistem saatinin düzgünlüğünü sağlamak için ntp kullanılmalı (eski sistemlerde ntp, yeni sistemlerde chrony service ayarlanması )

8. root ile sisteme giriş önlenmeli, kullanıcıların root yetkisine ihtiyacı varsa, kendi kullanıcılarıyla giriş yaptıktan sonra sudo ile root yetkilerini kullanmaları

9. rhel 7 veya rhel 8 tabanli sistemlerde /var/log/journal dizini olusturulmali.

Varsayilan olarak journal/systemd loglari hafizada tutuluyor ve sistem yeniden baslatildiginda veya kapatildiginda loglara gule gule diyoruz.

journalctl ile gecmise yonelik loglari asagidaki gibi inceleyebiliriz.

 journalctl --since "2019-11-28 15:24" --until "2019-12-29 12:00"

Bu incelemeyi yapabilmemiz icin yukarida bahsettigimiz, /var/log/journal dizini olusturulmus ve sahiplik yetkileri duzgun ayarlanmis olmasi gerekiyor.

journaldir="/var/log/journal"
mkdir        ${journaldir}                                      
chown          root:systemd-journal ${journaldir}
chmod         2755                           ${journaldir}

Bu islemden sonra sistem yeniden baslatilma veya systemd-journald yeniden baslatilmali.

Alternatif  yöntem olarak; /etc/systemd/journald.conf  dosyasında storage modunu  persistent yapmaktır. Detaylı bilgiler için man journald.conf


10. Her ne kadar selinux kullanımı zor olsada, selinux kapatmamalı, selinux nasıl kullanacağımızı öğrenmemiz gerekir.

11. Sunucu, dış dünyaya direk açık ise, firewall + fail2ban kesinlikle ayarlanmalı, istekler firewalld/iptables/ipset gibi araçlar yardımıyla servise gelmeden sınırlandırılmalıdır.
      Sınırlandırma iyi görünmesede, sisteme aşırı yük gelmesi veya saldırı esnasında tamamen kullanılmaz olmasını önleyerek, sistemin çalışmasını devam ettirmesine yardımcı olacaktır.

12. ssh/sssd gibi önemli servislerin OOM killerdan korumak OOMScoreAdjust değerini -1000 yapmak. -1000 ölümsüz (immutable) anlamına geliyor.

# mkdir /etc/systemd/system/sshd.service.d
# vi /etc/systemd/system/sshd.service.d/100-OOMscore.conf
[Service]
OOMScoreAdjust=-1000
# systemctl daemon-reload
# systemctl restart sshd

 

13. Mümkünse swap için farklı bir disk kullanmak. Özellikle uygulamlardan kaynaklanan ram tüketiminde, sisteme müdahale edebilmemiz için swap ayrı bir disk olurması faydalıdır. Ne olursa olsun swap kullanım sorunu çözülmesi gereken bir nokta olduğunuda unutmayalım.

 

Linux tabanlı bir sistem kurulumu yaparken nelere dikkat etmeliyim

Linux tabanlı bir işletim sistemi kurulurken, ilerleyen zamanlarda sorun çıktığında çözülmesini kolaylaştırmak veya sorunun etkisini azaltmak için genel amaçlar için kurulumu yapılacak sistemlerde  dikkat etmemiz gerekenler;

1. lvm'siz  bir sistem düşünmemek gerekiyor(istisnalar hariç)

2. işletim sistemimiz btrf dosya sistemini destekliyorsa, root bölüm için btrfs kullanılmalı ve snapper aktif olacak şekilde ayarlanmalı.  Diger bölümler(home vs.) xfs olmalı.

3. boot bölümüne 1GB alan ayırın. Bu çok büyük gibi görünsede, bir kaç yıl sonra,
eski kernellerin otomatik temizlenmemesinden(genelde unutulur) dolayı, fazla değildir.
Şayet gönün birinde boot dolur ve güncellemede kernel güncellemesi yarım kalırsa, sistem yeniden başladığında başınız ağrıyabilir.

4.  /var, /var/log, /tmp ve home bölümleri  ayrı bir lv içinde tutulmalı.
     Bu şekilde kullanım, kontrol edilip temizlenmeyen günlük veya geçici dosyaların sistemi çalışamaz hale gelmesi olasılığını azaltır, en azından log dizini dolsa bile uygulamalarınız çalışır, sadece günlükler güncellenemez. 

ilave olarak arbt ve  kdump kullaniliyorsa, 

/var/spool/abrt/

/var/crash

bolumleri unutulmamali. abrt ve crash bölümlerini en az ram miktarı kadar yapılması gerekmektedir.

mail, squid gibi uygulamalar da

/var/spool  

dizini kullanir ve kullanilmakta olan disk bolumunu doldurabilirler.

Boyle bir olumsuzlugu onlemek icin spool ve/veya spol altındaki ilgili bölümü ayrı bir lv üzerine almak sistem sağlığı icin doğru olacaktir.

5. Volum grubun tamamın kullanıma verilmemeli, en azından %10 bir bölüm, beklenmedik ihtiyac ve durumlara karşı, boş tutulmalı.

6. Sistem ram kapasitesi yeterliyse, /tmp tmpfs olarak ram kullanacak şekilde ayarlanmalı.

7. sistem saatinin düzgünlüğünü sağlamak için ntp kullanılmalı (eski sistemlerde ntp, yeni sistemlerde chrony service ayarlanması )

8. root ile sisteme giriş önlenmeli, kullanıcıların root yetkisine ihtiyacı varsa, kendi kullanıcılarıyla giriş yaptıktan sonra sudo ile root yetkilerini kullanmaları

9. rhel 7 veya rhel 8 tabanli sistemlerde /var/log/journal dizini olusturulmali.

Varsayilan olarak journal/systemd loglari hafizada tutuluyor ve sistem yeniden baslatildiginda veya kapatildiginda loglara gule gule diyoruz.

journalctl ile gecmise yonelik loglari asagidaki gibi inceleyebiliriz.

 journalctl --since "2019-11-28 15:24" --until "2019-12-29 12:00"

Bu incelemeyi yapabilmemiz icin yukarida bahsettigimiz, /var/log/journal dizini olusturulmus ve sahiplik yetkileri duzgun ayarlanmis olmasi gerekiyor.

journaldir="/var/log/journal"
mkdir        ${journaldir}                                      
chown          root:systemd-journal ${journaldir}
chmod         2755                           ${journaldir}

Bu islemden sonra sistem yeniden baslatilma veya systemd-journald yeniden baslatilmali.

Alternatif  yöntem olarak; /etc/systemd/journald.conf  dosyasında storage modunu  persistent yapmaktır. Detaylı bilgiler için man journald.conf


10. Her ne kadar selinux kullanımı zor olsada, selinux kapatmamalı, selinux nasıl kullanacağımızı öğrenmemiz gerekir.

11. Sunucu, dış dünyaya direk açık ise, firewall + fail2ban kesinlikle ayarlanmalı, istekler firewalld/iptables/ipset gibi araçlar yardımıyla servise gelmeden sınırlandırılmalıdır.
      Sınırlandırma iyi görünmesede, sisteme aşırı yük gelmesi veya saldırı esnasında tamamen kullanılmaz olmasını önleyerek, sistemin çalışmasını devam ettirmesine yardımcı olacaktır.

12. ssh/sssd gibi önemli servislerin OOM killerdan korumak OOMScoreAdjust değerini -1000 yapmak. -1000 ölümsüz (immutable) anlamına geliyor.

# mkdir /etc/systemd/system/sshd.service.d
# vi /etc/systemd/system/sshd.service.d/100-OOMscore.conf
[Service]
OOMScoreAdjust=-1000
# systemctl daemon-reload
# systemctl restart sshd

 

13. Mümkünse swap için farklı bir disk kullanmak. Özellikle uygulamlardan kaynaklanan ram tüketiminde, sisteme müdahale edebilmemiz için swap ayrı bir disk olurması faydalıdır. Ne olursa olsun swap kullanım sorunu çözülmesi gereken bir nokta olduğunuda unutmayalım.

 

Ne işe yarar; sar -n DEV

sar -n DEV|awk 'BEGIN{mak=0} !/txpck|x86|CPU|^[ \t]*$/{if (mak