SUID
SUID
1. 从passwd
说起
普通用户可以使用passwd
命令来修改自己的密码,但大家都知道修改密码需要保存到/etc/shadow文件中,但从shadow
文件中可以看到只有root用户可写,那么普通用户是如何修改这个文件的呢?
ls -l /etc/shadow
-rw-r----- 1 root shadow 1404 Nov 7 2019 /etc/shadow
我们先看passwd
命令的权限,可以看到该文件属于root:root
,对于用户、组、其它的可执行权限分别为s
, x
, x
,x
可以理解,这个s
的用处是什么呢?
ls -l `which passwd`
-rwsr-xr-x 1 root root 54256 May 17 2017 /usr/bin/passwd
实际上s
是SUID权限,这个文件表示非所有者在执行这个文件时,会临时以所有者的权限执行,也就是passwd
在普通用户执行时,可以获取root
权限,从而将修改的密码保存到了/etc/passwd
权限。当然如果不想普通用户修改自己的密码,可以把passwd
的SUID权限拿掉。
同理,也存在SGID权限。
2. 应用
如果平时遇到一个应用程序需要获得管理员权限才能执行,但普通用户并没有加到sudoers
,或者加到sudoers
但不想每次都敲sudo
,这时就可以将该文件加上SUID权限。
首先,如果想使用管理员权限,先要把可执行文件(test)改成root
所有:
> ll test
-rwxrwxr-x 1 gr gr 45878368 Sep 23 15:59 test*
> sudo chown root:root tesst
> ll test
-rwxrwxr-x 1 root root 45878368 Sep 23 15:59 test*
对文件添加SUID权限,使用如下命令:
> sudo chmod u+s test
> ll test
-rwsrwxr-x 1 root root 45878368 Sep 23 15:59 test*
如果想添加SGID权限,使用如下命令:
> sudo chmod g+s test
> ll tests
-rwxrwsr-x 1 root root 45878368 Sep 23 15:59 test*