文件特殊属性:SUID/SGID/Sticky

文件特殊属性:SUID/SGID/Sticky

在介绍SUID之前,让我们来看一个奇怪的问题:通过前两章的学习我们已经了解到,每个用户都可以使用passwd(该命令的绝对路径是/usr/bin/passwd)来修改自己的密码。系统用于记录用户信息和密码的文件分别是/etc/passwd和/etc/shadow,命令passwd执行的最终结果是去修改/etc/shadow中对应用户的密码。对于这个文件,只有root用户有读权限,而普通用户在修改自己的密码时,最终也会修改这个文件。注意,虽然/etc/shadow文件对于root用户来说只有读权限,但是实际上root是可以使用强写的方式来更新这个文件的。但是普通用户在运行这个命令时居然有权限来写/etc/shadow文件,怎么可能呢?先来确认一下/etc/passwd和/etc/shadow的文件属性,从而确定普通用户根本没有写权限:
 

 
 
  1. [root@localhost ~]# ls -l /etc/passwd  
  2. -rw-r--r-- 1 root root 1379 Dec 10 04:41 /etc/passwd  
  3. [root@localhost ~]# ls -l /etc/shadow  
  4. -r-------- 1 root root 859 Dec 10 04:41 /etc/shadow 

再来看一下/usr/bin/passwd的权限,发现有个特别的s权限在用户权限上,这就是奥秘所在—该命令是设置了SUID权限的,这意味着普通用户可以使用root的身份来执行这个命令。那么以上的疑问就很容易解释了。但是必须注意的是,SUID权限只能用于二进制文件。确认一下/usr/bin/passwd的权限:
 

 
 
  1. [root@localhost ~]# ll /usr/bin/passwd  
  2. -rwsr-xr-x 1 root root 22984 Jan  7  2007 /usr/bin/passwd 

下面是给一个二进制文件添加SUID权限的方法:
 

 
 
  1. [root@localhost ~]# chmod u+s somefile 

介绍完SUID之后,想必再来理解SGID就很容易了:如果某个二进制文件的用户组权限被设置了s权限,则该文件的用户组中所有的用户将都能以该文件的用户身份去运行这个命令,一般来说SGID命令在系统中用得很少,给一个二进制文件添加SGID权限的方法如下:
 

 
 
  1. [root@localhost ~]# chmod g+s somefile 

Sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件,但是只有该文件的创建者和root可以删除自己的文件。RedHat或CentOS系统中的/tmp目录就拥有Sticky权限(注意看权限部分的最后是t),如下所示:
 

 
 
  1. [root@localhost ~]# ll -d /tmp/  
  2. drwxrwxrwt 3 root root 4096 Jan  4 04:53 /tmp/ 

举个例子,用户john登录后,在/tmp下创建了一个文件john_file,然后,用户jack也登录到系统中进入/tmp目录,他试图删除这个文件,系统会告诉他没有权限删除这个文件,如下所示:
 

 
 
  1. #用户john登录到系统中并创建了/tmp/john_file  
  2.  
  3. [john@localhost ~]$ cd /tmp/  
  4. [john@localhost tmp]$ touch john_file  
  5.  
  6. #用户jack登录到系统中试图删除/tmp/john_file  
  7.  
  8. [jack@localhost ~]$ cd /tmp/  
  9. [jack@localhost tmp]$ rm john_file  
  10. rm: remove write-protected regular empty file 'john_file'? y  
  11. rm: cannot remove 'john_file': Operation not permitted 

给一个目录添加t权限的方式如下:
 

 
 
  1. [root@localhost ~]# chmod o+t somedir 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值