概要
OSのパッケージマネージャーでApache HTTP Serverをインストールすると、デフォルトで/var/www/htmlがDocumentRoot (公開ディレクトリー) になっていることが多いです。
ただ、ファイルの配置などで実際に作業しようとすると、/var/wwwのアクセス権限がrootになっていて作業しにくいです。
アクセス権限設定について調べたので紹介します。
「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」を参考に、以下の手順で権限を設定します。
- ログインユーザーをwww-dataのグループに追加
- /var/wwwのグループをroot→www-dataに変更
- www-dataのグループに書き込み権限を付与
- 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アプリケーションでのファイル書き込みの他、普段の作業を円滑に進めるために必要ですので、行っておきましょう。
詳細プロフィール。SNS: Twitter/GS=gnusocialjp@gnusocial.jp/WP=gnusocialjp@web.gnusocial.jp。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。
コメント