所有者がファイルとフォルダを作成するように強制する

所有者がファイルとフォルダを作成するように強制する

複数のユーザーが共有するデータを含むディレクトリがあります。ディレクトリとその下のすべてのコンテンツへのアクセスは、そのユーザーに追加されるディレクトリグループによって制御されます。したがって、「固定グループ」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/READMEr--

しかし、この場合には小さな問題があります。一般的な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 permittedgroup_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これらのユーザーを信頼し、彼らが悪意のある作業を実行することを期待していないとします。

おすすめ記事