3、文件的特殊权限SUID、SGID、sticky bit
3.1 SUID
SUID(Set owner User ID up on execution) 是针对文件所设置的一个特殊权限。只作用于二进制文件中。
功能:设置了suid权限的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限。
设置SUID的文件要求有如下几点:
- 1)SUID只对可执行的二进制文件起作用,shell脚本设置后不生效。
- 2)如果设置了其suid后,其属主的可以执行权限x会变成s(小写),如果是大写S那么说文件的属主没有执行权限,设置的SUID无效。
- 3)SUID对目录设置无意义。
3.1.1 SUID设置方法
- 字母设置方式:chmod u+s file
取消SUID:chmod u-s file - 数字设置方式:chmod 4755 在普通三位数字权限位之前,用4代表添加的SUID位
取消SUID:chmod 0755
3.1.2 SUID的作用演示
下面以passwd命令为例,来了解SUID的作用:
[root@localhost ceshi]# ls -l /usr/bin/passwd //查看passwd程序文件的权限 -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd 复制代码
发现属主的执行位显示为s,而非x。这里的s就是suid权限。
passwd命令的属主为root。在我们修改密码时,passwd命令将编辑一些配置文件, 如/etc/passwd, /etc/shadow,这些文件只有root账户拥有权限打开或浏览。 普通用户执行passwd命令时,将会遇到权限拒绝的错误或者一些其他的错误。所以passwd命令设置SUID将root用户权限授权给普通用户,使普通用户可以使用passwd命令修改自己的密码。
示例01:
当passwd程序设置了suid权限时,普通用户可以使用passwd命令修改自己的密码。
[root@localhost ceshi]# ls -l /usr/bin/passwd //查看passwd程序权限,带有suid权限 -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd [root@localhost ceshi]# su alice //切换为普通用户alice [alice@localhost ceshi]$ passwd //使用passwd命令修改密码 更改用户 alice 的密码 。 为 alice 更改 STRESS 密码。 (当前)UNIX 密码: 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 #修改成功 复制代码
示例02:
去掉passwd程序的suid权限后,普通用户无法使用passwd命令修改密码。
[root@localhost ceshi]# chmod u-s /usr/bin/passwd //去掉suid权限 [root@localhost ceshi]# ll /usr/bin/passwd //查看权限,不带有suid权限 -rwxr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd [root@localhost ceshi]# su alice //切换为普通用户alice [alice@localhost ceshi]$ passwd //使用passwd命令修改密码 更改用户 alice 的密码 。 为 alice 更改 STRESS 密码。 (当前)UNIX 密码: 新的 密码: 重新输入新的 密码: passwd: 鉴定令牌操作错误 #操作失败 复制代码
注意:
- passwd程序文件中的SUID权限为系统默认设置,非人为设置。
- 实际项目中,出于安全考虑,一般不会人为设置或修改SUID权限。
3.2 SGID
SGID属性和SUID一样,只是SUID作用于属主,而SGID作用于属组。
SGID的功能:
- SGID作用于二进制程序时,执行此程序的用户将拥有此程序的属组权限;
- 作用于目录时,此目录下所有用户新建文件的默认属组是这个目录的属组。
同样在设置SGID的文件后,其属组权限位上的可执行权限x会变成s,如果变成了S说明属组没有执行权限,设置SGID无效。
SGID设置方法:
- 字母设置方式:chmod g+s file/directory
取消SGID:chmod g-s file/directory - 数字设置方式:chmod 2755 在普通三位数字权限位之前,用2代表添加的SUID位
取消SGID:chmod 0755
3.3 sticky bit
这个权限的主要作用是在一个公共目录,每个用户都可以创建文件,删除自己的文件,但是不能删除别人的文件。这个权限只能用于目录,当某个目录拥有其Sticky权限 ,则其目录下的文件和目录只有root和其拥有者删除,其他用户不能删除,也就是说用户只能删除其自己本身属主的文件,不能删除其他属主的文件。
如果一个目录设置了其sticky权限,则其目录其他用户组的执行权限x会变成t(小写),它和SUID、SGID一样如果对应位是位上的可执行x变成了大写T ,那么表示其目录其他用户位上没有可执行权限,当然设置的Sticky就无效。
sticky设置方法:
- 字母设置方式:chmod o+t directory
取消SGID:chmod o-t directory - 数字设置方式:chmod 1755 在普通三位数字权限位之前,用1代表添加的sticky位
取消SGID:chmod 0755
查看公共目录/tmp 的权限,有特殊权限sticky位:
[root@localhost ~]# ll -dl /tmp drwxrwxrwt. 20 root root 4096 3月 1 10:05 /tmp 复制代码
3.4 总结
- 1)在给文件或目录设置特殊权限时,其文件对应位上必须拥有可执行权限,否则设置特殊权限无效。如果对应位上没有可执行权限,设置了特殊权限会在对应位上显示大写的字母,表示其特殊权限无效。
- 2)SUID只能作用于可执行的二进制文件,对目录无效。SGID可作用于可执行二进制文件和目录。Sticky只能作用于目录,对文件无效。
- 3)都是用chmod 进行授权。对于SUID和SGID都是+/-s,对于Sticky是+/-t;其中SUDI对应user位,SGID对应group位,Sticky对应other位。数字表示法,4表示SUID,2表示SGID,1表示Sticky。