粘性位如何工作?

粘性位如何工作?

苏伊德

粘性位应用于可执行程序,标记系统以在程序运行完成后将程序的映像保留在内存中。

但我不知道它在内存中存储了什么。在这种情况下,我如何才能看到它们?

答案1

这可能是我最讨厌的事情之一,人们总是把事情搞砸。 SUID/GUID 位和粘性位是两个完全不同的东西。

如果您这样做,man chmod您可以阅读有关 SUID 和粘性位的信息。这手册页可在此处找到以及。

背景

摘抄

这些信读写器为受影响的用户选择文件模式位:读 (r)、写 (w)、执行(或搜索目录)(x)、仅当文件是目录或已具有某些用户的执行权限时才执行/搜索 (X ),在执行时设置用户或组 ID、限制删除标志或 粘性位(t)

SUID/GUID

上面的手册页试图说明的是,x 位在用户八进制(rwx 的第一组)和组八进制(rwx 的第二组)的 rwxrwxrwx 中所占据的位置可以采取附加状态,其中 x 变为安.斯.当发生这种情况时,该文件在执行时(如果它是一个程序而不仅仅是一个 shell 脚本)将使用该文件的所有者或组的权限运行。

因此,如果该文件由root拥有并且SUID位打开,则程序将以root身份运行。即使您以普通用户身份执行它。同样的情况也适用于 GUID 位。

摘抄

SETUID 和SETGID 位

如果文件的组 ID 与用户的有效组 ID 或用户的补充组 ID 之一不匹配,则 chmod 会清除常规文件的 set-group-ID 位,除非用户具有适当的权限。其他限制可能会导致 MODE 或 RFILE 的 set-user-ID 和 set-group-ID 位被忽略。此行为取决于底层 chmod 系统调用的策略和功能。如有疑问,请检查底层系统行为。

chmod 保留目录的 set-user-ID 和 set-group-ID 位,除非您另外明确指定。您可以使用 u+s 和 gs 等符号模式设置或清除这些位,也可以使用数字模式设置(但不能清除)这些位。

SUID/GUID 示例

没有 suid/guid- 只是一些位rwxr-xr-x已设置。

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid 和用户的可执行位启用(小写 s)- 比特RWSR-XRX已设置。

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid 已启用且可执行位已禁用(大写 S)- 比特rwSr-xr-x已设置。

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

guid 和组的可执行位启用(小写 s)- 比特rwxr-sr-x已设置。

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

启用 GUID 并禁用可执行位(大写 S)- 比特rwxr-Sr-x已设置。

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

粘性位

另一方面,粘性位表示为t,例如目录/tmp

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

该位应该一直被称为“限制删除位”,因为这就是它的真正含义。启用此模式位后,它会创建一个目录,用户只能删除其中自己拥有的文件和目录。

摘抄

限制删除标志或粘性位

限制删除标志或粘性位是单个位,其解释取决于文件类型。对于目录,它
可以防止非特权用户删除或重命名目录中的文件,除非他们拥有该文件或目录;这称为目录的限制删除标志,通常在 /tmp 等全局可写目录中找到。对于某些旧系统上的常规文件,该位将程序的文本图像保存在交换设备上,以便运行时加载速度更快;这称为粘性位。

答案2

“应用于可执行程序的粘滞位标记系统,以便在程序完成运行后将程序的映像保留在内存中。”

我认为这是相当过时的信息,今天大多数现代 Unix 都忽略了这一点。在 Linux 中,粘滞位仅与目录相关。看这里以及内容相当丰富的维基百科文章

无论如何,在旧的行为中,图像(只有“代码”,而不是数据)仅保存在虚拟内存中 - 通常交换,而不是保存在真实内存中,以便下次运行得更快。

答案3

什么是粘性位?

粘滞位是在目录上设置的权限位,仅允许该目录中文件的所有者或 root 用户删除或重命名该文件。没有其他用户拥有删除其他用户创建的文件所需的权限。

这是一项安全措施,旨在避免删除关键文件夹及其内容(子目录和文件),尽管其他用户拥有完全权限。

答案4

我在这个答案中错过的是,目录的粘性位也以某种方式使用,设置后,该目录中新文件的组与该目录的组相同。

相关内容