Linux笔记17-权限管理[文件特殊权限]
【权限管理-文件特殊权限 】
8.2.1 SetUID
8.2.2 SetGID
8.3.3 Sticky BIT
◆ SUID
◇ SetUID的功能与条件
① 只有可以执行的二进制程序才能设定SUID权限
② 命令执行者要对该程序拥有x(执行)权限
③ 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
④ SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
passwd命令拥有SetUID权限,所以普通可以修改自己的密码
[[email protected] ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[[email protected] ~]# ll /bin/cat
-rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat
◇ 设定SetUID的方法
数字4代表SUID
扩展:之前说的表示权限的3个数字(例如 755,777)其实是不完整的,其实前面还有一个数字。
有三种情况:4755(SUID),2755(SGID),1755(SBIT),7755(同时拥有前面三个,一般不这么用) 。
chmod 4755 文件名
chmod u+s 文件名
案例:创建一个空文件并查看其默认权限,结果是644
现在要给这个文件设定SUID,使用 chmod 4755 abc即可
上面的abc不是可执行程序,如果是的话,任何一个用户在操作的时候就可以获得root权限。
◇ 取消SetUID的方法
chmod 755 文件名
chmod u-s 文件名
◇ 危险的SetUID
① 关键目录应严格控制写权限。比如“/”、“/usr”等
② 用户的密码设置要严格遵守密码三原则
③ 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
视频中演示的是给vim文件 (/usr/bin/vim)设置了SUID权限,于是乎,任意用户使用vim都可以编辑打开任意的文件,
例如/etc/shadow等等所有的重要文件,或者系统的配置文件。这样会很危险!!
◆ SGID
◇ SetGID针对文件的作用
① 只有可执行的二进制程序才能设置SGID权限
② 命令执行者要对该程序拥有x(执行)权限
③ 命令执行在执行程序的时候,组身份升级为该程序文件的属组
④ SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
为什么普通用户可以使用 locate 命令呢?
[[email protected] ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
[[email protected] ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
过程分析:
* /usr/bin/locate是可执行二进制程序,可以赋予SGID
* 执行用户lamp对/usr/bin/locate命令拥有执行权限
* 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
* 命令结束,lamp用户的组身份返回为lamp组
◇ SetGID针对目录的作用和条件(实际操作中的意义不大)
* 普通用户必须对此目录拥有r和x权限,才能进入此目录
* 普通用户在此目录中的有效组会变成此目录的属组
* 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
案例解说:
在/tmp 目录下创建一个目录,并且赋予2777权限(SGID,同时777)
切换到用户rx,然后先在家目录新建一个文件,查看该文件的所属组是默认的rx
但是,现在到刚才设置了SGID的目录 /tmp/test 目录下新建一个文件,再查看所属组:
结果显示,在这个目录新建的文件的所属组不是rx,而是这个目录的所属组root.
设定SetGID (2代表SGID )
chmod 2755 文件名
chmod g+s 文件名
取消SetGID
chmod 755 文件名
chmod g-s 文件名
◆ Sticky+BIT
◇ SBIT粘着位作用
* 粘着位目前只对目录有效
* 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
* 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
◇ 一般最多设置的就是 /tmp 目录。
[[email protected] ~]# ll -d /tmp/
drwxrwxrwt. 3 root root 4096 12月 13 11:22 /tmp/
测试一下:
使用用户rx 在/tmp 下创建一个文件,然后切换到另一个用户尝试删除这个文件就会出错。
但是明显这个用户对/tmp 目录是有执行权限的。
◇ 设置与取消粘着位
设置粘着位
chmod 1755 目录名
chmod o+t 目录名
取消粘着位
chmod 777 目录名
chmod o-t 目录名