web-dev-qa-db-ja.com

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

/ var/wwwディレクトリのtestuserアカウントから作成されたファイルの場合、許可としてg + rwxが必要ですwww-dataグループとして。

どうすればこれを達成できますか?

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

28
Mr.Gando

グループを設定するには、/var/wwwsetgidビット:

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

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

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


デフォルトのグループ権限を設定するには、ACLsを使用する必要があります。 「デフォルト」のACLを設定します。

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

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

注:ファイルシステムでは、ACLサポートを有効にする必要があります。デフォルトでオンになっていることもあります。 ext3またはext4では、「操作はサポートされていません」と表示される場合がありますその場合は手動で有効にする必要があります。

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

  • 恒久的に– one以下のメソッドの:

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

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

55
user1686

これにより、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
LukePH

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

0
DrNoone