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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/831098

前言:本文主要介绍了因为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. ……

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

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

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/831098

时间: 2024-08-31 21:41:25

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

Apache Wind2003 配置网站目录权限小结_win服务器

非常简单的权限设置,就是访问网站时会弹出用户名和密码,通过身份验证后可以正常浏览,如下图. 在Apache和Windows2003中配置起来也非常方便,主要参考了Apche的手册 1.建立密码文件 Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件: 复制代码 代码如下: htpasswd -b -c -m -d -s c:\password.txt username password 其中-m -d -s都是加密的方式,具体见参考手册 2.启用认证 其中方式有

ASPNET目录权限控制

    很久以前由"夜鹰"做的一个ASP.NET的示例,现在把他传上来,以做备份,NND,那家伙搞JAVA的研究.NET弄得比我还深,郁闷啊~~~    用到了.NET中的"票据"的功能,这个好像应该是membership中用到的,这个示例没有用到membership,也就是没有建立到那11个表...呵呵...    源码下载: 点击下载

网站目录文件权限的安全设置

linux中网站安全配置 1.我们首先设定网站目录和文件的所有者和所有组为centos,www,如下命令: chown -R centos:www /home/centos/web 2.设置网站目录权限为750,750是centos用户对目录拥有读写执行的权限,这样centos用户可以在任何目录下创建文件,用户组有有读执行权限,这样才能进入目录,其它用户没有任何权限. find -type d -exec chmod 750 {} ; 3.设置网站文件权限为640,640指只有centos用户对

Nginx中php-fpm进程目录权限防跨站配置

Nginx下开多个虚拟机网站防跨站是首要的任务,PHP5.3之前的版本不支持open_basedir,只能通过控制PHP-cgi进程及目录用户权限进行限制,防止跨站访问. 先了解一下网站正常运行所用到的用户.目录权限: Nginx进程运行用户:接收用户请求,处理静态文件,如果是PHP则转给PHP-CGI处理,网站目录拥有读权限. PHP-cgi进程用户:处理PHP文件,网站目录拥有读权限,个别目录需要写入权限. 让每个网站使用单独的PHP-CGI进程,创建PHP-FPM配置文件,修改以下:  

CentOS修改网站目录提示403的解决方法

在CentOS下由于本身安装的apahce网站根目录在/var/下.这个挂载点已经没空间了,所以得换个位置到/home/www下 切换到这个目录,重启了apache.也给这个目录给了777权限,但访问就是出现403 网上搜了一番,终于找到下面这个命令:  代码如下 复制代码 chcon -R -t httpd_sys_content_t /home/www 执行一遍,正常了! 据说这是SELinux的原因,不懂.仅留着记录! 下面附切换目录步骤 1.vi /etc/httpd/conf/http

关于IIS 对temp目录权限问题的解决

  拒绝访问 temp 目录.用来运行 XmlSerializer 的标识"NT AUTHORITYNETWORK SERVICE"没有访问 temp 目录的足够权限.CodeDom 将使用进程正在使用的用户帐户进行编译,这样,如果用户没有访问系统 temp 目录的权限,将无法进行编译.使用 Path.GetTempPath() API 找到 temp 目录的位置. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细

web jsp filter 权限控制 运行测试出现500问题 怎么解决

问题描述 web jsp filter 权限控制 运行测试出现500问题 怎么解决 工程结构 index.jsp为登陆页面,UserServlet.java为针对登陆的servlet,登陆成功或失败都会跳转到show.jsp,但是有Userfilter.java的过滤.一旦登陆失败会让页面转到error.jsp. 正常是流程:进入index.jsp输入账号密码,登陆成功后进入show.jsp(测试过没问题) 错误的用例:通过控制url绕过index.jsp直接进入show.jsp(出现500错误

请问403 Forbidden nginx怎么解决,目录权限没问题,nginx有设置index.html和index.php

问题描述 请问403Forbiddennginx怎么解决,目录权限没问题,nginx有设置index.html和index.php

C#设置与获取目录权限(.net控制ACL)

想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果.终于发现了一段vb.net的代码,做了修改,以C#展示给大家. using System; using System.Collections; using System.IO; using System.Security.AccessControl; static class Tester { public static void Main() { try { string filename = @"f:\k"; //目