Answers:
这可能是我一直困扰着我的最讨厌的事情之一。SUID / GUID位和粘性位是2个完全不同的东西。
如果您这样做man chmod
,则可以阅读有关SUID和粘性位的信息。该手册页可在这里为好。
摘抄
字母rwxXst为受影响的用户选择文件模式位:读(r),写(w),执行(或搜索目录)(x),仅当文件是目录或已经对某些文件具有执行权限时才执行/搜索用户(X),在执行时设置用户或组ID,限制删除标志或 粘性位(t)。
上面的手册页试图说的是,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-只设置了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&group的可执行位(小写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)中找到。对于某些较旧系统上的常规文件,该位将程序的文本图像保存在交换设备上,以便在运行时更快地加载;这就是所谓的粘性位。
ls
。显然,只有超级用户才能在文件上设置粘性位。引入虚拟内存和共享库后,它变得不那么重要了,尤其是随着传呼机变得更加智能并可以动态决定保留哪些页面时,传呼机变得尤为重要。
ed
粘性。
“用于执行程序的粘性位标记系统,以在程序完成运行后将程序的映像保留在内存中。”
我认为这是非常过时的信息,今天大多数现代Unix都忽略了这一点。在Linux中,粘性位仅与目录有关。请参阅此处和内容丰富的Wikipedia文章。
无论如何,在旧的行为中,映像(仅“代码”而不是数据)仅保留在虚拟内存中-通常被交换,而不是在真实内存中,以便在下一次运行时更快。
什么是粘性位?
粘性位是在目录上设置的权限位,该权限位仅允许该目录中文件的所有者或root用户删除或重命名该文件。没有其他用户具有删除其他用户创建的文件所需的特权。
这是一种安全措施,可避免删除关键文件夹及其内容(子目录和文件),尽管其他用户拥有完全权限。