解决SELinux对网站目录权限控制的不当的问题

简介:

前言:本文主要介绍了因为SELinux对网站目录权限控制的不当而引起网站无法正常操作和访问的问题。

正文开始:今天下午闲着没有事做于是突然兴起想尝试安装下Drupal。以前用Wordpress做博客久了,总想着尝尝新。

按照Installtion Guide提示的安装步骤进行操作如下:

 
  1. wget http://drupal.org/files/projects/drupal-7.12.tar.gz 
  2. tar -zxvf drupal-7.12.tar.gz 
  3. mv drupal-7.12 /var/www/html/home_start
  4. cd /var/www/html/home_start
  5. cp sites/default/default.settings.php sites/default/settings.php 
  6. chmod a+w sites/default/settings.php 
  7. chmod a+w sites/default 
  8. mysqladmin -u username -p create databasename #用正确的字符串代替username和databasename

一切准备就绪!就等着进网站目录进行下一步配置了!

不幸的是,在浏览器中打开网站的目录后就遭遇了httpd的403拒绝访问提示。

这很显然,根据以往的经验可以判断是目录权限存在问题。

为了验证这一说法,我们可以检查httpd的错误日志。默认情况下日志就存在在/var/log/httpd/目录中。

 
  1. [root@localhost ~]# grep Permission /var/log/httpd/error_log 
  2. [Tue Apr 10 09:07:04 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  3. [Tue Apr 10 09:07:50 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start/ denied 
  4. [Tue Apr 10 09:08:07 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start/ denied 
  5. [Tue Apr 10 09:10:06 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start/ denied 
  6. [Tue Apr 10 09:11:08 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start/ denied 
  7. [Tue Apr 10 09:11:17 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  8. [Tue Apr 10 09:11:34 2012] [error] [client ::1] (13)Permission denied: access to /start denied 
  9. [Tue Apr 10 09:13:35 2012] [error] [client ::1] (13)Permission denied: access to /start denied 
  10. [Tue Apr 10 09:13:51 2012] [error] [client ::1] (13)Permission denied: access to /start/site/default/ denied 
  11. [Tue Apr 10 09:13:57 2012] [error] [client ::1] (13)Permission denied: access to /start/sites denied 
  12. [Tue Apr 10 09:14:51 2012] [error] [client ::1] (13)Permission denied: access to /start/install.php denied 
  13. [Tue Apr 10 09:18:57 2012] [error] [client ::1] (13)Permission denied: access to /start/install.php denied 
  14. [Tue Apr 10 09:19:01 2012] [error] [client ::1] (13)Permission denied: access to /start/ denied 
  15. [Tue Apr 10 09:22:03 2012] [error] [client ::1] (13)Permission denied: access to /start denied 
  16. [Tue Apr 10 09:22:21 2012] [error] [client ::1] (13)Permission denied: access to /start denied 
  17. [Tue Apr 10 09:22:24 2012] [error] [client ::1] (13)Permission denied: access to /start denied 
  18. [Tue Apr 10 09:22:27 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  19. [Tue Apr 10 09:27:02 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  20. [Tue Apr 10 09:27:05 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  21. [Tue Apr 10 09:27:07 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /start denied 
  22. [Tue Apr 10 12:09:58 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /home_start denied 
  23. [Tue Apr 10 12:42:38 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /home_start denied 
  24. [Tue Apr 10 12:42:40 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /home_start denied 
  25. [Tue Apr 10 12:44:15 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /home_start denied 
  26. [Tue Apr 10 12:44:20 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /home_start denied 
  27. [Tue Apr 10 20:53:21 2012] [error] [client ::1] (13)Permission denied: access to /home_start denied 
  28. [Tue Apr 10 21:07:21 2012] [error] [client ::1] (13)Permission denied: access to /home_start denied 
  29. [Tue Apr 10 21:14:48 2012] [error] [client ::1] (13)Permission denied: access to /home_start denied 
  30. [root@localhost ~]#  

再检查网站目录和文件的权限。为方便起见直接用-lZ选项。用于显示详细信息和SELinux权限信息

 
  1. [root@localhost html]# ls -lZ 
  2. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 archive.html 
  3. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 blog 
  4. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 blog_backup 
  5. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 blog.htm 
  6. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 blog.html 
  7. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 css 
  8. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 home_page 
  9. drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 home_start #问题行
  10. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 images 
  11. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.htm 
  12. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html 
  13. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 info_php.php 
  14. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 js 
  15. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 log 
  16. drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 php #以前的遗留问题
  17. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 phpMyAdmin-3.4.10.1-all-languages 
  18. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 PSDs 
  19. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 readme.txt 
  20. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 style.htm 
  21. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 style.html 
  22. drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 wiki 

显然上面显示的结果中的09、16两行的权限与其他网站目录不同。

再查看selinx的工作状态,判断是不是SELinux引起的。

 
  1. [root@localhost httpd]# sestatus  
  2. SELinux status:                 enabled 
  3. SELinuxfs mount:                /selinux 
  4. Current mode:                   enforcing 
  5. Mode from config file:          enforcing 
  6. Policy version:                 24 
  7. Policy from config file:        targeted 

这就是导致网站权限不正确的原因。

我猜测可能是在selinux启用时对目录或文件进行操作导致的。因为最近我对SELinux进行了升级(以前没有遇到)。

PS:最新的原因分析请参见《对SELinux权限发生变化的解释》一文。

所以使用chcon更改SELinux权限以及显示结果如下:

setenforce 0 #必须暂时停止SELinux,否则可能导致操作失败。 
chcon -t httpd_sys_content_t -R /var/www/html/home_start/ #R参数是递归操作的意思



经过修改就会发现SELinux的对应权限已经和其他目录相同了!都是
httpd_sys_content_t。

 
  1. [root@localhost html]# setenforce --help 
  2. usage:  setenforce [ Enforcing | Permissive | 1 | 0 ] 
  3. [root@localhost html]# setenforce 0 
  4. [root@localhost html]# cd 
  5. [root@localhost ~]# ls /var/www/html/ -Z 
  6. ……
  7. drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 home_start 
  8. ……
  9. [root@localhost ~]# chcon -t httpd_sys_content_t -R /var/www/html/home_start/ 
  10. [root@localhost ~]# ls /var/www/html/home_start/ -Z 
  11. ……
  12. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 authorize.php 
  13. ……

然后,再次打开浏览器输入地址,验证能否访问,如果可以访问就可以进行下一步配置了!

最后,还是那句话,遇到问题一定要仔细分析,尽可能的通过自己的努力和分析发现问题所在,这样才能体会到解决问题的快乐!





本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/831098,如需转载请自行联系原作者


相关文章
|
12月前
|
安全 PHP
PHP审计-动态调试-文件安全
PHP审计-动态调试-文件安全
|
机器学习/深度学习 网络协议 安全
【网络安全】利用samba服务绕过未开启文件包含配置
利用samba服务绕过未开启文件包含配置
128 0
【网络安全】利用samba服务绕过未开启文件包含配置
vsftpd目录限制chroot(用户隔离)500错误分析以及解决方案
vsftpd目录限制chroot(用户隔离)500错误分析以及解决方案 1)chroot_list文件不存在 2)安全问题 500 OOPS: vsftpd: refusing to run with weitable root inside chroot() chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
vsftpd目录限制chroot(用户隔离)500错误分析以及解决方案
|
网络协议 安全 Linux
使用semanage管理SELinux安全策略
Semanage是用于配置SELinux策略某些元素而无需修改或重新编译策略源的工具。
使用semanage管理SELinux安全策略
|
缓存 JSON 监控
日志服务权限配置问题
一. 权限介绍 1. 为什么需要授权 RAM授权 您可以通过RAM创建、管理用户账号(例如员工、系统或应用程序),并控制这些用户账号对您名下资源具有的操作权限。当您的企业存在多用户协同操作资源时,使用RAM可以让您避免与其他用户共享云账号密钥,按需为用户分配最小权限,从而降低您的企业信息安全风险。
8765 0
日志服务权限配置问题
|
安全 Linux 运维
Linux服务器漏洞防护测试 可SUDO提权到管理员
linux一直以来很少有漏洞,稳定,高效,安全.深受网站,app运营者的喜欢与青睐,很多网站服务器的运营技术和运维,在维护服务器的同时都会使用sudo命令来做安全,殊不知sudo近期被爆出漏洞,并登上CVE-2019-14287级别,可见漏洞的危害性较大.
1513 0
|
安全 Windows
高危Windows系统 SMB/RDP远程命令执行漏洞 手工修复办法
 1、Windows Update更新补丁方式: 更新方法:点击“开始”->“控制面板”->“Windows Update” ,点击“检查更新”-“安装更新”:   2、检查安装结果: 点击“查看更新历史记录”,检查安装的补丁: 3、重启系统生效 漏洞参考: https://blogs.
1399 0