linux中SET位权限和粘滞位权限详解
对文件或目录进行访问控制时,“读取”、“写入”、“执行”是最基本的三种权限类型。除此之外,在linux中还存在着SET位权限(SUID、SGID)、粘滞位(Sticky Bit)等为文件或目录提供额外的控制方式。下面我们就来聊聊这两个非常有用的方式。
SET位权限
位权限多用于给可执行的程序或脚本文件进行设置,其中SUID表示对属主用户增加SET位权限,SGID表示对属组内的用户增加SET位权限。执行文件被设置了SUID、SGID权限后,任何用户在执行该文件时,将获得该文件属主、属组账号对应的身份。
为执行文件添加SET位权限一般使用chmod命令实现:
如使用“chmod u+s”设置SUID权限,使用“chmod g+s”设置SGID权限。
也可以使用数字形式,SUID对应八进制数字“4”、SGID对应八进制数字“2”:
如使用“chmod 4755”设置SUID权限,使用“chmod 2755”设置SGID权限,使用“chmod 6755”同时设置SUID和SGID权限
合理利用SUID、SGID设置SET位权限,可以在确保安全性的同时为linux系统的管理和使用带来方便。例如,linux系统中passwd命令的程序文件就被设置了SUID权限,正因为如此,尽管普通用户无法直接修改“/etc/shadow”文件,但仍然可以通过passwd命令修改自己的登录密码,从而以root用户的身份间接更新shadow文件中的密码信息。
另一方面,若没有确切的应用需要,不要轻易为可执行文件设置SET位权限,特别是那些属主、属组是root的执行程序,使用SET位权限时更应该谨慎。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件。
需要去除SUID、SGID权限时,只需要使用“u-s”、“g-s”的权限模式即可。
粘滞位权限
粘滞位主要用于为目录设置特殊的附加权限,当目录被设置粘滞位权限后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据。设置了粘滞位权限的目录,使用ls命令查看其属性时,其他用户权限处的“x”将变为“t”。
使用chmod命令设置目录权限时,“chmod +t”、“chmod -t”权限模式可分别用于添加、移除粘滞位权限。将数字权限模式“nnnn”中 的第1位数字改为“1”、“0”,也可以实现添加移除粘滞位权限。