linux中的文件特殊权限
一、SetUID:
1、只有可以执行的二进制程序才能设定SUID权限
2、命令执行者要对该程序拥有执行权限
3、命令执行者在执行该程序时获得该程序文件属主的身份
4、etUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
passwd命令是可执行的文件并且拥有SetUID权限,所以普通用户可以修改自己的密码,修改密码其实就是修改/etc/shadow文件,普通用户对于这个文件是没有任何权限的,也就是说在执行这个命令的时候普通用户暂时的获得了该文件属主root的身份
通过命令ll /usr/bin/passwd查看文件信息,看到权限是-rwsr-xr-x,所有者权限中的x位的s就是代表这个程序拥有SetUID权限,如果权限显示的是大写的"S",代表SetUID权限有误,比如没有执行权限等。
设定SetUID:
1、chmod 4755 文件名:755代表正常的权限设置,前面的4代表SetUID权限。
2、chmod u+s 文件名:代表给所有者(u)加上SetUID权限(s)。
取消SetUID权限:
1、chmod 755 文件名
2、chmod u-s 文件名
SetUID权限是很危险的,一般情况下不要设置,我们应该对系统中默认应该具有SetUID权限的文件作一个备案记录,定时检查有没有这之外的文件被设置了SetUID权限,批量扫描检查可以用shell脚本实现。
二、SetGID
SetGID针对文件的作用(和SetUID功能很相似):
1、只有可执行的二进制程序才能设置SGID权限
2、命令执行者要对该程序拥有执行权限
3、命令执行在执行程序的时候,组身份转换为该程序文件的属组
4、SetGID权限同样只能在该程序执行过程中有效。
常见的系统默认有用SetGID权限的如文件/usr/bin/locate。该文件的权限是-rwx--s--x,所属组的权限的x位的s就代表该文件拥有SetGID权限,这个命令是搜索/var/lin/mlocate/mlocate.db文件的,但是该文件的权限是-rw-r-----,其他人没有读的权限,但是由于SetGID权限,在运行命令的时候暂时会以locate命令文件的所属组的身份运行,这样对数据库文件就有了读权限,可以查看搜索了。
SetGID针对目录的作用:
1、普通用户必须对此目录拥有读(r)和执行(x)权限,才能进去此目录
2、普通用户在此目录中的有效组会变成此目录的属组
3、若普通用户对此目录拥有写(w)权限时,新建的文件属组是这个目录的属组,所有者是操作该目录的用户。
设定和删除SetGID权限和设定SeiUID相同:
设定:chmod 2755 文件名:最前面的2代表SetGID权限;或者chmod g+s 文件名
删除:chmod 755 文件名或者chmod g-s 文件名
三、Sticky BIT:SBIT权限也称为粘着位权限。
粘着位目前只对目录有效
普通用户对该目录拥有写(w)和执行(x)权限
作用:如果没有粘着位,因为普通用户拥有写的权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户即使拥有写的权限,也只能删除自己建立的文件,不能删除其他用户建立的文件。
常见的系统默认拥有粘着位的目录如/tmp目录,查看权限显示drwxrwxrwt,其他人的权限的x位的t代表该目录赋予了粘着位。
设置和删除粘着位的方法和前面的相似:
设定:chmod 1755 目录名:最前面的1代表SBIT权限;或者chmod o+t 目录名
删除:chmod 755 目录名:或者chmod o-t 目录名
上面说的三个特殊文件权限其中4代表SetUID权限,2代表SetGID,1代表Sticky BIT权限,所以在设定的时候可以直接用权限数字只和代表同时设定多个特殊权限,如chmod 7755 文件名,可以同时赋予三个权限,但是由于这三个权限的针对目标(二进制文件和目录)不一样,所以这样设置虽然不会报错,但是有些权限不会起作用,所以一般不会这样使用。