私はユーザーに他のユーザーディレクトリに書き込みおよび読み取りファイルを作成する機能を与えたいが、作成後にファイルを削除するオプションがないようにしたい(スティッキービットはここでは機能しない...)例:
ユーザーmanager
にディレクトリrepository
があります
ユーザーworker1
がいて、/manager/repository
にファイルを書き込む必要がありますが、ファイルを削除できません
ユーザーworker2
がいて、/manager/repository
にファイルを書き込む必要がありますが、ファイルを削除できません
ユーザーworker3
がいて、/manager/repository
にファイルを書き込む必要がありますが、ファイルを削除できません
ただし、worker 1-2-3
は、作成されたファイルを削除できません。manager
とroot
は、作成されたファイルworker 1-2-3
のみを削除できます。
スティッキービットを適用してchown
およびchmod
のトリックをいくつか試しましたが、成功しませんでした。
Windowsとは異なり、Unix/Linuxでは明確な削除権限はありません。ファイルを削除(または作成または名前変更)する権限は、それを含むディレクトリにバインドされます。ファイルの作成、削除、名前変更をワーカーに拒否するには、/manager/repository/
のワーカーの書き込み権限を削除します。
ファイルの作成は許可することはできませんが、ファイルの削除を拒否することはできます。
まず、システムでACLが有効になっていることを確認してから、このコマンドを実行します
setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository
仕組み
このコマンドは、ディレクトリ/manager/repository
の所有者に読み取り、書き込み、実行のアクセス許可を与えます。 worker1
、worker2
、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.
アクセス許可でこれを行うには、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
$
ファイルとフォルダは変更できますが、削除することはできません。
属性を削除するには、次のコマンドを実行します。
ファイルの場合:
$ Sudo chattr -R -a file.txt
ディレクトリの場合:
$ Sudo chattr -R -a dir1/
/manager/repository
フォルダから書き込み権限を取得します。そのため、root以外のすべてのユーザーは/manager/repository
内のファイルに書き込みまたは削除できますが、このディレクトリからファイルを削除することはできません。
chmod 755 /manager/repository