ファイルに対する読み取りおよび書き込み権限を付与するが削除しない方法

ファイルに対する読み取りおよび書き込み権限を付与するが削除しない方法

他のユーザーディレクトリからファイルの書き込みと読み取りを生成する機能をユーザーに提供したいのですが、生成後にファイルを削除するオプションはありません(ここでは固定ビットは機能しません...)。たとえば、次のようになります。

manager ディレクトリにユーザーがいます。記録する必要があるが削除できないファイルがrepository
あります。記録する必要があるが削除できないファイルがあります。記録する必要があるが削除できないファイルがあります。ファイルの削除worker1/manager/repository
worker2/manager/repository
worker3/manager/repository

ただし、worker 1-2-3ファイルが作成された後は削除できず、生成されたファイルのみを削除managerできrootますworker 1-2-3

私は粘着性のあるビットを適用するためのいくつかの技術を試しましたが、成功しませんでしたchownchmod

答え1

Windowsとは異なり、Unix / Linuxでは明確な削除権限がありません。ファイルを削除(または作成または名前変更)する権限は、含まれているディレクトリに関連付けられています。ワーカーの書き込み権限を削除し/manager/repository/て、ワーカーがファイルを作成、削除、名前を変更する機能を拒否します。

ファイルの生成を許可しますが、削除を拒否することはできません。

答え2

まず、システムでACLが有効になっていることを確認してから、このコマンドを実行してください。

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

どのように動作しますか?

  • このコマンドは、ディレクトリ所有者に読み取り、書き込み、および実行権限を付与します/manager/repositoryworker1worker2およびに対するすべての権限が取り消されますworker3

  • これにより、他のユーザーに読み取りおよび書き込みアクセスが提供されますが、削除アクセスは拒否されます。


からman setfacl

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.

答え3

権限を使用してこれを行うには、NFSv4 ACLに似たACLをサポートするシステムが必要です。たとえば、FreeBSDでこのフラグを使用してファイルシステムをマウントすると、nfsv4acls次のことができます。

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

明らかに否定的なdelete_childグループメンバーに付与された権限worker-group

ただし、ワーカーは自分が作成したファイルの所有者になるため、ACLを引き続き変更でき、自分に権限を付与すると、その権限が親ディレクトリの権限deleteよりも優先されます。delete_childこの問題を解決する方法があるかどうかはわかりません(少なくともFreeBSDのUFSファイルシステムでは)。たとえば、次のようにできます。

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$

答え4

フォルダから書き込み権限を取得してください/manager/repository。したがって、ルート以外のすべてのユーザーはその中にあるファイルを書き込んだり削除したりできますが、/manager/repositoryディレクトリ内のファイルは削除できません。

chmod 755 /manager/repository

関連情報