我已將我的 DocumentRoot 更改為/home/user/www
.為了實現這一點,我剛剛更改了 /etc/apache2/sites-available/default 中路徑的兩次出現。
/home/user/www 的權限是 0774 /home/user/www
。
我已經這樣做了:
sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user
問題是 Apache 無法寫入該目錄。只有當我將 www-data 設定為所有者時它才可以寫入,但如果我這樣做,我將無法在該目錄中寫入。
我已經測試了權限:
sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file
它有效。
但是我的Wordpress 無法www
刪除或建立檔案。有任何想法嗎?
答案1
您最好將 www 目錄放在 /var/www 中,其中包含所有者 www-data 和群組 www-data,並且將您的用戶新增至 www-data 群組。
首先,在 apache 配置中將 DocumentRoot 等變更回 /var/www 。
/var/www 目錄(及其中的所有子目錄)應設定 gid,以便使用群組 www-data 建立檔案和目錄。
以下所有命令都應以 root 身分執行,或使用 sudo 運行:
mkdir -p /var/www
如果 /home/user/www 中有任何您想要保留的文件,請立即將它們移至 /var/www :
mv /home/user/www/* /var/www/
現在修復 /var/www 目錄的權限和所有權。
chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data
下次「使用者」登入(或運行newgrp www-data
)時,他們應該在 /var/www 中具有寫入權限
順便說一句,如果您想讓「使用者」輕鬆找到網頁文件,只需在其主目錄中建立符號連結即可:
ln -s /var/www/ /home/user/
答案2
對於讀取/寫入訪問,對父目錄(在您的情況下為 /home/user )具有執行權限也很重要。查看這回答。
您正在使用 /home/user/www 的根目錄(屬於用戶的主目錄和主目錄在建立時預設為 700 權限。/apache/www
答案3
如果您的發行版使用 SELinux 或 App Armor 之類的東西,那麼您可能需要授予對 Apache 進程的存取權限,以便「允許」它可以存取主目錄區域。
SELinux 布林值
httpd
您可以使用此指令查看與(Apache)相關的布林值清單。
$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on
需要啟用此佈林值:
httpd_enable_homedirs --> on
上下文標籤
此外,您需要在每個目錄中新增一個 SELinux 上下文(標籤),這實際上告訴 SELinux 該目錄或檔案允許由與該標籤關聯的任何服務/守護程式存取。 Apache (httpd) 使用此標籤:
httpd_sys_content_t:s0
因此,您需要執行此命令,chcon
將該標籤新增至 /home 下的檔案/目錄中。僅將標籤新增至 Apache 從中提供檔案的目錄。
$ chcon -R -t httpd_sys_content_t /home/user/www
您可以使用-Z
切換到 來確認這是否有效ls
,它會顯示上下文標籤。
$ ls -Z /var/www/manual/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 mod