天天看点

Linux特殊权限SUIDSGIDSBIT设置特殊权限

SUID

passwd这个命令是用来修改密码的,所有人都可以用来修改自己的密码,其中root可以修改其他人的密码。而密码是存在/etc/shadow文件下的,看下这个文件的权限:

[email protected]:tmp$ ll /etc/shadow
-rw-r----- 1 root shadow 1.4K 9月  14 12:32 /etc/shadow
           

这个文件只有root有写入的权限,那我们用passwd命令的时候,明明不是root,为什么可以把修改的密码写入这个文件呢?主要就是passwd的特殊权限:

[email protected]:tmp$ ll $(which passwd)
-rwsr-xr-x 1 root root 59K 3月  23 03:05 /usr/bin/passwd
           

可以发现权限不是常见的x,而是s(代表x和SUID,如果是大写的S,代表没有x只有SUID,这时SUID无效)。当二进制可执行文件拥有这种权限时,代表进程的拥有人和文件拥有人相同,而不是执行人。也就是说,任何人执行passwd时,进程的拥有人身份不是执行人,而是passwd的拥有人(root),所以这个进程可以修改shadow文件。

SGID

和SUID很像,拥有这个权限时:

如果是二进制可执行文件,代表进程的群组身份和文件所属群组相同。

SUID不能给目录特殊含义,但是SGID可以,比如:

[email protected]:tmp$ ll -d test/
drwxr-sr-x 2 allen root 6 9月  14 17:46 test/
[email protected]:tmp$ cd test/
[email protected]:test$ touch file
[email protected]:test$ ll file 
-rw-r--r-- 1 allen root 0 9月  14 17:48 file
           

可以看到最后的file文件所属群组并不是allen组,而是和test目录同样的组(root)。所以对于目录,SGID代表的含义:任何在目录下的操作,群组身份都和目录群组相同。

SBIT

直接看典型目录:

[email protected]:/$ ll -d tmp/
drwxrwxrwt 18 root root 4.0K 9月  14 18:03 tmp/
           

当普通目录的权限是777时,代表任何人都可以在目录下随便增删改。但如果需要设置一个目录为:任何人都可以新增文件,但只能修改删除自己创建的文件。这时,SBIT权限的作用就体现出来了,最后一个权限值是t。

设置特殊权限

权限 权重
SUID 4 s
SGID 2 s
SBIT 1 t

设置方法:

[email protected]:tmp$ chmod 7777 test/
[email protected]:tmp$ ll -d test/
drwsrwsrwt 2 allen allen 18 9月  14 17:48 test/
           

还有种方法:

[email protected]:tmp$ chmod u=s,g-s,o-t test/
[email protected]:tmp$ ll -d test/
d--Srwxrwx 2 allen allen 18 9月  14 17:48 test/
           

继续阅读