DocumentRoot を に変更しました/home/user/www
。これを実現するために、/etc/apache2/sites-available/default のパスの 2 つの出現を変更しました。
/home/user/www の権限は 0774 です。www-data ユーザーを自分のユーザー グループに追加しました。所有者は/home/user/www
自分のユーザーとグループ (user:user) です。
私は次のようにしてそれを行いました:
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 ディレクトリ (およびその中のすべてのサブディレクトリ) は setgid に設定する必要があります。これにより、ファイルとディレクトリがグループ 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への書き込み権限が付与されます。
ちなみに、ユーザーが Web ファイルを簡単に見つけられるようにしたい場合は、ホーム ディレクトリにシンボリック リンクを作成するだけです。
ln -s /var/www/ /home/user/
答え2
読み取り/書き込みアクセスの場合、親ディレクトリ(この場合は/home/user)への実行権限も必要です。これ答え。
/home/user/wwwのルートを使用しています(これはユーザーのホーム ディレクトリとホーム ディレクトリは、作成時にデフォルトで 700 の権限に設定されます。たとえば、Apache のルートを別の場所に作成してみてください。/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
したがって、/home の下のファイル/ディレクトリにそのラベルを追加するには、このコマンドを実行する必要がありますchcon
。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