複数のユーザーが共有するデータを含むディレクトリがあります。ディレクトリとその下のすべてのコンテンツへのアクセスは、そのユーザーに追加されるディレクトリグループによって制御されます。したがって、「固定グループ」chmod g+s
フォルダセットを作成しました。ディレクトリには、ディレクトリとファイルのツリー構造が含まれており、ファイルの総数は数百万になります。ファイルがかなり小さく、50MBを超えるとは予想されません。
私の問題は、ファイルまたはディレクトリの所有者がまだそれを作成したユーザーであることです。したがって、アクセス グループからユーザーを削除する必要があっても、そのユーザーのアクセス権を完全に削除するわけではありません。
だから:
すべてのファイルとサブディレクトリの所有者が同じであることを確認するために、他に欠けているオプションはありますか?
cron-jobを使用してディレクトリ全体を定期的に検索できることをお勧めしますが、これは本質的にワンタイムpr-fileコマンドと比較して非効率的です。
私が一つ見つけたはいINotifyを使用していますが、スクリプトが必要なため、メンテナンスが必要なようです。
ACLが所有権を強制するのに役立つことを確認できませんでした。
これを行うより賢い方法はありますか?
私が望むのは、ユーザーにグループを追加して共有できるディレクトリを持つことです。このディレクトリに作成されたすべてのエントリは、親ディレクトリの権限スキームを継承します。私が試してみるよりも良い方法があれば、私はすべて耳を傾けます。
ベストアンサー1
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 $ > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
考慮すべきもう一つのことは、私たちが使用するACL設定です。基本権限。したがって、プロジェクトの所有者はそれに関連する権限を変更できます。たとえば、user2
完璧に動作します...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
...だから彼の完全なコミットディレクトリはグループのどれも使用できません。
ただし、最初はグループの全員に完全なアクセス権を付与しようとしたため、rws
これらのユーザーを信頼し、彼らが悪意のある作業を実行することを期待していないとします。