我想让用户能够在其他用户目录中创建写入和读取文件,但不能选择在创建后删除文件(粘性位在这里不起作用......)例如:
我有一个manager
目录的用户repository
我有worker1
需要写入文件/manager/repository
但无法删除的文件
我有worker2
需要写入文件/manager/repository
但无法删除的文件
我有worker3
需要写入文件/manager/repository
但不能删除的文件删除文件
但worker 1-2-3
不能删除创建后的文件manager
,root
只能删除已创建的文件worker 1-2-3
。
我尝试了一些应用粘性位的技巧,但没有成功chown
。chmod
答案1
与 Windows 不同,Unix/Linux 下没有明显的删除权限。删除(或创建或重命名)文件的权限与包含的目录绑定。删除工作人员的写入权限,/manager/repository/
以拒绝工作人员创建、删除和重命名文件。
请注意,不可能允许创建文件但拒绝删除它们。
答案2
首先确保您的系统中启用了 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.
答案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
。因此,所有非 root 用户都可以写入或删除其中的文件/manager/repository
,但不能删除该目录中的任何文件。
chmod 755 /manager/repository