Ubuntuでウェブサーバーを運用する際、ファイルアクセスの問題に直面することがあります。
これは、特にwww-dataグループに起因することが多いです。
例えば、Apacheなどのサービスがユーザーが作成したファイルにアクセスできないケースです。
原因は、所有者やグループの設定不備にあります。
この記事では、Ubuntuでwww-dataグループのファイルアクセス問題を解決する方法を解説します。
解決策の概要
Ubuntuでwww-dataがファイルにアクセスできない時、主に二つのステップが必要です。
まず、関連するユーザーのプライマリグループをwww-dataに変更します。
次に、umaskの設定(002)です。
新しく作成されるファイルとディレクトリがグループ書き込み権限を持つようにします。
これらのステップにより、www-dataグループはユーザーが作成したファイルにアクセスできるようになります。
プライマリグループの変更
プライマリグループをwww-dataに変更するには、次のコマンドを実行します。
sudo usermod -g www-data username
ここでusernameは変更したいユーザーの名前です。
この変更により、usernameが新たに作成するファイルやディレクトリはwww-dataグループの所属となります。
この変更はユーザーがログアウトして再ログインするか、システムを再起動した後に反映されます。
私の環境では、OSの再起動が必要でした。
プライマリグループの変更は、「id」コマンドで確認できます。
ssh_testというユーザーのデフォルト状態は、以下。
$ id uid=1001(ssh_test) gid=1001(ssh_test) groups=1001(ssh_test)
「sudo usermod -g www-data ssh_test」を実行した後、次のような結果なっています。
$ id uid=1001(ssh_test) gid=1001(ssh_test) groups=1001(ssh_test),33(www-data)
この状態では、まだプライマリグループの変更は反映されていません。
OSの再起動を行うと、次のように変更しています。
$ id uid=1001(ssh_test) gid=33(www-data) groups=33(www-data)
umaskの設定
umaskを002に設定します。
umask の値が 002 の場合、新しく作成されるファイルは 「-rw-rw-r–」のパーミッションを持ちます。
これにより、新しく作成されるファイルやディレクトリにグループ書き込み権限が付与されます。
この設定は、ユーザーの.bashrcや.profileファイルに次の行を追加することで行えます。
この辺りについては、以下の記事を参考にしてください。
今回は、usernameの「~/.bashrc」に以下を追記しています。
umask 002
この設定を反映するには、以下コマンドを実行しています。
ログアウトしてログインでもOK。
source ~/.bashrc
実践的なヒントと注意点
これらの設定を行う前に、影響を受ける全てのユーザーとファイルについて十分に検討してください。
セキュリティ上の理由から、不必要に広範なアクセス権限を与えないように注意してください。
特に、ウェブサーバーがアクセスするファイルに限定して適用することが推奨されます。
設定変更後は、新しいファイルやディレクトリを作成してしましょう。
そして、予期したパーミッションが適用されていることを確認してください。
ファイルの場合は、次のように確認できます。
$ touch testfile $ ls -ld testfile -rw-rw-r-- 1 ssh_test www-data 0 12月 31 14:20 testfile
ディレクトリの場合は、次のように確認します。
$ mkdir testdir $ ls -ld testdir drwxrwxr-x 2 ssh_test www-data 4096 12月 31 14:21 testdir