suid

Linux SUID/SGID/SBIT权限

[日期:2012-01-31]来源:Linux社区  作者:yeelone[字体:  ]
其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行。

    其中一个suid的应用实例就是passwd,在linux中,存储密码的文件是/etc/passwd与/etc/shadow这两个文件,

   

  
  
  1. linuxidc@www.linuxidc.com:~/cpp$ ls -l /etc/passwd 
  2. -rw-r--r-- 1 root root 1503 2011-03-22 15:03 /etc/passwd 
  3. linuxidc@www.linuxidc.com:~/cpp$  
  4.  
  5. linuxidc@www.linuxidc.com:~/cpp$ ls -l /etc/shadow 
  6. -rw-r----- 1 root shadow 1071 2011-03-22 15:03 /etc/shadow 
  7. linuxidc@www.linuxidc.com:~/cpp$  

这两天文件的所属用户 是root,也就是说,只有root用户可以修改这个文件。但是在一个多用户 的系统中,即便是普通用户,也有更改自己的密码的权限吧?但是更改密码就要更改到/etc/passwd这个文件,一般情况下是不被允许的。所以,这就是suid的作用了。

先看一下设置密码的命令:

  
  
  1. root@www.linuxidc.com:/tmp/aa# ls -l /usr/bin/passwd 
  2. -rwsr-xr-x 1 root root 37100 2011-02-15 06:12 /usr/bin/passwd 

可以看到,/usr/bin/passwd是设置 了sticky位的。也就是说,当普通用户在执行passwd命令时,其实使用是root管理员的身份,当更改完密码时,就恢复到普通用户的身份了。

我想了一个实验来看一下效果 

 

  
  
  1. cd /tmp/ 
  2. mkdir aa 
  3. cd aa 

写一个perl程序:

 

  
  
  1. #!/usr/bin/perl 
  2.  
  3. system("touch test"); 

顺便说一下,需要先安装perl-suid才可以设置perl程序suid位。不然会报如下错误:

Can't do setuid (cannot exec sperl)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值