- 針對Process 來限制規範權限
- 也可以針對 root 使用者來進行程式的限制
觀察 SElinux
#sestatus
設定是否要強制規範SElinux
#setenforce
#setenforce 0
觀察 SElinux
#sestatus
相關設定檔
/etc/sysconfig/selinux
觀察 SElinux 相關設定
#getsebool -a
SElinux 可以設定程式不可以 listen port
#getsebool -a
只限制 /etc/init.d/* 內的 script 來規範 SElinux
- 也就是說只要非 /etc/init.d/ 下面的 scripts 就不會列入 SElinux的保護
- 沒有 純文字的設定來改 預設的 SElinux的保護路徑, 因為儲存在 db 內, 可以使用 dump的方式來更改
SElinux 可以設定程式不可以 listen port
權限控管機制項目
- DAC ( Discretionary Access Control )
- 自主存取控制
- 傳統的權限控管方式, 依照身份來決定
- MAC
- 強制存取控制
- 根據條件來進行控管
- 實際上, process 要先符合 DAC 規範, 並通過MAC的限制才可以存取
SElinux 策略切記不要設定 disable 後又切換到enforce (會死機)
- 可以在開機的時候利用 selinux=0 引數來停用 selinux ( 萬一打不開 )
- 解決方式
- 如果設定為SELINUX=disable 又改設定為 SELINUX=enforce 應該先設定為 SELINUX=permissive 不可以直接啟用SELINUX=enforce
- 然後啟動重新標記 Step 1. 建立 # touch /.autorelabel ( 這樣開機的時候會重新建立 label ) Step 2. #reboot
- 如果要從 SELINUX=permissive 轉到SELINUX=enforce 也要重新標記
規則檔存放路徑
/etc/selinux/targeted/policy
-- 中午休息 --
Security Context 組成
- 一般格式組成
- identity:role:type
- 身份識別:角色:類型
舉例來說
[root@localhost ~]# ls -Z
-rw------- root root system_u:object_r:user_home_t anaconda-ks.cfg
drwxr-xr-x root root root:object_r:user_home_t Desktop
-rw-r--r-- root root root:object_r:user_home_t install.log
-rw-r--r-- root root root:object_r:user_home_t install.log.syslog
[max@localhost ~]$ ls -aZ
drwx------ max max system_u:object_r:user_home_dir_t .
drwxr-xr-x root root system_u:object_r:home_root_t ..
-rw------- max max root:object_r:user_home_t .bash_history
-rw-r--r-- max max system_u:object_r:user_home_t .bash_logout
-rw-r--r-- max max system_u:object_r:user_home_t .bash_profile
-rw-r--r-- max max system_u:object_r:user_home_t .bashrc
drwxr-xr-x max max system_u:object_r:user_home_t .mozilla
-rw------- max max user_u:object_r:user_home_t .Xauthority
觀察 Security Context
一般來說可以指令加上 -Z 來觀察
例如
# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh
# ls -Z
-rw------- root root system_u:object_r:user_home_t anaconda-ks.cfg
drwxr-xr-x root root root:object_r:user_home_t Desktop
-rw-r--r-- root root root:object_r:user_home_t install.log
-rw-r--r-- root root root:object_r:user_home_t install.log.syslog
Notes:
- 如果 SELINUXTYPE=targeted 前面兩個欄位幾乎沒有功能, 在SELINUXTYPE=strict 才比較有作用
- 一般來說會看 type 來決定規範, type 又可以稱為 domain
- 查詢的方式, 例如 # sesearch -a | grep 'allow httpd_t' ( httpd_t 為type 名稱 )
- 內容就是針對該process 可以執行的行為, 例如
- allow httpd_t httpd_sys_script_exec_t : file { ioctl read getattr lock execute };
SELinux Boolean項目
- /etc/selinux/booleans 存放目錄
- 使用 getsebool 來觀察
- #getsebool -a | cat -n | grep httpd
SELinux 錯誤trouble shooting
- 藉由 #setsebool 服務名稱_disable_trans=1 來停止SELinux對該服務的干涉( 此為暫時性的作法)
- 藉由 #setsebool -P 服務名稱_disable_trans=1 來停止SELinux對該服務的干涉 ( 會存入設定檔, 永久生效 )
- 例如
- [root@localhost booleans]# getsebool -a |cat -n | grep httpd_disable_trans102 httpd_disable_trans --> off[root@localhost booleans]# setsebool httpd_disable_trans=1[root@localhost booleans]# getsebool -a |cat -n | grep httpd_disable_trans102 httpd_disable_trans --> on[root@localhost booleans]# setsebool httpd_disable_trans=0[root@localhost booleans]# getsebool -a |cat -n | grep httpd_disable_trans102 httpd_disable_trans --> off
- 可以透過 chcon 來變更檔案目錄的security context, 例如
- [root@localhost booleans]# mkdir /home/max/test[root@localhost booleans]# ls -Zd /home/max/testdrwxr-xr-x root root root:object_r:user_home_t /home/max/test[root@localhost booleans]# chcon -R -t httpd_sys_content_t /home/max/test/[root@localhost booleans]# ls -Zd /home/max/testdrwxr-xr-x root root root:object_r:httpd_sys_content_t /home/max/test
- 如果對某一個路徑( 目錄 )設定 type, 在該目錄底下建立的檔案會繼承該type ,但是要注意像 cp -a 的方式, 他的type 未必會繼承,例如
- [root@localhost test]# touch /home/max/test/testfile[root@localhost test]# ls -Zd /home/max/testdrwxr-xr-x root root root:object_r:httpd_sys_content_t /home/max/test[root@localhost test]# ls -Z /home/max/test-rw-r--r-- root root root:object_r:httpd_sys_content_t testfile[root@localhost test]# cp /etc/passwd /home/max/test/[root@localhost test]# ls -Z /home/max/test-rw-r--r-- root root root:object_r:httpd_sys_content_t passwd-rw-r--r-- root root root:object_r:httpd_sys_content_t testfile[root@localhost test]# cp -a /etc/passwd /home/max/test/passwd2[root@localhost test]# ls -Z /home/max/test-rw-r--r-- root root root:object_r:httpd_sys_content_t passwd-rw-r--r-- root root system_u:object_r:etc_t passwd2-rw-r--r-- root root root:object_r:httpd_sys_content_t testfile
- 套件名稱 policycoreutils-gui
- 指令 system-config-selinux
參考資料
Notes:
如果觀察 SELinux Trouble shooting
- samba 伺服器
- 分享目錄一般要將type 設定為 samba_share_t
- 利用 chcon -t samba_share_t 路徑改變
- 家目錄的問題
- [root@localhost test]# getsebool -a | grep samba_enable_homesamba_enable_home_dirs --> off[root@localhost test]# setsebool samba_enable_home_dirs=1[root@localhost test]# getsebool -a | grep samba_enable_homesamba_enable_home_dirs --> on
- ftp 伺服器
- 要enable home directory
- [root@localhost test]# getsebool -a | grep ftp_h
- ftp_home_dir --> off
- [root@localhost test]# setsebool ftp_home_dir=1
- [root@localhost test]# getsebool -a | grep ftp_h
- ftp_home_dir --> on
如果觀察 SELinux Trouble shooting
首先 setroubleshootd 必須要執行
然後使用 sealert 指令觀察相關訊息
# /etc/init.d/setroubleshoot status
setroubleshootd (pid 21958) 正在執行...
然後使用 sealert 指令觀察相關訊息
方式為 sealert -l XXXXXXXXXX訊息代碼 ( 藉由觀察 /var/log/messages 取得 )
可以使用 semanage 來管理
假設要知道 httpd 可以在那一個port Listen
semanage port --list | grep httpd
新增定義的port 給httpd
semanage port -a -t http_port_t -p tcp 1234
沒有留言:
張貼留言