允许所有用户在目录中创建文件,但只有所有者可以删除

Man*_*ngo 19 linux permissions

我如何使用,最好是单个chmod命令,它允许任何用户在目录中创建文件,但只有文件的所有者(创建它的用户)可以删除他们自己的文件,但该目录中没有其他人。

我想使用:

chmod 755 directory
Run Code Online (Sandbox Code Playgroud)

由于用户可以创建文件并删除它,但不允许用户删除其他人的文件吗?

我只希望创建文件的人能够删除他们自己的文件。因此,任何人都可以创建文件,但只有创建文件的人才能删除该文件(在目录中)。

Chr*_*own 34

粘性位可以或多或少地做你想做的事。来自man 1 chmod

受限删除标志或粘滞位是单个位,其解释取决于文件类型。对于目录,它可以防止非特权用户删除或重命名目录中的文件,除非他们拥有该文件或目录;这称为目录的受限删除标志,通常可在世界可写目录中找到,例如 /tmp。

也就是说,如果用户是文件的所有者或包含目录的所有者(或用户是根用户),则目录上的粘滞位仅允许重命名或删除包含的文件。

您可以t像这样应用粘滞位(由八进制 1000 或 表示):

# instead of your chmod 755
chmod 1777 directory

# or, to add the bit to an existing directory
chmod o+t directory
Run Code Online (Sandbox Code Playgroud)


Jim*_* L. 15

大多数/tmp目录都是使用该类型的权限集创建的。

你想要世界“粘性”位。设置该位的符号方式是:

# chmod ugo+w,+t directory
Run Code Online (Sandbox Code Playgroud)

“模态”方式是:

# chmod 1777 directory
# ls -ld directory
drwxrwxrwt  2 root  wheel  2 Oct 21 17:06 directory/
Run Code Online (Sandbox Code Playgroud)

  • 是的,有比用于普通文件权限(suid、sguid、sticky)的 9 个位更多的位。最初粘滞位用于可执行文件,但它被重新用于目录,表示“删除此目录的权限需要所有者匹配”。应该提到的是,要使其安全起来非常棘手,通常如果您想实现共享存储区域,最好使用用户拥有的子目录来避免某些竞争条件。为此,Systemd 有一些功能可以创建特定于进程的临时挂载。 (2认同)
  • @Mandingo 曾几何时,此权限也可用于可执行文件。它导致程序保留在交换中(作为一个加载的进程?),所以它不必每次都从磁盘加载 - 它“卡在”交换中......因此“粘位”。然而,这个功能很久以前就从 Linux 和大多数(所有?)Unix 内核中删除了(即 2000 年代初)。 (2认同)