注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HongMain 的博客

关注编程技术: Linux, Windows, C/C++

 
 
 

日志

 
 
 
 

Apache的HTTP 403 Forbidden: You don't have permission to access错误的多种原因与解决方法!  

2011-08-07 12:01:39|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天换了台机器,在配置Linux 的Apache 服务时,遇到403 错误,现在解决了,总结一下解决方法:

环境:CentOS 6.0,其它版本的Linux应该通用,没测试。

1. 访问的文档权限不够。要755以上权限。解决方法:用命令chmod 755 /var/www/ 或您设置的相应目录。


2. SELinux或防火墙的原因。解决方法:先关闭SELinux和让防火墙通过WWW服务。

执行php -v命令有以下输出:

Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied

这个说明是selinux的原因,服务器确实开着selinux的,更改selinux的配置文件将其设为disable,可我不想重启服务器,有以下解决办法:

执行命令:setenforce 0

就可以不重启关闭selinux了,不过关闭selinux而使zend optimizer生效毕竟不是完美的解决办法,继续关注中。

附selinux的资料:

selinux简介

SElinux 在linux内核级别上提供了一个灵活的强制访问控制系统(MAC),这个强制访问控制系统是建立在自由访问控制系统(DAC)之上的。

DAC是指系统的安全访问控制都是由系统管理员root自由管理的,不是系统强制行为

MAC运行的时候,比如一个应用程序或者一个线程以某个用户UID或者SUID运行的时候同样对一些其他的对象拥有访问控制限制,比如文件,套接子(sockets)或者其他的线程

通过运行SElinux MAC内核可以保护系统不受到恶意程序的侵犯,或者系统本身的bug不会给系统带来致命影响(把影响限定在一定范围内)

SElinux为每一个用户,程序,进程,还有文件定义了访问还有传输的权限。然后管理所有这些对象之间的交互关系

对于SELinux设定的对象全限是可以根据需要在安装时候规定严格程度,或者完全禁用

在大多数情况下,SElinux对于用户来说是完全透明的,普通用户根本感觉不到Selinux的存在,只有系统管理员才需要对这些用户环境,以及 策略进行考虑。这些策略可以按照需要宽松的部署或者应用严格的限制,Selinux提供了非常具体的控制策略,范围覆盖整个linux系统

比如,当一个对象如应用程序要访问一个文件对象,内核中的控制程序检查访问向量缓存(AVC),从这里寻找目标和对象的权限,如果在这里没有发现权 限定义,则继续查询安全定义的上下关联,以及文件权限,然后作出准许访问以及拒绝访问的决定。如果在var/log/messages出现avc: denied信息,则表明访问拒绝。

目标和对象通过安装的策略来决定自身的安全关联,同时这些安装的策略也负责给系统产生安全列表提供信息。

除了运行强制模式以外,SELinux可以运行在许可模式,这时候,检查AVC之后,拒绝的情况被记录。Selinux不强制使用这种策略.

以下介绍一下SELinux相关的工具

/usr/bin/setenforce 修改SELinux的实时运行模式

setenforce 1 设置SELinux 成为enforcing模式

setenforce 0 设置SELinux 成为permissive模式

如果要彻底禁用SELinux 需要在/etc/sysconfig/selinux中设置参数selinux=0 ,或者在/etc/grub.conf中添加这个参数

/usr/bin/setstatus -v

察看系统的状态

以下是运行输出,请参考

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: enforcing


3. DocumentRoot的设置。解决方法如下:

打开 apache的配置文件httpd.conf,找到这段代码:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

有时候由于配置了php后,这里的“Deny from all”已经拒绝了一切连接。把该行改成“allow from all”,修改后的代码如下,问题解决。

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>


4. 虚拟主机配置错误。例如我遇到过一次的:
httpd.conf里加载了虚拟主机的配置文件:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

而conf/extra/httpd-vhosts.conf并没有配置好,而且虚拟主机功能暂时还没有用,所以把Include conf/extra/httpd-vhosts.conf注释掉,重启apache后正常了。
解决方法:重新配置虚拟主机或暂时关闭。


  评论这张
 
阅读(38)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017