デフォルトの所有者を「自動的に」設定するには、次のsetuid
ような動作をするディレクトリが必要ですsetgid
。ただし、これはFreeBSDで設定できますが、他のUNIXおよびLinuxシステムでは単に無視されu+s
ます。ただし、あなたの場合、別の解決策があるかもしれません。
私が欲しいのは、ユーザーにグループを追加することで共有できるディレクトリを持つことです。このディレクトリで作成されたものはすべて、その親から許可スキームを継承します。私がしようとしているものよりも良い方法があれば、私はすべて耳です。
したがって、基本的には、私が見るものから、グループメカニズムを使用してディレクトリへのアクセスを制御する必要があります。ただし、これには、ディレクトリ構造全体のアクセス許可を制限する必要はありません。実際には、ディレクトリ--x
実行ビットは必要なものだけです。例を挙げましょう。仮定して...
group_dir
ディレクトリへのアクセスを制御するグループはourgroup
です。
ourgroup
グループ内のユーザーのみがアクセスできますgroup_dir
。
user1
とにuser2
属しourgroup
ます。
- デフォルトのumaskは0022です。
...次の設定を検討してください。
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
ここでは、すべてのアイテムが所有者によって作成されたと仮定します。
さて、このセットアップでは:
- すべてのディレクトリは、の全員が自由に閲覧できます
ourgroup
。グループ内の誰でも、ファイルを作成、移動、削除できますgroup_dir
(ただし、より深くはできません)。
- にいない人
ourgroup
はでブロックさgroup_dir
れるため、その下にあるものを操作することはできません。たとえば、user3
(のメンバーではないourgroup
)読み取りはできませんgroup_dir/user2_submission/README
(r--
ファイル自体の許可がある場合でも)。
ただし、この場合には少し問題があります。通常のumaskのため、ユーザーが作成したアイテムはグループの他のメンバーが操作できません。これがACLの出番です。デフォルトのアクセス許可を設定することにより、umask値にもかかわらずすべてが正常であることを確認できます。
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
この呼び出しセット:
rw(x)
所有者のデフォルトの許可。
rw(x)
グループのデフォルトの許可。
- 他のユーザーにはデフォルトで許可はありません。他のユーザーは
group_dir
とにかくアクセスできないため、その下にあるユーザーのアクセス許可がどうでもかまわないことに注意してください。
さて、次のようにアイテムを作成するとuser2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
このACLを配置したら、以前の構造を再構築することができます。
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
ここでも、各アイテムは所有者によって作成されます。
さらに、ディレクトリを使用しているユーザーにもう少し電力/セキュリティを提供したい場合は、スティッキービットを検討することをお勧めします。これにより、たとえば、user1
削除ができなくなりますuser2_submission
(彼はに-w-
アクセス許可を持っているためgroup_dir
):
$ chmod +t group_dir/
さて、もしuser1
削除しようとするuser2
のディレクトリ、彼は素敵なを取得しますOperation not permitted
。ただし、これによりのディレクトリ構造の変更は防止されgroup_dir
ますが、その下のファイルとディレクトリには引き続きアクセスできます。
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
考慮すべきもう1つのことは、使用したACLが既定のアクセス許可を設定していることです。そのため、アイテムの所有者は、アイテムに関連付けられている権限を変更できます。たとえば、user2
完全に実行できます...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
...したがって、彼の完全な提出ディレクトリをグループの誰もが利用できなくなります。
ただし、元々rws
はグループ内のすべてのユーザーにフルアクセスを許可するため、これらのユーザーを信頼しており、悪意のある操作が多く発生することはないと想定しています。