首頁 > linux教程 > SELinux管理 閱讀:0更新時間:2020-03-28 01:08:15

SELinux策略規則的開啟和關閉(詳解版)

默認情況下,并不是所有的規則都處于開啟狀態,因此,雖然我們無需修改規則的具體內容,但學習如何開啟和關閉規則,還是很有必要的。

規則的開啟與關閉并不困難,使用 getsebool 命令來查詢規則的開啟和關閉狀態,使用 setsebool 命令來修改規則的開啟與關閉狀態。

查詢策略規則是否開啟

先來看看如何知道哪些規則是啟用的,哪些規則是關閉的。這時需要使用 getsebool 命令,命令格式如下:

[root@localhost ~]# getsebool [-a] [規則名]

-a 選項的含義是列出所有規則的開啟狀態。

例如:

[root@localhost ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
allow_daemons_use_tcp_wrapper --> off
…省略部分輸出…
#getsebool命令明確地列出了規則的開啟狀態

除此之外,還可以使用 semanage boolean -l 命令(此命令需事先手動安裝),此命令的輸出結構同 getsebool 命令相比,輸出信息中多了默認狀態、當前狀態以及相關描述等信息。感興趣的讀者,可以自己嘗試運行,觀看輸出結果。

修改規則的開啟狀態

能夠查詢到規則的開啟狀態,我們使用 setsebool 命令就可以開啟和關閉某個規則。當然,我們先應該通過 sesearch 命令確認這個規則的作用。

sesearch 命令格式如下:

[root@localhost ~]# setsebool [-P] 規則名=[0|1]

-P 選項的含義是將改變寫入配置文件,永久生效。規則名有 2 個值,分別是 0 和 1,0 代表將該規則關閉,1 代表將該規則開啟。

舉個例子:

[root@localhost ~]# getsebool -a | grep httpd
#查詢和apache相關的規則
…省略部分輸出…
httpd_enable_homedirs --> off
…省略部分輸出…
#發現httpd_enable_homedirs規則是開啟的,這個規則主要用于允許apache進程訪問用戶的家目錄
#如果不開啟這個規則,那么apache的userdir功能將不能使用
[root@localhost ~]# setsebool -P httpd_enable_homedirs=1
#開啟httpd_enable_homedirs規則
[root@localhost ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
#查詢規則狀態是開啟
[root@localhost ~]# setsebool -P httpd_enable_homedirs=0
#關閉規則
[root@localhost ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
#查詢規則狀態是關閉

SElinux導致vsftpd不能正常登錄

舉個實際的例子,vsftpd 是 CentOS 默認的文件服務器,這個服務主要是用來進行文件的下載和上傳的。不過,如果啟動了 SELinux,則會發現 vsftpd 服務是不能登錄的。我們來做一個實驗,命令如下:

[root@localhost ~]# yum -y install vsftpd
#安裝vsftpd服務器端
[root@localhost ~]# yum -y install ftp
#安裝ftp命令,也就是ftp客戶端
[root@localhost ~]# useradd user
[root@localhost ~]# passwd user
#添加測試用戶,并配置密碼
[root@localhost ~]# service vsftpd start
#啟動vsftpd服務
[root@localhost ~]# ftp 192.168.4.210
#登錄本機的ftp
Connected to 192.168.4.210 (192.168.4.210).2.0 (vsFTPd 2.2.2)
Name (192.168.4.210:root):user ←輸入用戶名
3.1 Please specify the password.
Password: ←輸入密碼
5.0 OOPS:cannot change directory:/home/user
Login failed.
#登錄報錯,不能正常登錄

這很奇怪,vsftpd 是只要安裝并啟動就可以正常使用的,不用修改任何配置文件,因為默認配置是非常完善而且正確的。這時我們考慮是 SELinux 引起的問題,可以使用前面章節中關于日志查看的三個命令中的任意一個,來看看是否有關于 vsftpd 的報錯。命令如下:

[root@localhost ~]# audit2why < /var/log/audit/audit.log
#分析SELinux的日志
type-AVC msg-audit(1370428985.525:1146) : avc: denied {search } for pid-28408 comm-"vsftpd" name="home" dev=sda3    ino=1046530 scontext=unconfined_u:system_r:ftpd_t:s0-s0:c0.ol023
tcontext=system_u:object_r:home_root_t:s0 tclass=dir
#有關于vsftpd的錯.看來確實是SELinux引起的不能登陸 ...省略部分輸出...
Was caused by:
One of the following booleans was set incorrectly.
Description:
Allow ftp servers to login to local users and read/write all files on the system, governed by DAC.
Allow access by executing:
# setsebool -P allow_ftpd_full_access 1
Description:
Allow ftp to read and write files in the user home directories
Allow access by executing:
#   setsebool -P ftp_home_dir 1
#建議執行此命令,運行ftp讀取和寫入用戶的家目錄

既然給出了建議命令,我們就試試吧:

[root@localhost ~]# setsebool -P ftp_home_dir 1
#開啟ftp_home_dir規則
[root@localhost ~]# ftp 192.168.4.210
Connected to 192.168.4.210 (192.168.4.210).2.0 (vsFTPd 2.2.2)
Name (192.168.4.210:root):user ←輸入用戶名
3.1 Please specify the password.
Password: ←輸入密碼
2.0 Login successful. ←登錄成功

通過這個例子,我們學習了如何通過日志來解決因為規則沒有開啟而導致的 SELinux 問題。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩