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?