利用 Apache 为个人用户创建 web 站点及其报错处理

为了使在安装了 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


再次访问, 成功!















发布了28 篇原创文章 · 获赞 46 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Blood_Seeker/article/details/53559210