Apache HTTP Serverの/var/wwwの権限設定

web/server
概要

OSのパッケージマネージャーでApache HTTP Serverをインストールすると、デフォルトで/var/www/htmlがDocumentRoot (公開ディレクトリー) になっていることが多いです。

ただ、ファイルの配置などで実際に作業しようとすると、/var/wwwのアクセス権限がrootになっていて作業しにくいです。

アクセス権限設定について調べたので紹介します。

5.8. Securing Apache」にデフォルトのアクセス権限について以下の記載がありました。

5.8.3. Published web files
Apache files are located under /var/www. Just after installation the default file provides some information on the system (mainly that it’s a Debian system running Apache). The default webpages are owned by user root and group root by default, while the Apache process runs as user www-data and group www-data. This should make attackers that compromise the system through the web server harder to deface the site. You should, of course, substitute the default web pages (which might provide information you do not want to show to outsiders) with your own.
5.8. Securing Apache

Debian系OSでは、/var/wwwはユーザー=root、グループ=rootにより所有されています。Apacheプロセスはユーザー=www-data、グループ=www-dataとして実行されます。rootユーザーのみが書き込み可能で、それ以外からはApache含めて書き込み不能になっています。

これは、例えばWordPressなどのApache上で動作するWebアプリからのファイルアップロードもできないことを意味します。したがって、何かしらの権限設定の変更が必要です。

対応

Apacheプロセスのユーザーがわかったので、「チュートリアル: Amazon Linux 2022 に LAMP ウェブサーバーをインストールする – Amazon Elastic Compute Cloud」を参考に、以下の手順で権限を設定します。

  1. ログインユーザーをwww-dataのグループに追加
  2. /var/wwwのグループをroot→www-dataに変更
  3. www-dataのグループに書き込み権限を付与
  4. umask 002でデフォルトの権限を変更。

1. まず以下のコマンドで現在のログインユーザーをwww-dataグループに追加します。

sudo usermod -aG www-data $LOGNAME
exit

グループの設定は再ログインしないと反映されないので、再ログインします。groupsコマンドで現在ユーザーがwww-dataのグループに所属することを確認します。

groups
senoo_ken adm dip www-data video plugdev google-sudoers

2. 続いて、/var/wwwとその配下のグループをrootからwww-dataに変更します。

sudo chgrp -R www-data /var/www

3. この状態だと、/var/www配下でファイルを作成すると、グループがwww-dataではなく作成ユーザーになってしまいます。そこで、ディレクトリーに対してSGIDを付与します。これにより、配下のディレクトリーで作成したファイルも自動的にディレクトリーのグループになります (参考: 【Linuxパーミッション】SGIDとは?と設定方法)。

sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;

ファイルに書き込み権限を付与します。

find /var/www -type f -exec sudo chmod 0664 {} \;

4. これで既存ファイルのアクセス権限はOKです。ただ、デフォルトだとファイル権限のマスク設定のumaskが022となっており、新規ファイル・ディレクトリー作成時にグループへの書き込み権限がない状態になります。作業中は問題ないですが、新しく作成したディレクトリーにApacheのプロセスが書き込みできなくて困ります。

そこで、ユーザーのログイン時の設定ファイル~/.profileで以下のようにデフォルトのumaskを002に変更します。

--- /etc/skel/.profile  2022-03-27 18:40:30.000000000 +0000
+++ /home/senoo_ken/.profile    2023-03-28 14:04:06.066114601 +0000
@@ -7,6 +7,7 @@
 # the default umask is set in /etc/profile; for setting the umask
 # for ssh logins, install and configure the libpam-umask package.
 #umask 022
+umask 002
 
 # if running bash
 if [ -n "$BASH_VERSION" ]; then

これで/var/www配下でディレクトリーを新規作成しても、www-dataのグループに書き込み権限が付与された状態になり問題ありません。

結論

Apache HTTP Serverでの/var/wwwの権限設定でした。

Debian系OSでのApacheを想定しましたが、他のOS・サーバーでも、ユーザー名などが異なるものの似たような問題があるようです。ただ、基本は同じ手順になると思います。

Webアプリケーションでのファイル書き込みの他、普段の作業を円滑に進めるために必要ですので、行っておきましょう。

コメント

Copied title and URL