如何授予文件读写但不删除的权限

如何授予文件读写但不删除的权限

我想让用户能够在其他用户目录中创建写入和读取文件,但不能选择在创建后删除文件(粘性位在这里不起作用......)例如:

我有一个manager 目录的用户repository
我有worker1需要写入文件/manager/repository但无法删除的文件
我有worker2需要写入文件/manager/repository 但无法删除的文件
我有worker3需要写入文件/manager/repository 但不能删除的文件删除文件

worker 1-2-3不能删除创建后的文件managerroot只能删除已创建的文件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/repository。它将撤销worker1worker2和的所有权限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

相关内容