suid特殊权限是以命令(可执行文件)的所有者权限来运行这一命令的,而不是以执行者的权限来运行该命令 。
下面举例,查看passwd这个命令的权限
shiyanlou:teshuquanxian/ $ where passwd [0:27:58]
/usr/bin/passwd
shiyanlou:teshuquanxian/ $ ll /usr/bin/passwd [0:37:07]
-rwsr-xr-x 1 root root 46K Jan 27 2016 /usr/bin/passwd
我们看到,这个可执行文件具有suid权限,且此文件的所有者为root,并且其他人拥有此文件的执行权限。
再来以查看/etc/shadow这个文件的权限情况
shiyanlou:teshuquanxian/ $ ll /etc/shadow [0:37:15]
-rw-r----- 1 root shadow 1.1K Dec 2 23:49 /etc/shadow
我们都知道当我们创建一个用户并给此用户赋予密码时,必定要向此shadow文件中写入关于此用户的密码信息。而此
文件仅对root用户有写权限。
下面来解释suid的妙用
当我们使用passwd命令为某个用户添加密码时,因为passwd文件对其他人有执行权限,且具有suid,这个时候普通用户在执行passwd
命令时,即身份暂时转换为passwd文件的所有者即root,然后再以此root身份向shadow文件中添加相关信息