一个Apache访问权限问题(万恶的SELinux)

转载地址:https://blog.csdn.net/ncafei/article/details/53148613


前几天,我搞了个准备一些git或者hg的repositories,为了网页访问的方便,我找到了其中一 个工具,Git自带的gitweb,但是当我把它作为CGI让apache调用它去发布/home/repo/pub目录时,不管怎样都访问不到 /home/repo/pub下面的东西,与此同时,在/var/www目录下的文件和目录,通过apache访问是正常的。而且,我不通过 apache,而直接运行gitweb.cgi程序,是可以访问/home/repo/pub目录下的git repository的。经过很长时间来排查原因,终于,明白了,万恶的selinux啊,权限问题。

其实,原因是我的机器SElinux处于开启状态,而SELinux默认的策略,apache的进程默认只能访问/var/www目录。
解决方法:
1. 关掉SELinux,并重启系统让其生效。
    修改/etc/selinux/config配置文件,设置SELINUX=disabled
    如果不想重启系统,使用命令:setenforce 0
    (也可在grub.conf修改kernel启动参数,添加selinux=0。当然需要重启系统)
2. 或者,修改SELinux的设置,让apache进程可以访问了我的目录。
     命令为:chcon –t var_t /home/repo;       chcon –R –t httpd_sys_content_t pub
当我们把SELinux的权限问题解决后,重启了Apache,就一切正常了,我的GitWeb就可以正常运行了。
我们在局域网中使用,网络环境相对安全,所以实际测试过程中一般都disable SELinux的。当然,为了安全也是可以开启的。


下面,再简单一下SELinux相关的知识吧。
查看selinux状态:/usr/bin/setstatus -v
查看和设置SELinux的当前 工作 模式 :getenforce/setenforce
查看和设置当前Policy(策略)的布尔值:getsebool/setsebool
查看文件(夹)、进程和用户的SELinx属性:ls -Z / ps -Z / id -Z
改变文件或文件夹的content标记:chcon

SELinux 全称是Security Enhanced  Linux ,由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,据 称相当于B1级的军事安全性能。比MS NT所谓的C2等高得多。
应用SELinux后,可以减轻恶意攻击或恶意软件带来的灾难,并提供对机密性 和完整性有很高要求的信息很高的安全保障。 SELinux vs Linux 普通Linux安全和传统Unix系统一样,基于自主存取控制方法,即DAC,只要符合规定的权限,如规定的所有者和文件属性等,就可存取资源。在传统的 安全机制下,一些通过setuid/setgid的程序就产生了严重安全隐患,甚至一些错误的配置就可引发巨大的漏洞,被轻易攻击。
而SELinux则基于强制存取控制方法,即MAC,透过强制性的安全策略,应用程序或用户必须同时符合DAC及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响 其他 正常运作的程序和应用,并保持它们的安全系统结构。

猜你喜欢

转载自blog.csdn.net/qq_21956483/article/details/79854223