1. 程式人生 > >利用 Apache 為個人使用者建立 web 站點及其報錯處理

利用 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

再次訪問, 成功!