利用 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
再次訪問, 成功!