其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行。
其中一个suid的应用实例就是passwd,在linux中,存储密码的文件是/etc/passwd与/etc/shadow这两个文件,
linuxidc@:~/cpp$ls-l/etc/passwd-rw-r–r–1rootroot15032011-03-2215:03/etc/passwdlinuxidc@:~/cpp$linuxidc@:~/cpp$ls-l/etc/shadow-rw-r—–1rootshadow10712011-03-2215:03/etc/shadowlinuxidc@:~/cpp$这两天文件的所属用户 是root,也就是说,只有root用户可以修改这个文件。但是在一个多用户 的系统中,即便是普通用户,也有更改自己的密码的权限吧?但是更改密码就要更改到/etc/passwd这个文件,一般情况下是不被允许的。所以,这就是suid的作用了。
先看一下设置密码的命令:
root@:/tmp/aa#ls-l/usr/bin/passwd-rwsr-xr-x1rootroot371002011-02-1506:12/usr/bin/passwd可以看到,/usr/bin/passwd是设置 了sticky位的。也就是说,当普通用户在执行passwd命令时,其实使用是root管理员的身份,当更改完密码时,,就恢复到普通用户的身份了。
我想了一个实验来看一下效果
cd/tmp/mkdiraacdaa写一个perl程序:
#!/usr/bin/perlsystem(“touchtest”);顺便说一下,需要先安装perl-suid才可以设置perl程序suid位。不然会报如下错误:
Can’t do setuid (cannot exec sperl)
每天告诉自己一次,『我真的很不错』