restorecon

恢復文件的安全上下文

補充說明

restorecon命令 用來恢復SELinux文件屬性即恢復文件的安全上下文。

語法

1restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...]

選項

1-i:忽略不存在的文件。
2-f:infilename 文件 infilename 中記錄要處理的文件。
3-e:directory 排除目錄。
4-R/-r:遞歸處理目錄。
5-n:不改變文件標籤。
6-o/outfilename:保存文件列表到 outfilename,在文件不正確情況下。
7-v:將過程顯示到屏幕上。
8-F:強制恢復文件安全語境。

實例

假設CentOS安裝了apache,網頁默認的主目錄是/var/www/html,我們經常遇到這樣的問題,在其他目錄中創建了一個網頁文件,然後用mv移動到網頁默認目錄/var/www/html中,但是在瀏覽器中卻打不開這個文件,這很可能是因爲這個文件的SELinux配置信息是繼承原來那個目錄的,與/var/www/html目錄不同,使用mv移動的時候,這個SELinux配置信息也一起移動過來了,從而導致無法打開頁面,具體請看下面的實例:

使用CentOS舉例,如果默認沒有安裝apache,確保網絡連接,使用下面的命令安裝

 1[root@jsdig.com ~]# yum install httpd
 2 # 我們在root的家目錄新建一個html文件 
 3[root@jsdig.com ~]# pwd
 4/root
 5
 6[root@jsdig.com ~]# vi index.html
 7
 8# 隨便輸入一段文字,保存退出 
 9welcome to www.jsdig.com
10
11# 將這個文件mv到網頁默認目錄下 
12[root@jsdig.com ~]# mv index.html /var/www/html/
13
14# 
15# 這個時候我們使用firefox瀏覽器輸入127.0.0.1/index.html發現打不開,
16# 查看一下SELinux的日誌文件,發現了下面這一段報錯信息,從這個報錯信息不難看出,
17# 進程httpd訪問網頁主目錄中的index.html時被SELinux阻止,原因是因爲,SELinux配置信息不正確,
18# 正確的SELinux配置信息應該是scontext=後面的部分,
19# 而index.html文件的SELinux配置信息卻是tcontext=後面的部分,
20# 從tcontext=的第三段“admin_home_t”不難看出,這個文件的SELinux配置信息是root用戶家目錄的。
21# 
22type=AVC msg=audit(1378974214.610:465): avc:  denied  { open } for  pid=2359 comm="httpd" path="/var/www/html/index.html" dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file

使用ls -Z也可以看出,文件和目錄的SELinux信息不匹配

1[root@jsdig.com html]# ls -Z /var/www/html/
2.... unconfined_u:object_r:admin_home_t:s0 index.html
3
4[root@jsdig.com html]# ls -Zd /var/www/html/
5.... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

使用restorecon來恢復網頁主目錄中所有文件的SELinux配置信息(如果目標爲一個目錄,可以添加-R參數遞歸)

1[root@jsdig.com html]# restorecon -R /var/www/html/

來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: