一个文件都有一个全部者, 表示该文件是谁建立的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 通常为文件全部者所属的组.
若是是一个可执行文件, 那么在执行时, 通常该文件只拥有调用该文件的用户具备的权限. 而setuid, setgid 能够来改变这种设置.
setuid: 设置使文件在执行阶段具备文件全部者的权限. 典型的文件是 /usr/bin/passwd. 若是通常用户执行该文件, 则在执行过程当中, 该文件能够得到root权限, 从而能够更改用户的密码. 其余还有ping,su等命令
setgid: 该权限对目录和可执行文件有效. 目录被设置该位后, 任何用户在此目录下建立的文件都具备和该目录所属的组相同的组.可执行文件设置该位后,该程序将以文件所属组的权限来执行.
sticky bit: 该位能够理解为防删除位. 一个文件是否能够被某用户删除, 主要取决于该文件所属的组是否对该用户具备写权限. 若是没有写权限,则这个目录下的全部文件都不能被删除, 同时也不能添加新的文件. 若是但愿用户可以添加文件但同时不能删除文件, 则能够对文件使用sticky bit位. 设置该位后, 就算用户对目录具备写权限, 也不能删除该文件.
下面说一下如何操做这些标志:
操做这些标志与操做文件权限的命令是同样的, 都是 chmod. 有两种方法来操做,
1) chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效)
chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效)
chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)
2) 采用八进制方式. 对通常文件经过三组八进制数字来置标志, 如 666, 777, 644等. 若是设置这些特殊标志, 则在这组数字以外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义以下,
abc
a - setuid位, 若是该位为1, 则表示设置setuid
b - setgid位, 若是该位为1, 则表示设置setgid
c - sticky位, 若是该位为1, 则表示设置sticky
设置完这些标志后, 能够用 ls -l 来查看. 若是有这些标志, 则会在原来的执行标志位置上显示. 如
rwsrw-r-- 表示有setuid标志
rwxrwsrw- 表示有setgid标志
rwxrw-rwt 表示有sticky标志
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 若是原本在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 不然, 显示为大写字母 (S, S, T)
这三个权限的数字位能够这么理解
[root@server3 test]# 1 1 1
[root@server3 test]# rws rws rwt
[root@server3 test]# SUID SGID Sticky
因此,能够得出
chmod 4777是设sid
chmod 2777是设置gid
chmod 1777是设sticky
经常使用操做
找出全部危险的目录(设置目录全部人可读写却没有设置sticky位的目录)
find / -perm -0007 -type d
找出全部设置了suid的文件
find / -perm -4000 -type f
------------------------------------------------------------------------
eg:
chmod 777 abc
chmod +t abc
等价于
chmod 1777 abc
当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由
1、超级管理员删除
2、该目录的全部者删除
3、该文件的全部者删除
也就是说,即使该目录是任何人均可以写,但也只有文件的属主才能够删除文件。
若是一个文件设置了"粘着位"(用chmod a+t),但用户对文件所属目录仍然有写权限,那么用户是能够用-f参数强制删除该文件的,即便该文件不属于操做用户。
----------------------------------------------------------------------------
如下是实际测试结果
ide
? 目录加上set uid权限没有效果,略过测试
? 目录加上set gid权限以后,目录下建立的文件的所属组为文件夹的所属组,文件的全部者为执行建立命令的用户,生成文件时的umask为文件建立者的umask。ui
? 目录加上stickbit权限以后,目录下的文件只能由建立者和root执行删除或重命名。下图所示,visitor对目录有rwt权限,对目录下面的文件也有rw的权限,可是删除文件时,属于student的文件不能被删除。spa
? 可执行程序加上setuid权限后,全部有权限执行此程序的用户在执行此程序时将以程序全部者的身份运行。orm
下图,root用户运行createfile,生成的文件全部者为student,由于createfile添加了set uid权限server
? 可执行程序加上set gid权限后,全部有权限执行此程序的用户在执行此程序时将以程序全部组的身份运行blog
? 文件加上stickbit权限没有效果,略过it
---------------------------------------
若是须要以数字赋权限的方式取消目录的set gid或者set uid,须要在权限数值前面加上前导的0。
下图,经过0555的权限进行赋权,但实际结果,set gid和set uid仍然存在,只有stick bit被取消了class
用 00555 的权限进行赋权才能正确取消set gid 和 set uid。
用ugo配合sst的方式取消权限没有这个问题。
test
如下为网图,来源未知