Linux 中的特殊权限粘滞位 Sticky

现在Linux中有一些权限,由于SUID和SGID在各自链接中的使用功能不同,因此被称为特殊权限。

粘滞位(Sticky Bit)

在大多数情况下,此特殊权限非常有用。
当我们是特定文件的所有者并且我们对所有其他人具有对该文件的完全权限但我们仍然不希望他们中的任何一个人删除该文件时,除了用户和组所有者之外,将使用此选项。
在这种情况下,粘滞位起着非常重要的作用,因为一旦我们将此权限分配给某个文件或者目录,除了用户和组所有者之外,没有其他人能够删除该文件或者目录。

在向我们展示任何示例之前,让我给我们一些有用且重要的提示。

可以使用两种方式分配粘滞位

  1. 八进制 (1)
  2. 符号 (t)

八进制 (1) 方法

如果你想使用八进制方法,那么这是你需要遵循的语法

# chmod 1XXX /dirname

这里 1 表示分配粘滞位,XXX 表示要应用的权限

例如:

# chmod 1775 /statusupdate

在这里,我为用户和组所有者分配了完全权限,并为其他人分配了读取和执行权限,包括在权限开头由 1 给出的粘滞位。

符号 (t) 方法

如果我们想使用符号方式分配粘滞位,那么这将是语法

# chmod +t /dirname

例如

# chmod o+t /statusupdate

在这里,我没有与任何其他现有权限相结合,而是另外我为 statusupdate 目录的所有其他人分配了一个粘性位权限

例子

我有 2 个用户,即 user1 和 user2 。
根为他们分配了一个公共目录,以便在一天结束时在此目录中放置他们的状态更新。
现在作为根目录,我会将粘滞位分配给主目录以及任何子目录(如果有的话)。

# mkdir /statusupdate
# chmod 1777 /statusupdate
user1 statusupdate
$cd /statusupdate
$mkdir mywork
$chmod 1777 mywork
$ls -l
total 4
drwxrwxrwt. 2 user1 user1 4096 Oct 17 07:04 mywork

现在,就我的演示目的而言,我已授予 mywork 目录的完全权限,我认为大多数人不会这样做,但这只是一个示例。
现在,如我们所见,其他人的权限部分中以红色标记的添加 (t) 选项可见。

现在以 user2 身份登录
看来user2对user1不太友好,想删掉他的statusdata,给boss留下印象。
看看他能不能做到

$cd /statusupdate
$ls -l
total 4
drwxrwxrwt. 2 jack jack 4096 Oct 17 07:04 mywork
$rm -rf mywork
rm: cannot remove `mywork': Operation not permitted

哎呀,该操作是不允许的。
因此,用户 2 似乎必须诚实地努力工作才能给他的老板留下印象。

所以这就是粘性位的工作方式,同样也可以使用符号方式完成。

去除粘性位

# chmod 0775 /statusupdate
# ls -l
drwxrwxr-x.   3 root root  4096 Oct 17 07:07 statusupdate

可以使用以下命令以符号方式完成相同的操作

# chmod -t /statusupdate

重要的提示:

很多时候,我们会在其他权限部分看到大写 (T) 而不是小写 (t) 现在我们不必对此感到困惑,因为它们都表示粘性位,但有一点区别,如果其他人具有可执行权限在它们上应用粘性位后,我们将小写(t),但如果其他人没有可执行权限,则其他人将获得大写(T)。

在应用具有可执行权限的 Sticky Bit 之前

# chmod 775 /statusupdate
# ls -l
drwxrwxr-x.   3 root root  4096 Oct 17 07:07 statusupdate

在具有可执行权限的 Sticky Bit 之后

# chmod 1775 /statusupdate
# ls -l
drwxrwxr-t.   3 root root  4096 Oct 17 07:07 statusupdate

现在你看到一个小的 (t) 因为目录有可执行权限

在没有可执行权限的情况下应用粘滞位之前

# chmod 774 /statusupdate
# ls -l
drwxrwxr--.   3 root root  4096 Oct 17 07:07 statusupdate

在没有可执行权限的 Sticky Bit 之后

# chmod 1774 /statusupdate
# ls -l
drwxrwxr-T.   3 root root  4096 Oct 17 07:07 statusupdate

现在,如果我们想搜索具有粘滞位权限的所有文件和目录

# find/-perm +1000

其中 1000 表示根据我们使用的八进制值具有粘性位的文件或者目录。
现在,我们可以再次使用带有 find 命令的添加开关,例如 -type d 或者 f 来更准确地搜索。

日期:2020-06-02 22:17:34 来源:oir作者:oir