web-dev-qa-db-ja.com

ファイルの読み取り/書き込みを許可するが削除は許可しない方法

私はユーザーに他のユーザーディレクトリに書き込みおよび読み取りファイルを作成する機能を与えたいが、作成後にファイルを削除するオプションがないようにしたい(スティッキービットはここでは機能しない...)例:

ユーザーmanagerにディレクトリrepositoryがあります
ユーザーworker1がいて、/manager/repositoryにファイルを書き込む必要がありますが、ファイルを削除できません
ユーザーworker2がいて、/manager/repositoryにファイルを書き込む必要がありますが、ファイルを削除できません
ユーザーworker3がいて、/manager/repositoryにファイルを書き込む必要がありますが、ファイルを削除できません

ただし、worker 1-2-3は、作成されたファイルを削除できません。managerrootは、作成されたファイルworker 1-2-3のみを削除できます。

スティッキービットを適用してchownおよびchmodのトリックをいくつか試しましたが、成功しませんでした。

12
user63898

Windowsとは異なり、Unix/Linuxでは明確な削除権限はありません。ファイルを削除(または作成または名前変更)する権限は、それを含むディレクトリにバインドされます。ファイルの作成、削除、名前変更をワーカーに拒否するには、/manager/repository/のワーカーの書き込み権限を削除します。

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

8
countermode

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

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

仕組み

  • このコマンドは、ディレクトリ/manager/repositoryの所有者に読み取り、書き込み、実行のアクセス許可を与えます。 worker1worker2worker3のすべての権限を取り消します。

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


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.
6
Rahul

アクセス許可でこれを行うには、NFSv4 ACLと同様のACLをサポートするシステムが必要です。たとえば、FreeBSDでは、ファイルシステムがnfsv4aclsフラグを使用してマウントされている場合、次のことができます。

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

明示的にdenydelete_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
$
3

ファイルとフォルダは変更できますが、削除することはできません。

属性を削除するには、次のコマンドを実行します。

ファイルの場合:

$ Sudo chattr -R -a file.txt

ディレクトリの場合:

$ Sudo chattr -R -a dir1/
0
Ankitsrivasta

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

chmod 755 /manager/repository
0
Josef Klimuk