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.
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)
/tmp qovluğunda 2 fayl yaradıb biri mv digərini cp əmri ilə /var/www/html qovluğuna ataq:
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
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:
web qovluğunun contextini httpd_sys_content_t-yə dəyişmək üçün:
restorecon
Dəyişiklikləri yadda saxlamaqçün istifadə olunur.
Düzgün contextin tapılması
SELinux booleans
Ə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:
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.
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.
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
chcon
semanage fcontext
restorecon
man semanage
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
-a add
-d delete
-l list
semanage fcontext -l | grep httpd
restorecon -R -v /web
dnf install -y selinux-policy-doc
man -k _selinux | grep httpd (servisin adi)
man httpd_selinux
# 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
# FTP servisine aid booleanlarin siyahisini isteyirikse:
getsebool -a | grep ftp
setsebool -P ftpd_anon_write on
grep AVC /var/log/audit/audit.log | grep ssh
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.