如何保护可写目录下的文件

How to protect a file under a writable directory

我在文件权限和 acl 方面遇到了一些问题。
我有一个可写的目录名称 "dir",权限为 777 (dir rwxrwxrwx) 在目录下我创建了一个文件 tmp.txt (dir/tmp.txt)

我想知道如何在不更改 "dir" 权限的情况下阻止 other/group 成员访问 edit/delete 文件。在 "dir".

下,每个人都可以自由地对另一个 file/directory 采取任何行动

我想知道也许 "setfacl" 或者什么。

拥有该目录的人可以删除其中的文件,即使它们属于 root。

有两种方法可以让您几乎到达目的地。

想法 1 - Sticky Bit

$ ls -ld /tmp
drwxrwxrwt 33 root root 1020 2020-03-14 14:06 /tmp/

这是 Unix /tmp 目录的通用权限。权限末尾的t表示sticky bit,可以通过运行:

设置
chmod +t /tmp

sticky 位表示即使每个人都对该目录具有写权限,但只有 root、目录所有者和文件所有者才能删除该目录下的文件。

想法 2 - 额外目录

如果目录不为空,则无法删除。如果您将文件放在您拥有的目录中,只有您(和 root)可以删除文件,那么其他人都无法删除它:

root@playground# tree -up
.
`-- [drwxrwxrwx root    ]  box
    |-- [-rw-r--r-- test1   ]  f1
    `-- [drwxr-xr-x test2   ]  hello
        `-- [-rw-r--r-- test2   ]  f2

2 directories, 2 files
root@playground# su test1
test1@playground$ rm box/hello
rm: cannot remove ‘box/hello’: Is a directory
test1@playground$ rm -rf box/hello/
rm: cannot remove ‘box/hello/f2’: Permission denied