Chapter 5
Managing Selinux Security
dnf install -y policycoreutil policycoreutil-python
Adi user/group/others səlahiyyətləri DAC (discretionary access control) sayılır, Selinuxun obyekt yönümlü qaydaları isə MAC (mandatory access control) sayılır.
Selinuxun əsas məqsədi istifadəçi məlumatlarını comprimised olan system service-lərindən qorumaqdır. Selinux disable olunduğu halda web servisin compromise edilməsi /tmp və /var/tmp -yə faylların yazılması ilə nəticələnə bilir. Selinux enabled olduqda isə bu hal baş vermir.
Üç modu var: enforcing, permissive (troubleshooting üçün istifadə olunur), disabled
Selinux logs located in:
grep AVC /var/log/audit/audit.log
getenforce - hazirki veziyyete baxmaqcun
setenforce - enforce veya permissive modlari aktivlesdirmekcundur,
# setenforce ile edilen deyisiklik rebootdan sonra oz quvvesini itirir.
/etc/sysconfig/selinux - OS start olanda selinuxa default config vermekcundur.
Hemin faylda:
enforcing=0 - permissive modda basladir
enforcing=1 - enforcing modda basladir
selinux=0 - SELinux disable edir
selinux=1 - SELinux enable edir
Disalbe etmeyin ikinci yolu:
System boot olarken "e" basib, kerneli load eden setrin axirinda yazmaq lazimdmir:
selinux=0
sonra ise basmaq lazimdir: Ctrl+x
Selinux targeting haqqında???
Targeted: Focuses on critical processes, less restrictive.
Minimum: More restrictive, confines additional processes.
MLS: Highly restrictive, implements fine-grained Multi-Level Security
SELinux file contexts
Yeni fayllar adətən öz SELinux contextini üst qovluqdan götürür.
Context labels:
adların bitişinə görə:
u - Selinux user
r - role
t - type
s - level (0 is minimum)
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
/tmp
qovluğunda 2 fayl yaradıb biri mv
digərini cp
əmri ilə /var/www/html
qovluğuna ataq:
touch /tmp/file1
touch /tmp/file2
[ali@localhost tmp]$ ls -lZ /tmp/file*
-rw-rw-r--. 1 ali ali unconfined_u:object_r:user_tmp_t:s0 0 Jun 22 14:59 /tmp/file1
-rw-rw-r--. 1 ali ali unconfined_u:object_r:user_tmp_t:s0 0 Jun 22 14:49 /tmp/file2
mv /tmp/file1 /var/www/html/
cp /tmp/file2 /var/www/html
ls -Zl /tmp/file*
-rw-rw-r--. 1 ali ali unconfined_u:object_r:user_tmp_t:s0 0 Jun 22 14:49 file1
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 0 Jun 22 14:58 file2
mv
əmrindən istifadə etdikdə faylın selinux context type-ı dəyişmir. cp
əmrindən istifadə etdikdə isə dəyişir.
Changing file context
Context dəyişmək üçün mövcud olan əmrlər:
chcon
semanage fcontext
restorecon
chcon
Test və eksperiment məqsədləri üçün istifadə olunur. Çünki edilmiş dəyişiklik heçvaxt "SELinux context database"də saxlanılmır. restorecon
əmri icra edildikdə chcon
əmrindən sonrakı dəyişikliklər qüvvədən düşür.
semanage
semanage manpage-də qəşənq nümunələr olduğu üçün baxmağa dəyər:
man semanage
web
qovluğunun contextini httpd_sys_content_t
-yə dəyişmək üçün:
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
-a add
-d delete
-l list
semanage fcontext -l | grep httpd
restorecon
Dəyişiklikləri yadda saxlamaqçün istifadə olunur.
restorecon -R -v /web
Düzgün contextin tapılması
dnf install -y selinux-policy-doc
man -k _selinux | grep httpd (servisin adi)
man httpd_selinux
SELinux booleans
# butun booleanlarin siyahisi
getsebool -a
getsebool httpd_enable_homedirs
sudo getsebool httpd_enable_homedirs on
sudo semanage boolean -l | grep httpd_enable_homedirs
setsebool -P httpd_enable_homedirs on
sudo semanage boolean -l | grep httpd_enable_homedirs
# Default state ilə current state fərqlilikləri göstərir:
sudo semanage boolean -l -C
Əgər ftp xidmətində anonymous write aktivləşdirmişiksə selinuxda onu config etməyənə kimi işləməyəcək. config etmək üçün:
# FTP servisine aid booleanlarin siyahisini isteyirikse:
getsebool -a | grep ftp
setsebool -P ftpd_anon_write on
SELinux Port Access
SSH default portu dəyişdirmişiksə, selinuxa görə sysctl vasitəsilə sshd restart edildikdə error verə bilər.
selinux-u permissive moda dəyişdikdə əgər problem aradan qalxırsa deməli problem selinuxdadır.
grep AVC /var/log/audit/audit.log | grep ssh
Yuxarıdakı əmr vasitəsilə loqları analiz etdikdə ssh barəsində çıxan xətaları görmək mümkündür.
ssh configinə baxsaq orda da aşağıdakı əmr sətrinin mövcud olduğunu görmək olar. default port dəyişdikdə selinux-a bu barədə xəbər etmək lazımdır.
vim /etc/ssh/sshd_config
semanage port -a -t sshd_port_t -p 2222 #PORTNUMBER
# context is already assigned erroru cixarsa "-m" isledilmelidir argument olaraq.
LOGs
journalctl | grep selart # it gives you UUID
sealert -l <UUID>
autorelable # error verirse reboot vaxti
grub troubleshooting mode-a girib kernel setrinin axirina yaziriq
"systemd.unit=emergency.target"
emergency istifadecisinin parolu: emergency.target
.autorelable-i silirik.
silende error verse ki read-only filesystem
mount -o remount,rw /
rm -rf /.autorelabel
restorecon -Rv /
Troubleshooting
Əgər selinux problem çıxardırsa:
setenforce 0
Loqlara bax:
grep AVC /var/log/audit/audit.log
selinux manualina bax:
dnf install selinux-policy-doc
SEALERT:
dnf provides */sealert # eger setroubleshoot-server cixmayibsa install etmekde fayda var.
journalctl | grep sealert
selart -l <UUID>
Last updated
Was this helpful?