
これは単純な質問だとは思いますが、なぜこれが機能しないのか理由が見つからないようです。
PHP サーバーの Web ルート内にグループ フォルダーを設定しようとしています。各部門には次のようなグループが必要です。
/srv/www/htdocs/dev/dept1
/srv/www/htdocs/dev/dept2
グループ dept1 のすべてのユーザーは dept1 フォルダへの読み取り/書き込みアクセス権を持ち、dept2 のすべてのユーザーは dept2 フォルダへの読み取り/書き込みアクセス権を持つ必要があります。これを実装するために、次のようなグループを作成しました。
sudo groupadd dept1
sudo useradd -G dept1 -m user1
cd /srv/www/htdocs/dev
mkdir dept1
sudo chown -R wwwrun:dept1 dept1
sudo chmod -R g+rwxs dept1
wwwrun
Apache を実行しているユーザーです。この目的は、ユーザーが自分の部門フォルダー内で何でも作成/読み取り/更新/削除できるようにすることです。ただし、試してみると、ユーザー アカウントはフォルダーの内容を表示したり、ファイルを読み取ったりできますが、ファイルを作成したり書き込んだりすることはできません。
何が間違っているのでしょうか?
答え1
付与した権限により、dept1
グループ内のユーザーは 内のファイルを作成および削除できます/srv/www/htdocs/dev/dept1
。ただし、一般的な構成では、ユーザーが作成するファイルとサブディレクトリはグループによる書き込み可能になりません。
全員の権限を変更することで、ほとんどのファイルをグループ書き込み可能にすることができます。umaskumask設定は、どのような権限が付与されるかを決定します。ない新しいファイルに与えられます。通常は 022 に設定されており、明示的に指定しない限り、ファイルはグループ書き込み可能でも他のユーザーによる書き込み可能でもありません。これを 002 に変更すると、ファイルはデフォルトでグループ書き込み可能になります。ただし、これはすべてのユーザーが独自のプライベート グループを持っている場合にのみ妥当です (そうでない場合、ユーザーのファイルはプライマリ グループ内のすべてのユーザーによって書き込み可能になります)。
より良い解決策は、アクセス制御リストが存在するファイルシステムで有効になっていることを/srv/www/htdocs/dev
確認します (エントリに 4 番目の列fstab
が含まれていることを確認してください)。次に、ディレクトリに対する書き込み権限をグループに付与するACL を作成し、その権限付与がディレクトリに新しく作成されたエントリに継承されるようにします。これは umask の変更に似ていますが、ファイルシステム内のこの特定の場所に関連付けられています。次の 2 つのコマンドを実行すると、すべての一般的な使用ケースで権限が正しくなります。acl
srv/www/htdocs/dev/dept1
dept1
setfacl -R -m group:dept1:rwx /srv/www/htdocs/dev/dept1
setfacl -R -d -m group:dept1:rwx /srv/www/htdocs/dev/dept1
答え2
ユーザーはどのようにファイルにアクセスしていますか? どのようにファイルを更新/作成しようとしていますか? ユーザーがサーバーにログインしていると想定し、ユーザーに「groups」コマンドを実行してもらい、実際に正しいグループに属していること、またそのグループが最初にリストされていることを確認してください。