天天看點

Linux:SElinux導緻網站無法通路

通過更改SElinux狀态可以判斷出,當SElinux處于關閉狀态時,網站内容通路正常。

[root@master1-192-168-117-18 ~]# setenforce 0

[root@master1-192-168-117-18 ~]# getenforce

Permissive

[root@master1-192-168-117-18 ~]# setenforce 1

[root@master1-192-168-117-18 ~]# getenforce 0

Enforcing

檢視網站的主目錄的SElinux安全上下文值:

[root@master1-192-168-117-18 ~]# ls -Zd /var/www/html/

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

[root@master1-192-168-117-18 ~]# ls -Zd /home/wwwroot/

drwxr-xr-x. root root system_u:object_r:user_home_dir_t:s0 /home/wwwroot/

将新添加的主目錄SElinux上下文值與系統預設主目錄保持一緻:

[root@master1-192-168-117-18 ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

注意,執行上述設定之後,還無法立即通路網站,還需要使用restorecon指令将設定好的SELinux安全上下文立即生效。在使用restorecon指令時,可以加上-Rv參數對指定的目錄進行遞歸操作,以及顯示SELinux安全上下文的修改過程。

[root@master1-192-168-117-18 ~]# restorecon -Rv /home/wwwroot/

restorecon reset /home/wwwroot context system_u:object_r:user_home_dir_t:s0->system_u:object_r:httpd_sys_content_t:s0

restorecon reset /home/wwwroot/index.html context system_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /home/wwwroot/

[root@master1-192-168-117-18 ~]# ^C

個人使用者首頁功能

第1步:在httpd服務程式中,預設沒有開啟個人使用者首頁功能。為此,我們需要編輯下面的配置檔案,然後在第17行的UserDir disabled參數前面加上井号(#),表示讓httpd服務程式開啟個人使用者首頁功能;同時再把第24行的UserDir public_html參數前面的井号(#)去掉(UserDir參數表示網站資料在使用者家目錄中的儲存目錄名稱,即public_html目錄)。最後,在修改完畢後記得儲存。

[root@master1-192-168-117-18 ~]# vim /etc/httpd/conf.d/userdir.conf

1 #

2 # UserDir: The name of the directory that is appended onto a user's home

3 # directory if a ~user request is received.

4 #

5 # The path to the end user account 'public_html' directory must be

6 # accessible to the webserver userid. This usually means that ~userid

7 # must have permissions of 711, ~userid/public_html must have permissions

8 # of 755, and documents contained therein must be world-readable.

9 # Otherwise, the client will only receive a "403 Forbidden" message.

10 #

11 <IfModule mod_userdir.c>

12 #

13 # UserDir is disabled by default since it can confirm the presence

14 # of a username on the system (depending on home directory

15 # permissions).

16 #

17 # UserDir disabled

18

19 #

20 # To enable requests to /~user/ to serve the user's public_html

21 # directory, remove the "UserDir disabled" line above, and uncomment

22 # the following line instead:

23 #

24 UserDir public_html

25 </IfModule>

26

27 #

28 # Control access to UserDir directories. The following is an example

29 # for a site where these directories are restricted to read-only.

30 #

31 <Directory "/home/*/public_html">

32 AllowOverride FileInfo AuthConfig Limit Indexes

33 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

34 Require method GET POST OPTIONS

35 </Directory>

"/etc/httpd/conf.d/userdir.conf" 36L, 1254C 已寫入

第2步:在使用者家目錄中建立用于儲存網站資料的目錄及首頁面檔案。另外,還需要把家目錄的權限修改為755,保證其他人也有權限讀取裡面的内容。

[aa@master1-192-168-117-18 ~]$ mkdir public_html

[aa@master1-192-168-117-18 ~]$ echo "世界那麼大,我出去看看!" > public_html/index.html

[aa@master1-192-168-117-18 ~]$ chmod -Rf 755 /home/aa/

第3步:重新啟動httpd服務程式,在浏覽器的位址欄中輸入網址,其格式為“網址/~使用者名”(其中的波浪号是必需的,而且網址、波浪号、使用者名之間沒有空格),從理論上來講就可以看到使用者的個人網站了。不出所料的是,系統顯示報錯頁面,如圖10-9所示。這一定還是SELinux惹的禍。

第4步:使用getsebool指令查詢并過濾出所有與HTTP協定相關的安全政策。其中,off為禁止狀态,on為允許狀态。

[root@master1-192-168-117-18 ~]# getsebool -a | grep http

httpd_anon_write --> off

httpd_builtin_scripting --> on

httpd_can_check_spam --> off

httpd_can_connect_ftp --> off

httpd_can_connect_ldap --> off

httpd_can_connect_mythtv --> off

httpd_can_connect_zabbix --> off

httpd_can_network_connect --> off

httpd_can_network_connect_cobbler --> off

httpd_can_network_connect_db --> off

httpd_can_network_memcache --> off

httpd_can_network_relay --> off

httpd_can_sendmail --> off

httpd_dbus_avahi --> off

httpd_dbus_sssd --> off

httpd_dontaudit_search_dirs --> off

httpd_enable_cgi --> on

httpd_enable_ftp_server --> off

httpd_enable_homedirs --> off

httpd_execmem --> off

httpd_graceful_shutdown --> on

httpd_manage_ipa --> off

httpd_mod_auth_ntlm_winbind --> off

httpd_mod_auth_pam --> off

httpd_read_user_content --> off

httpd_run_ipa --> off

httpd_run_preupgrade --> off

httpd_run_stickshift --> off

httpd_serve_cobbler_files --> off

httpd_setrlimit --> off

httpd_ssi_exec --> off

httpd_sys_script_anon_write --> off

httpd_tmp_exec --> off

httpd_tty_comm --> off

httpd_unified --> off

httpd_use_cifs --> off

httpd_use_fusefs --> off

httpd_use_gpg --> off

httpd_use_nfs --> off

httpd_use_openstack --> off

httpd_use_sasl --> off

httpd_verify_dns --> off

named_tcp_bind_http_port --> off

prosody_bind_http_port --> off

[root@master1-192-168-117-18 ~]# setsebool -P httpd_enable_homedirs=on

通過身份驗證通路網頁

第1步:先使用htpasswd指令生成密碼資料庫。-c參數表示第一次生成;後面再分别添加密碼資料庫的存放檔案,以及驗證要用到的使用者名稱(該使用者不必是系統中已有的本地賬戶)。

[root@master1-192-168-117-18 ~]# htpasswd -c /etc/httpd/passwd aa

New password:

Re-type new password:

Adding password for user aa

第2步:第2步:編輯個人使用者首頁功能的配置檔案。随後儲存并退出配置檔案,重新開機httpd服務程式即可生效。

32 AllowOverride all

33 authuserfile "/etc/httpd/passwd"

34 authname "My privately website"

35 authtype basic

36 require user aa

37 </Directory>

38

"/etc/httpd/conf.d/userdir.conf" 38L, 1217C 已寫入

繼續閱讀