Apache2權限問題

Apache2權限問題

我已將我的 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

參考

相關內容