如何使文件夹不能被删除和修改文件夹名称。但你仍然可以在其中添加文件吗?

如何使文件夹不能被删除和修改文件夹名称。但你仍然可以在其中添加文件吗?

我想使用ubuntu VPS与网上的人制作一个共享磁盘。所以正如标题所说,我想让一个文件夹不能被删除和被修改文件夹名称。但你仍然可以在里面添加文件(如果只能在里面添加文件,但不能修改文件和删除文件初始化就更好了)。

我尝试过 chmod 和 chattr 方式,但似乎它们都不能 100% 满足我的需求。

抱歉,如果我的英语不好造成一些不便。

答案1

让我们举/tmp/some/path个例子。您创建/tmp/some/tmp/some/path作为 root,并更改权限/tmp/some/path以允许每个人写入:

merlin@uc-s4m75657:~$ sudo mkdir -p /tmp/some/path
merlin@uc-s4m75657:~$ sudo chmod 0777 /tmp/some/path
merlin@uc-s4m75657:~$ ls -l /tmp/some/
итого 4
drwxrwxrwx 2 root root 4096 июл 28 11:17 path
merlin@uc-s4m75657:~$ ls -l /tmp/some/path/
итого 0
merlin@uc-s4m75657:~$ rm -rf /tmp/some/path
rm: невозможно удалить '/tmp/some/path': Отказано в доступе

(我的语言环境是俄语;“итого”的意思是“总计”,“Отказано в доступе”是“访问被拒绝”)

就这样。让我们检查。由于一切都归 root 所有,因此普通用户无法执行任何操作/tmp/some包括重命名或删除/tmp/some/path,因为它是目录path/tmp/some,除了读取和列表之外,该用户没有任何访问权限。

但是,用户可以在下面创建项目,/tmp/some/path因为我们授予了执行此操作的权限:

merlin@uc-s4m75657:~$ mkdir /tmp/some/path/1
merlin@uc-s4m75657:~$ touch /tmp/some/path/2
merlin@uc-s4m75657:~$ ls -la /tmp/some/path
итого 12
drwxrwxrwx 3 root   root   4096 июл 28 11:18 .
drwxr-xr-x 3 root   root   4096 июл 28 11:17 ..
drwxr-xr-x 2 merlin merlin 4096 июл 28 11:18 1
-rw-r--r-- 1 merlin merlin    0 июл 28 11:18 2
merlin@uc-s4m75657:~$ mv /tmp/some/path/1 /tmp/some/path/3
merlin@uc-s4m75657:~$ ls -la /tmp/some/path
итого 12
drwxrwxrwx 3 root   root   4096 июл 28 11:19 .
drwxr-xr-x 3 root   root   4096 июл 28 11:17 ..
-rw-r--r-- 1 merlin merlin    0 июл 28 11:18 2
drwxr-xr-x 2 merlin merlin 4096 июл 28 11:18 3

不幸的是,您无法真正对 Linux 文件系统中的对象设置不同的“创建”、“重命名”和“删除”权限。实际上,这是所有 POSIX 兼容文件系统的属性,即使您尝试使用 POSIX ACL。创建对象的用户将成为其各自的所有者,并且在权限/tmp/some/path允许他们写入该目录时能够执行任何操作。在传统 Unix 模式和 POSIX ACL 中,创建、删除和重命名均由单个标志控制。

因此,在 Linux 中允许创建项目但阻止其随后删除是不可能的。这是 POSIX 标准完全糟糕的少数地方之一,而 Windows 拥有更通用的权限系统。

答案2

Linux 中的权限是您的一个解决方案。这使得文件夹内容(文件、子文件夹)粘在该文件夹中,并且只能删除或重命名它们各自的所有者或根目录。

以下是如何将其应用到您的文件夹中/tmp/some/path

$ chmod +t /tmp/some/path

这会增加任何其他 rwx 权限。

相关内容