关于SUID、SGID、SBIT,我们必须了解的几个关键点

简介:

一、概述

在日常运维中,细心的小伙伴可能已经注意到,在某些目录下的文件权限不仅仅有rwx,还有s和t。s权限我们在/bin目录下最为常见,在/tmp目录下,-rwxrwxrwxt这类文件也偶尔能够看到。这到底是怎么回事呢?让我们来深入探讨一下吧!

二、SUID

  • SUID对二进制文件有效。
  • 执行者对该程序需要具有x可执行权限。
  • 权限仅在程序执行的过程中有效。
  • 执行者将具有程序的所有者权限。
  • 数字设置权限的值为4。

使用举例

[suid@GeekDevOps ~]$ ll /bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd
[suid@GeekDevOps ~]$ exit
exit
[root@GeekDevOps ~]# chmod u-s /bin/passwd 
[root@GeekDevOps ~]# ll /bin/passwd 
-rwxr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd: 鉴定令牌操作错误
[suid@GeekDevOps root]$ exit
exit
[root@GeekDevOps ~]# chmod u+s /bin/passwd 
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

在我们去除suid用户的SUID权限时,命令执行错误。去除SUID权限之后我们还能执行passwd命令是因为文件passwd的权限是755。

[root@GeekDevOps ~]# chmod 4700 /bin/passwd
[root@GeekDevOps ~]# ll /bin/passwd 
-rws------. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
bash: /usr/bin/passwd: 权限不够
[root@GeekDevOps ~]# chmod o+x /bin/passwd 
[root@GeekDevOps ~]# ll /bin/passwd 
-rws-----x. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

上面的操作中,如果其他用户没有执行权限,即使文件具备SUID权限,这个文件也是不能被执行的,至少这个文件对其他用户要有x权限才行。

三、SGID

  • SGID对二进制文件和目录有效。
  • 执行者对该程序、目录需要具有x可执行权限。
  • 执行者(包括组员,其他用户)具有程序的组权限。
  • 用户在此目录下的有效组群将会变成目录的组群。
  • 若用户在此目录下有w权限,则使用者所建立的新文件的组群与该目录的组群相同。
  • 数字设置权限的值为2。

使用举例

[root@GeekDevOps ~]# groupadd sgid
[root@GeekDevOps ~]# useradd -g sgid sgid1
[root@GeekDevOps ~]# useradd -g sgid sgid2
[root@GeekDevOps ~]# useradd sgid3
[root@GeekDevOps ~]# mkdir /sgid
[root@GeekDevOps ~]# chgrp sgid /sgid
[root@GeekDevOps ~]# chmod 2775 /sgid/
[root@GeekDevOps ~]# ll / |grep sgid
drwxrwsr-x.   2 root sgid    6 3月  21 12:52 sgid
[root@GeekDevOps ~]# su - sgid1
[sgid1@GeekDevOps ~]$ cd /sgid/
[sgid1@GeekDevOps sgid]$ touch sgid1.txt
[sgid1@GeekDevOps sgid]$ ll
总用量 0
-rw-r--r--. 1 sgid1 sgid 0 3月  21 13:14 sgid1.txt
[sgid3@GeekDevOps sgid]$ exit
[root@GeekDevOps ~]# chmod o+w /sgid
[root@GeekDevOps ~]# su - sgid3
[sgid3@GeekDevOps ~]$ cd /sgid/
[sgid3@GeekDevOps sgid]$ touch GeekDevOps.txt
[sgid3@GeekDevOps sgid]$ ll
总用量 0
-rw-rw-r--. 1 sgid3 sgid 0 3月  21 14:13 GeekDevOps.txt

以上是针对目录sgid权限的举例,接下来我们看一下针对二进制文件的例子。

[root@GeekDevOps sgid]# ll /usr/bin/write 
-rwxr-sr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# write root pts/1
I am GeekDevOps!

在终端pts/1显示如下:

[root@GeekDevOps ~]# 
Message from root@GeekDevOps on pts/0 at 19:50 ...
I am GeekDevOps!
EOF

去除SGID权限观察:

[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-sr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# chmod g-s /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-xr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# write root pts/1
write: you have write permission turned off
[root@GeekDevOps ~]# chmod o-x /usr/bin/write 
[root@GeekDevOps ~]# write root pts/1
hello
^C[root@GeekDevOps ~]# chmod g-x /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-Sr--. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# chmod g+x /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-sr--. 1 root tty 19536 12月  2 07:28 /usr/bin/write

二进制文件write所有者是root,属于tty组,这个命令主要用于

四、SBIT

  • 针对目录有效。
  • 任何人都可以在此目录拥有写权限,但是不能删除、修改、移动别人拥有的文件。
  • 除了root和目录所有者,其他任何用户均不能删除具有该权限的目录。
  • 数字设置权限的值为1。

使用举例

[root@GeekDevOps ~]# ll / |grep tmp
drwxrwxrwt.   9 root root 4096 3月  22 18:51 tmp
[root@GeekDevOps tmp]# su sbit1
[sbit1@GeekDevOps tmp]$ touch sbit1
[sbit1@GeekDevOps tmp]$ exit
exit
[root@GeekDevOps tmp]# su sbit2
[sbit2@GeekDevOps tmp]$ ll
总用量 0
-rw-rw-r-- 1 sbit1 sbit1 0 3月  22 19:58 sbit1
[sbit2@GeekDevOps tmp]$ rm -rf sbit1 
rm: 无法删除"sbit1": 不允许的操作

五、一个小问题

有时候我们也会在权限列看到“S”或“T”,这是因为无论是SUID、SGID还是SBIT,都需要对应的文件或目录必须在权限列对应位置要有执行权限,如果没有执行权限,则会出现这种情况,表示权限为空。请看下面例子:

[root@GeekDevOps ~]# chmod 7666 test.sh 
[root@GeekDevOps ~]# ll test.sh 
-rwSrwSrwT 1 root root 666 3月  22 19:24 test.sh
相关文章
|
9月前
|
Shell Linux 数据安全/隐私保护
6.4.3 文件特殊权限: SUID, SGID, SBIT
6.4.3 文件特殊权限: SUID, SGID, SBIT
106 0
|
12月前
|
安全 Linux 数据安全/隐私保护
Linux的3种特殊权限场景实战:SUID、SGID、SBIT
Linux的3种特殊权限场景实战:SUID、SGID、SBIT
195 0
|
Linux
9.15 Linux文件特殊权限(SUID、SGID和SBIT)的设置
前面已经学习 SUID、SGID、SBIT 特殊权限,以及各自的含义和功能,那么,如何给文件或目录手动设定这些特殊权限呢?
304 0
9.15 Linux文件特殊权限(SUID、SGID和SBIT)的设置
|
数据安全/隐私保护
|
Unix 数据安全/隐私保护 Shell
|
Linux 数据安全/隐私保护
|
数据安全/隐私保护 Linux Shell