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


12

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

我的用户manager 具有目录repository
我的用户worker1需要向其中写入文件,/manager/repository但是不能删除文件
我的用户worker2需要向其中写入文件,/manager/repository 但是不能删除文件
我的用户worker3需要向其中写入文件,/manager/repository 但是不能删除文件

worker 1-2-3只能在创建后删除文件,manager并且root可以删除worker 1-2-3创建的文件。

我试过几个chownchmod技巧与应用粘着位没有成功。


1
worker*用户是否以某种方式写入目录?您在评论中提到日志文件放在此处,这是否意味着启动了某个可执行文件以在此处创建文件?如果是这样,您可以授予该workersudo以身份运行可执行文件的权限manager。然后,该可执行文件将以manager工人可以读取的用户身份创建日志。
Centimane

如果用户可以修改文件,那么他们也可以擦除其内容,从而有效地“删除”它。看起来您需要某种“提交”接口,而不是文件系统。电子邮件将是最简单的。
ybungalobill

Answers:


8

与Windows不同,在Unix / Linux下没有明确的删除许可。删除(或创建或重命名)文件的权限绑定到包含的目录。删除工作进程的写许可权,/manager/repository/以拒绝工作进程创建,删除和重命名文件。

请注意,不允许创建文件,但拒绝删除文件是不可能的。


如何删除写许可权,因为文件将一直被写入日志文件
user63898

虽然曾经是真实的,许多现代系统支持扩展的ACL(NFSv4 ACL的被FreeBSD,Solaris或Linux(Richacl补丁),让类似的功能,所支持的Windows NT的ACL你的股票的Linux发行版可能不把它虽然。
StéphaneChazelas 16年

@ user63898可以从文件所在的目录而不是文件本身中删除写许可权。
GnP

6

首先确保您的系统中启用了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.

谢谢,但是问题是用户一直在创建。有些被管理员删除。所以这意味着我需要每次使用setfacl更新目录?还有其他通用解决方案吗?
user63898

是的,当我尝试从worker1创建文件时,触摸/manager/repository/x.txt即时获取:触摸:无法触摸`/manager/repository/x.txt':权限被拒绝
user63898

当我执行ls -ld信息库时,仍然得到拒绝权限:drwxrwxr -t 2管理员用户4096 Sep 7 11:30信息库/
user63898

在执行setfacl -d -R -m user :: rwx,user:worker1:---仓库/时,然后尝试从worker1创建文件touch /manager/repository/x.txt im get:touch:无法触摸`/ manager /repository/x.txt':权限被拒绝
-user63898

5
这还会允许某人在此处写入一个空文件吗?就像echo " " > $file用“”破坏文件内容一样,从技术上讲这是写操作,但是有效地删除了内容。像svn这样的实际回购似乎是最好的选择。
Centimane

3

要使用权限进行此操作,您需要一个系统,该系统支持类似于NFSv4 ACL的ACL。例如,在FreeBSD上,如果文件系统带有该nfsv4acls标志,则可以执行以下操作:

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

明确拒绝delete_childworker-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
$

0

/manager/repository文件夹获取写权限。因此,所有不是root用户的用户都可以写入其中的文件或从其中删除文件/manager/repository,但不能从该目录中删除任何文件。

chmod 755 /manager/repository

0

我们可以修改文件和文件夹,但不能删除。

要删除属性,请运行以下命令:

对于文件:

$ sudo chattr -R -a file.txt

对于目录:

$ sudo chattr -R -a dir1/

(1)根据文档,该a属性表示仅追加。用户可以编辑这些文件吗?(2)a在目录上设置属性有什么作用?
斯科特,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.