首页 > 学院 > 操作系统 > 正文

文件特殊权限

2024-06-28 16:04:24
字体:
来源:转载
供稿:网友

1. SetUID

只有可以执行的二进制文件才能设定SUID权限。命令的执行者要对该可执行文件拥有x(执行)权限。命令的执行者在执行该文件时,身份会临时变为它的文件所有者(在执行程序的过程中灵魂附体为文件的属主)。SetUID权限只在该文件执行过程中有效,也就是说身份改变只在程序执行过程中生效)。

其实,passwd命令所对应的可执行文件就拥有SetUID权限。

[root@localhost tmp]# ll /usr/bin/passwd-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd

可以发现,/usr/bin/passwd的文件所有者的执行权限是小写字母s(如果是大写字母S,就有问题) ,这就说明该可执行文件拥有SUID权限。正是因为如此,普通用户才能更改自己的密码,普通用户更改自己的密码时,身份临时变为超级用户root,所以才能将密码变更写入/etc/shadow(权限为000)的文件。

cat 命令没有SUID权限,所以普通用户不能查看 /etc/shadow 文件的内容。要想让普通用户也能使用cat命令查看 /etc/shadow 文件,可给cat命令赋予SUID权限。

1.1 设定SUID权限

数字4代表SUID,给一个可执行文件(一般为命令)设置SUID权限的方法有两种:

chmod 4755 文件名chmod u+s 文件名

常见用法:

给cat命令赋予SUID权限:chmod 4755 /bin/cat或chmod u+s /bin/cat

1.2 删除SUID权限

删除SUID权限的方法也有两种:

chmod 755 文件名chmod u-s 文件名

常见用法:

chmod u-s /bin/cat删除cat命令的SUID权限

1.3 危险的SUID权限

作为一名合格的linux系统管理员,必须定期对系统中默认应该具有SUID权限的可执行文件进行列表,并定期检查是否有新的可执行文件被设置了SUID权限。

千万不要对vi命令或vim命令设置SUID权限,否则,所有的普通用户都能使用vi命令编辑一些特殊文件(如/etc/passwd),进而将自己的UID改为0(普通用户就会拥有超级用户root的所有权限),甚至对整个系统安全造成更加严重的灾难。

2. SetGID

2.1 SetGID针对可执行的二进制文件的作用

只有可执行的二进制文件才能设置SGID权限。命令执行者要对该文件拥有x(执行)权限。执行该二进制文件时,组身份临时变为该文件的所属组。SGID权限只在该可执行文件执行过程中有效,也就是说组身份改变只在程序执行过程中生效。

locate命令就具有SGID权限。

[root@localhost ~]# ll /usr/bin/locate-rwx--s--x. 1 root slocate 31492 3月 12 2015 /usr/bin/locate

可以发现,locate命令的所属组的执行权限是小写字母s。

[root@localhost etc]# ll /var/lib/mlocate/mlocate.db-rw-r-----. 1 root slocate 2310094 12月 2 08:17 /var/lib/mlocate/mlocate.db

2.2 SetGID针对目录的作用

普通用户必须对此目录拥有rx的权限,才能浏览和进入该目录。普通用户进入该目录时,普通用户的有效组会变为该目录的所属组。如果普通用户对该目录拥有w权限,新建文件的默认属组是这个目录的所属组。

2.3 设定SGID权限

数字2代表SGID,设置SGID权限的方法有两种:

chmod 2755 文件或文件夹名chmod g+s 文件或文件夹名

2.4 删除SGID权限

删除SGID权限的方法有两种:

chmod 755 文件或文件夹名chmod g-s 文件或文件夹名

2.5 危险的SGID权限

对于可执行文件,设置SGID权限也是一种很危险的操作。应该尽量避免人为地给可执行文件赋予SGID权限,并定期检查系统中可能存在的SGID权限的文件,列出清单以供排查。

3. Sticky BIT

3.1 SBIT粘着位的作用

SBIT权限只针对目录有效。普通用户对该目录拥有wx权限,即普通用户有进入目录和写权限。如果没有SBIT权限,因为普通用户拥有w权限,所以可随意删除该目录中的文件,包括其他用户建立的文件。一旦该目录设置了SBIT粘着位权限,除了root用户可以删除目录中的所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但无法删除其他用户建立的文件。

Linux系统中默认就具有SBIT权限的目录是 /tmp 目录。

[root@localhost etc]# ll -d /tmpdrwxrwxrwt. 5 root root 4096 1月 27 17:12 /tmp

可以发现,/tmp目录的执行权限是小写字母t。

3.2 设定SBIT权限

数字1代表SBIT,设置SBIT权限的方法有两种:

chmod 1755 目录名chmod o+t 目录名

3.3 删除SBIT权限

删除SBIT权限的方法有两种:

chmod 777 目录名chmod o-t 目录名
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表