快速业务通道

linux SUID/SGID/SBIT权限

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-07

其实SUID和SGID的作用跟sudo是相似的.当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行.

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

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

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

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

  1. root@yee:/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程序: 拥有帝国一切,皆有可能。欢迎访问phome.net

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

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

Can''t do setuid (cannot exec sperl)

设置suid位:

  1. chmod u s /tmp/aa/test.pl
  2. chmod u x /tmp/aa/test.pl

  1. -rwsr-xr-x 1 yeelone yeelone 38 2011-03-22 15:00 test.pl*

目前用用户yeelone来执行:

  1. yeelone@yee:/tmp/aa$ ll
  2. 总计 12
  3. drwxr-xr-x 2 yeelone yeelone 4096 2011-03-22 15:31 ./
  4. drwxrwxrwt 13 root root 4096 2011-03-22 15:17 ../
  5. -rw-r--r-- 1 yeelone yeelone 0 2011-03-22 15:31 test
  6. -rwsr-xr-x 1 yeelone yeelone 38 2011-03-22 15:00 test.pl*
  7. yeelone@yee:/tmp/aa$

  1. yeelone@yee:/tmp/aa$ su
  2. 密码:
  3. root@yee:/tmp/aa# rm -f test
  4. root@yee:/tmp/aa# ./test.pl
  5. root@yee:/tmp/aa# ll
  6. 总计 12
  7. drwxr-xr-x 2 yeelone yeelone 4096 2011-03-22 15:34 ./
  8. drwxrwxrwt 13 root root 4096 2011-03-22 15:17 ../
  9. -rw-r--r-- 1 yeelone 拥有帝国一切,皆有可能。欢迎访问phome.net root 0 2011-03-22 15:34 test
  10. -rwsr-xr-x 1 yeelone yeelone 38 2011-03-22 15:00 test.pl*
  11. root@yee:/tmp/aa#

当我们用root的用户来执行test.pl这个程序时,touch出来的文件的所属主依然是yeelone,证明确实是以yeelone的身份来执行这个程序 的.

SGID多用在团队合作上,实际应用我觉得很少,具体应用是不太清楚,但是,可以创建一个目录,作为团队合作的工作目录,设置 sgid,那么团队成员都会以这个组的身份来访问操作这个目录的,如果在这个目录下创建了文件,则所属的组是这个目录所属的组.这个,属于这个组的其它成员就都可以共享这个文件的内容了.

  1. yeelone@yee:/tmp/aa$ mkdir bb
  2. yeelone@yee:/tmp/aa$ chmod g s bb
  3. yeelone@yee:/tmp/aa$ ll
  4. 总计 16
  5. drwxr-xr-x 3 yeelone yeelone 4096 2011-03-22 15:44 ./
  6. drwxrwxrwt 13 root root 4096 2011-03-22 15:17 ../
  7. drwxr-sr-x 2 yeelone yeelone 4096 2011-03-22 15:44 bb/
  8. -rw-r--r-- 1 yeelone root 0 2011-03-22 15:34 test
  9. -rwsr-xr-x 1 yeelone yeelone 38 2011-03-22 15:00 test.pl*
  10. yeelone@yee:/tmp/aa$ cd bb
  11. yeelone@yee:/tmp/aa/bb$ su
  12. 密码:
  13. root@yee:/tmp/aa/bb# touch one
  14. root@yee:/tmp/aa/bb# ll
  15. 总计 8
  16. drwxr-sr-x 2 yeelone yeelone 4096 2011-03-22 15:44 ./
  17. drwxr-xr-x 3 yeelone yeelone 4096 2011-03-22 15:44 ../

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号