多数のユーザー(全員がmygroupに属している)がファイルを作成および編集できるときに、共有ディレクトリを作成したいと思います。このディレクトリとサブディレクトリ内のすべてのファイルをmygroupに所属させます。
chgrp
を使用して既存のファイルをgroupmygroupに変更しましたが、それでも新しいファイルはユーザーのプライマリグループに属します。 chgrpを繰り返し実行しなくても、新しいファイルが確実にグループに属するようにする方法はありますか。
SetGIDビットを設定します。
chmod g+s dir
ディレクトリ内に作成されたすべての新しいファイルは、グループがディレクトリのグループに設定されます。
スーパーユーザーのブログ投稿 でスティッキービットとその他のLinuxパーミッションビットが説明されています。
SetGIDは、しかし、全く別のボールゲームです。ディレクトリにSetGIDビットが設定されており、そのディレクトリ内にファイルが作成されると、そのファイルのグループ所有権は自動的にそのディレクトリのグループに変更されます。
フォルダに setgid
許可フラグ を設定します。
chmod g+s dirname
フォルダのグループが自分のものと異なる場合、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 set 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 the group is set right