ืชืจืืื ืืืืืจ ืฉืืืื ืืชืืืืื ืืงืืจืก
SELinux ืื Security Enhanced Linux ืืื ืื ืื ืื ืืงืจืช ืืืฉื ืืฉืืคืจ ืฉืคืืชื ืขื ืืื ืืกืืื ืืช ืืืืืืื ืืืืื ืฉื ืืจื"ื (NSA) ืืื ืืื ืืข ืืืืจืืช ืืืื ืืืช. ืืื ืืืืฉืืช ืืืื ืืงืจืช ืืืฉื ืืืืืฆืช (ืื ืืืื) (English Mandatory Access Control, MAC) ืขื ืืื ืืืืื ืืงืืื (ืื ืกืืงืืืื) ืืงืืื (English Discretionary Access Control, DAC), ืืืืืจ, ืืจืฉืืืช ืงืจืืื, ืืชืืื, ืืืฆืืข.
ื-SELinux ืืฉ ืฉืืืฉื ืืฆืืื:
- ืืืืคื - ืื ืืขืช ืืืฉื ืืืชืืกืก ืขื ืืืื ืืืื ืืืช.
- ืึทืชึดืืจ - ื ืืืื ืืืื ืฉื ืคืขืืืืช ืฉืืคืจืืช ืืช ืืืืื ืืืช, ืืฉืจ ืืืื ืืกืืจืืช ืืืฆื ืืืืืคื.
- ืื ืืื - ืืฉืืชื ืืืื ืฉื SELinux.
ืืืจืืจืช ืืืื, ืืืืืจืืช ื ืืฆืืืช /etc/selinux/config
ืฉืื ืื ืืฆืื SELinux
ืืื ืืืจืจ ืืช ืืืฆื ืื ืืืื, ืืคืขื
$ getenforce
ืืื ืืฉื ืืช ืืช ืืืฆื ืืืชืืจื ื ืืคืขื ืืช ืืคืงืืื ืืืื
$ setenforce 0
ืื, ืืื ืืฉื ืืช ืืช ืืืฆื ืืชืืจื ื ืขื ืืืืคื, ืืืฆืข
$ setenforce 1
ืื ืืชื ืฆืจืื ืืืฉืืืช ืืืืืืื ืืช SELinux, ืื ืื ืืืื ืืืืขืฉืืช ืจืง ืืจื ืงืืืฅ ืืชืฆืืจื
$ vi /etc/selinux/config
ืืื ืืืฉืืืช, ืฉื ื ืืช ืืคืจืืืจ SELINUX ืืืืคื ืืื:
SELINUX=disabled
ืืืืจืช SELinux
ืื ืงืืืฅ ืืชืืืื ืืกืืื ืื ืืืงืฉืจ ืฉื SELinux, ืืืืื ืืืืข ื ืืกืฃ ืืืื ืืฉืชืืฉ, ืชืคืงืื, ืกืื ืืื'. ืื ืื ืืคืขื ืืจืืฉืื ื ืฉืืชื ืืคืขืื ืืช SELinux, ืชืืืื ืชืฆืืจื ืืืืืืจ ืืช ืืืงืฉืจ ืืืชืืืืืช. ืชืืืื ืืงืฆืืช ืชืืืืืช ืืืงืฉืจ ืืืืข ืืชืืื. ืืื ืืืชืืื ืืกืื, ืืงืืืฅ ืืชืฆืืจื ืื ื ืืฉื ืื ืืช ืืืฆื ื ืืชืืจื ื.
$ vi /etc/selinux/config
SELINUX=permissive
ืืืืจ ืืืืจืช ืืืฆื ืืชืืจื ื, ืฆืืจ ืงืืืฅ ื ืกืชืจ ืจืืง ืืฉืืจืฉ ืขื ืืฉื autorelabel
$ touch /.autorelabel
ืืืคืขื ืืืืฉ ืืช ืืืืฉื
$ init 6
ืืขืจื: ืื ื ืืฉืชืืฉืื ืืืฆื ืืชืืจื ื ืืกืืืื, ืืื ืืฉืืืืฉ ืืืฆื ืืืืคื ืขืืื ืืืจืื ืืืขืจืืช ืืงืจืืก ืืืืื ืืชืืื ืืืืฉ.
ืื ืชืืื ืื ืืืืจืื ื ืชืงืขืช ืืงืืืฅ ืืืฉืื, โโืืกืืืื ืืืงื ืืื ืื. ืืืืจ ืืฉืืืช ืืกืืืื ืืืืขืจืืช ืฉืื ืืืคืขืืช, ืืชื ืืืื ืืืืช ืืงืืืฅ ืืชืฆืืจื ืืืืืืืจ ืืช ืืืฆื ืืืืคืืืื ืืืจืืฅ:
$ setenforce 1
ืืคืขืืช ืืืฆืืื ืืช SELinux ืืืืฉื ืฉืื.
ื ืืืืจ ืืืืื ืื
ืืืชืื ืฉื ืชืงืืช ืืฉืืืืืช ืืกืืืืืช ืืืืื ืืกืืืื ืื ืืืื ืฉืืืขืจืืช ืคืืขืืช. ืืื ืืืืืง ืื ื-SELinux ืฉืื ืคืืขื ืืืืื ืืื ืืื ืื ืืืกื ืืืฉื ืืฉืื ืืฆืืื, ืืคืืืงืฆืื ืืื', ืขืืื ืืืกืชืื ืืืืื ืื. ืืืื ื-SELinux ื ืืฆื ื /var/log/audit/audit.log
, ืืื ืืชื ืื ืฆืจืื ืืงืจืื ืืช ืืืื ืืื ืืืฆืื ืฉืืืืืช. ืืชื ืืืื ืืืฉืชืืฉ ืืืื ืืฉืืจืืช audit2why ืืื ืืืฆืื ืฉืืืืืช. ืืคืขื ืืช ืืคืงืืื ืืืื:
$ audit2why < /var/log/audit/audit.log
ืืชืืฆืื ืืื, ืชืงืื ืจืฉืืื ืฉื ืฉืืืืืช. ืื ืื ืืื ืฉืืืืืช ืืืืื, ืื ืืืฆืื ืืืืขืืช.
ืืืืจืช ืืืื ืืืช SELinux
ืืืื ืืืช SELinux ืืื ืืขืจืืช ืืืืื ืืฉืืืืช ืืื ืื ืื ืืืืืื ืฉื SELinux. ืืืื ืืืช ืืืืืจื ืืขืจืืช ืืืืื ืขืืืจ ืกืืืื ืกืคืฆืืคืืช. ืืขืช ื ืืื ืืืฆื ืืืืืืจ ืืืื ืืืช ืืื ืืืคืฉืจ ืืืฉื ืืฉืืจืืชืื ืืกืืจืื.
1. ืขืจืืื ืืืืืื (ืืชืืื)
ืืชืืื (ืืืืืื ืื) ืืืคืฉืจืื ืื ืืฉื ืืช ืืืงืื ืฉื ืืืื ืืืช ืืืื ืจืืฆื, ืืืื ืืืฆืืจ ืืืื ืืืช ืืืฉื. ืื ืืืคืฉืจืื ืื ืืืฆืข ืฉืื ืืืื ืืืื ืืืฆืข ืืชืืื ืืืืฉ ืื ืืืืืจ ืืืืฉ ืฉื ืืืื ืืืช SELinux.
ืืืืื
ื ื ืื ืฉืื ืื ื ืจืืฆืื ืืฉืชืฃ ืืช ืกืคืจืืืช ืืืืช ืฉื ืืฉืชืืฉ ืืจื ืงืจืืื/ืืชืืื FTP, ืืืืจ ืฉืืชืคื ื ืืืชื, ืืื ืืฉืื ืื ื ืื ืกืื ืืืฉืช ืืืื, ืื ืื ื ืื ืจืืืื ืืืื. ืืกืืื ืืื ืืื ืฉืืืื ืืืช SELinux ืืื ืขืช ืืฉืจืช ื-FTP ืืงืจืื ืืืืชืื ืืกืคืจืืืช ืืืืช ืฉื ืืืฉืชืืฉ. ืขืืื ื ืืฉื ืืช ืืช ืืืืื ืืืช ืื ืฉืฉืจืช ื-FTP ืืืื ืืืฉืช ืืกืคืจืืืช ืืืืชืืืช. ืืื ื ืจืื ืื โโืืฉ ืืชืืื ืืื ืขื ืืื ืืืฆืืข
$ semanage boolean -l
ืคืงืืื ืื ืชืคืจื ืืช ืืืชืืื ืืืืื ืื ืขื ืืฆืื ืื ืืืื (ืืืคืขื ืื ืืืื) ืืชืืืืจ. ืืชื ืืืื ืืฆืืฆื ืืช ืืืืคืืฉ ืฉืื ืขื ืืื ืืืกืคืช grep ืืื ืืืฆืื ืชืืฆืืืช ftp ืืืื:
$ semanage boolean -l | grep ftp
ืืชืืฆื ืืช ืืืืจืื ืืืืื
ftp_home_dir -> off Allow ftp to read & write file in user home directory
ืืชื ืื ืืืฉืืช, ืื ื ืคืขืื ืืืชื ืขื setsebool $ setsebool ftp_home_dir on
ืืขืช ืืืื ื-ftp ืฉืื ื ืืืื ืืืฉืช ืืกืคืจืืืช ืืืืช ืฉื ืืืฉืชืืฉ.
ืืขืจื: ืืชื ืืืื ืื ืืงืื ืจืฉืืื ืฉื ืืชืืื ืืืื ืื ืืื ืชืืืืจ ืขื ืืื ืืืฆืืข getsebool -a
2. ืชืืืืืช ืืืงืฉืจ
ืืืื ืืืจื ืื ืคืืฆื ืืืืชืจ ืืืืฉื ืืช ืืืื ืืืช SELinux. ืื ืงืืืฅ, ืชืืงืื, ืชืืืื ืืืฆืืื ืืกืืื ืื ืืืงืฉืจ ืฉื SELinux:
- ืขืืืจ ืงืืฆืื ืืชืืงืืืช, ืืชืืืืืช ืืืืืกื ืืช ืืชืืื ืืช ืืืจืืืืช ืืืขืจืืช ืืงืืฆืื ืื ืืชื ืืฆืคืืช ืืื ืืืืฆืขืืช ืืคืงืืื ืืืื:
$ ls -Z /etc/httpd
- ืขืืืจ ืชืืืืืื ืืืฆืืืืช, ืืชืืืืช ืื ืืืืช ืขื ืืื ืืืืื, ืืชืืื ืืืฆืื ืืช ืืชืืืืืช ืืืื ืืืืคื ืืื:
ืชืืืื
$ ps โauxZ | grep httpd
ืื ืื
$ netstat -anpZ | grep httpd
ืืืืื
ืืขืช ื ืกืชืื ืขื ืืืืื ืืื ืืืืื ืืื ืืืชืจ ืืช ืืชืืืืืช ืืืืงืฉืจ. ื ื ืื ืฉืืฉ ืื ื ืฉืจืช ืืื ืืจื ื, ืืืงืื ืกืคืจืืื /var/www/html/ ะธัะฟะพะปัะทัะตั /home/dan/html/
. SELinux ืชืจืื ืืื ืืคืจื ืฉื ืืืื ืืืช ืืื ืชืืื ืืฆืคืืช ืืืคื ืืืื ืืจื ื ืฉืื. ืืกืืื ืืื ืืื ืฉืื ืงืืขื ื ืืช ืืงืฉืจ ืืืืืื ืืืฉืืื ืืงืืืฆื HTML. ืืื ืืืฆืื ืืช ืืงืฉืจ ืืืืืื ืืืืืืจ ืืืจืืจืช ืืืื, ืืฉืชืืฉ ืืคืงืืื ืืืื:
$ ls โlz /var/www/html
-rw-rโrโ. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
ืื ื ืืืขื ื httpd_sys_content_t
ืืืงืฉืจ ืขืืืจ ืงืืฆื HTML. ืขืืื ื ืืืืืืจ ืืช ืืงืฉืจ ืืืืืื ืืื ืขืืืจ ืืกืคืจืืื ืื ืืืืืช ืฉืื ื, ืฉืืจืืข ืืฉ ืื ืืช ืืืงืฉืจ ืืื:
-rw-rโrโ. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
ืคืงืืื ืืืืคืืช ืืืืืงืช ืืงืฉืจ ืืืืืื ืฉื ืงืืืฅ ืื ืกืคืจืื:
$ semanage fcontext -l | grep '/var/www'
ื ืฉืชืืฉ ืื ื-semanage ืืื ืืฉื ืืช ืืช ืืืงืฉืจ ืืืืจ ืฉืืฆืื ื ืืช ืืงืฉืจ ืืืืืื ืื ืืื. ืืื ืืฉื ืืช ืืช ืืืงืฉืจ ืฉื /home/dan/html, ืืคืขื ืืช ืืคืงืืืืช ืืืืืช:
$ semanage fcontext -a -t httpd_sys_content_t โ/home/dan/html(/.*)?โ
$ semanage fcontext -l | grep โ/home/dan/htmlโ
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
ืืืืจ ืฉืื ืื ืืืงืฉืจ ืืืืฆืขืืช Semanage, ืืคืงืืื restorecon ืชืืขื ืืช ืืงืฉืจ ืืจืืจืช ืืืืื ืขืืืจ ืงืืฆืื ืืกืคืจืืืช. ืฉืจืช ืืืื ืืจื ื ืฉืื ื ืืืื ืืขืช ืืงืจืื ืงืืฆืื ืืืชืืงืืื /home/dan/html
ืืืืืื ืฉืืงืฉืจ ืืืืืื ืขืืืจ ืชืืงืื ืื ืืฉืชื ื ื httpd_sys_content_t
.
3. ืฆืืจ ืืืื ืืืช ืืงืืืืช
ืืืชืื ื ืืฆืืื ืฉืืื ืืฉืืืืช ืื "ื ืื ืืืขืืืืช ืื ืืืชื ืืงืื ืฉืืืืืช (avc/denial) ื-audit.log. ืืืฉืจ ืื ืงืืจื, ืขืืื ืืืฆืืจ ืืืื ืืืช ืืงืืืืช. ืืชื ืืืื ืืืฆืื ืืช ืื ืืฉืืืืืช ืืืืฆืขืืช audit2why, ืืืชืืืจ ืืขืื.
ืืชื ืืืื ืืืฆืืจ ืืืื ืืืช ืืงืืืืช ืืื ืืคืชืืจ ืฉืืืืืช. ืืืืืื, ืื ื ืืงืืืื ืฉืืืื ืืงืฉืืจื ื-httpd (apache) ืื smbd (samba), ืื ื ืืืฆืขืื grep ืฉื ืืฉืืืืืช ืืืืฆืจืื ืขืืืจื ืืืื ืืืช:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
ืืื http_policy
ะธ smb_policy
ืื ืฉืืืช ืืืืื ืืืช ืืืงืืืืช ืฉืืฆืจื ื. ืืขืช ืขืืื ื ืืืขืื ืืช ืืืืื ืืืช ืืืงืืืืช ืฉื ืืฆืจื ืืืืื ืืืช ื-SELinux ืื ืืืืืช. ื ืืชื ืืขืฉืืช ืืืช ืืืืคื ืืื:
$ semodule โI http_policy.pp
$ semodule โI smb_policy.pp
ืืืืื ืืืช ืืืงืืืืช ืฉืื ื ืืืจืื ืืื ื ืื ืืืืจืื ืืงืื ืขืื AVC ืื ืื ืืื ื-audit.log.
ืื ืืื ืื ืืกืืื ืฉืื ืืขืืืจ ืื ืืืืื ืืช SELinux. ืื ื ืืงืืื ืฉืืืจื ืงืจืืืช ืืืืจ ืื ืชืจืืืฉื ืืืชืจ ืื ืื ืขื SELinux.
ืืงืืจ: www.habr.com