特定のディレクトリ内に作成されたファイルのグループと権限を強制するにはどうすればよいですか?

特定のディレクトリ内に作成されたファイルのグループと権限を強制するにはどうすればよいですか?

から作成されたファイルの場合テストユーザー/var/wwwディレクトリにアカウントがある場合は、g+rwx権限として、そしてwwwデータグループとして。

どうすればこれを実現できるでしょうか?

SSH経由でファイルを作成しています。

答え1

グループを設定するには/var/www設定された少し:

chgrp www-data /var/www
chmod g+s /var/www

サブディレクトリも調整するには:find /var/www -type d -exec chmod g+s {} +

これにより、新しく作成されたすべてのファイルは、ユーザーのグループではなく、親ディレクトリのグループを継承するようになります。


デフォルトのグループ権限を設定するには、ACL について「デフォルト」ACLを設定します。

setfacl -m "default:group::rwx" /var/www

サブディレクトリも調整するには:find /var/www -type d -exec setfacl -m d:g::rwx {} +

注意: ファイルシステムでACLサポートが有効になっている必要があります。デフォルトで有効になっている場合もありますが、拡張子3または拡張子4「操作はサポートされていません」というメッセージが表示される場合があります。その場合は手動で有効にする必要があります。

  • 現在マウントされているファイルシステムの場合:mount -o remount,acl /

  • 永久に –1つ以下の方法のいずれか:

    • fstabレベル:オプションフィールドを/etc/fstab編集するacl

    • ファイルシステムレベル:tune2fs -o acl /dev/diskname

答え2

これにより、setgid の「grawity」の回答で何人かの人が困惑した可能性があります。フォルダーのグループが自分のグループと異なる場合は、root として chmod を実行する必要があるかもしれませんが、これを行う必要があることを示すエラーは表示されません。

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

答え3

ユーザーが作成するファイルのグループは、そのユーザーのグループ(/etc/group内)です。権限はUMASKパラメータによって制御されます。 これを見て

関連情報