我正在运行一台 CentOS 机器。我想用 Apache 为用户目录提供服务,所以我配置httpd.conf
为允许该public_html
目录。
我已将apache
用户添加到我的用户组和chmod g+xr
其public_html
顶层目录。如果我su apache
可以,则不会cd /home/nijansen/public_html
出现问题。
但是,当我请求时http://localhost/~nijansen
,我收到403 Forbidden
错误。我能够将其缩小到 SELinux 问题 - 当我禁用 SELinux 时,它工作正常。
我已经完成了/usr/sbin/restorecond ~/public_html
,并ls -Zd ~/public_html
给了我
drwxr-x---. nijansen nijansen unconfined_u:object_r:httpd_user_content_t:s0 public_html
并/var/log/httpd/error
说
[Fri Oct 05 20:20:25 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /~nijansen denied
现在我束手无策了,搜索这个问题至今没有找到任何答案。如果能给我一些正确的提示,我将不胜感激。
更新
为了进行故障排除,我已将 SELinux 模式设置为宽容,它确实给出了一些日志,但我无法解释它们:
Oct 5 20:50:18 localhost kernel: type=1400 audit(1349463018.930:95232): avc: denied { search } for pid=10443 comm="httpd" name="nijansen" dev=dm-6 ino=12058625 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir
Oct 5 20:50:18 localhost kernel: type=1400 audit(1349463018.938:95233): avc: denied { getattr } for pid=10444 comm="httpd" path="/home/nijansen" dev=dm-6 ino=12058625 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir
答案1
通过过滤输出ausearch -m avc | audit2allow
很容易找到罪魁祸首:
$ echo "
Oct 5 20:50:18 localhost kernel: type=1400 audit(1349463018.930:95232): avc: denied { search } for pid=10443 comm="httpd" name="nijansen" dev=dm-6 ino=12058625 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir
Oct 5 20:50:18 localhost kernel: type=1400 audit(1349463018.938:95233): avc: denied { getattr } for pid=10444 comm="httpd" path="/home/nijansen" dev=dm-6 ino=12058625 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_dir_t:s0 tclass=dir
" | audit2allow
============= httpd_t ==============
!!!! This avc can be allowed using the boolean 'httpd_enable_homedirs'
allow httpd_t user_home_dir_t:dir { search getattr };
为了解决这个问题,请以 root 身份运行:
# setsebool -P httpd_enable_homedirs=on