Ubuntuでwww-dataグループにファイルアクセス権を設定する方法

Ubuntuでwww-dataグループにファイルアクセス権を設定する方法 サーバー

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
タイトルとURLをコピーしました