为了使在安装了 Apache 的服务器上拥有本地账号的用户能够架设自己的 web 站点, Apache 提供了两种思路:
-- 使用 mod_userdir 模块: 通过使用 http://IP/~UserName 的 URL 形式访问系统用户 UserName 的站点
-- 使用 mod_rewrite 模块: 通过 http://username.example.com 的 URL 形式访问用户 username 的站点
这里介绍第一种方式:
1. 启用 UserDIr 模块的功能:
vi /etc/httpd/conf/httpd.conf
//注释掉其中的 UserIdr Disable 这一行
2. 创建编辑新的配置文件 userdir.conf
vi /etc/httpd/conf.d/userdir.conf
//添加如下配置:
<IfModule mod_userdir>
# 出于安全考虑, 禁用 root 用户使用个人 web 站点
UserDir disable root
# 配置对每个用户的 web 站点目录
UserDIr public_html
</IfModule>
//设置每个用户 web 站点目录的访问权限
<Directory "/home/*/public_html">
AllowOverride FIleInfo AuthConfig Limit
Options MutiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
</Directory>
3. 重启 htttpd:
service httpd reload
4.开始创建个人 web 站点(以 user1 为例):
su - user1
mkdir public_html
// 给当前目录设置下权限
chmod 701 .
echo "This is User1's home page" > ./public_html/index.html
exit
然后用浏览器或使用 elinks 命令进行测试:
访问 http://localhost/~user1 #注意这里有个 `~`
我的测试结果为 403 Forbidden, 所以需进一步 troubleshooting:
查看系统日志:
tail /var/log/messages
发现有 SELinux 的报错, 显然是 SELinux 这边阻拦了我们的访问:
根据提示, 我们运行 sealert -l af683818-15c8-4e3d-a706-fb62da50b8ec
运行到此处, 我们有两种解决办法:
1. 把 user1 的 public_html 上下文设为 httpd 可访问的 context, httpd 默认只能访问 httpd_sys_content_t 的上下文,即:
semanage fcontext -a -t httpd_sys_content_t "/home/user1/public_html"
restorecon -Rv "/home/user1/public_html"
这样做的局限性是: 只针对了 user1 的配置, 如果有 user2, user3... 那就得一个一个改, 很麻烦! 我推介第二种办法:
2. 让 SELinux 允许 Apache 对用户主目录的访问策略:
setsebool httpd_enable_homedirs 1
如此执行只是当前生效, 想要永久生效则执行:
setsebool -P httpd_enable_homedirs 1
再次访问, 成功!