Apache2 の権限の問題

Apache2 の権限の問題

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

参考文献

関連情報