setuid的优点:

1、 使用SetUID可以灵活的调整所有文件所有者权限
例如:
如果我们以普通用户
[root@localhost ~]# su xiweina
进入执行新建文件
[xiweina@localhost root]$ touch file
则出现
touch: 无法触碰 “fil“权限不够
而当我们执行查找touch所在的目录
[root@localhost ~]# ls -l `which touch`
-rwxr-xr-x 1 root root 42284 2009-07-13 /bin/touch
设置uid
[root@localhost ~]# chmod u+s /bin/touch
查看效果
[root@localhost ~]# ls -l `which touch`
显示s将x替换,现在的s即代表x也代表s有两者功能
-rwsr-xr-x 1 root root 42284 2009-07-13 /bin/touch
此时就可以建立了
[xiweina@localhost /]$ touch file
查询效果
[xiweina@localhost /]$ ls -l file
显示效果为
-rw-rw-r-- 1 root xiweina 0 12-15 19:05 file

通过上面我们可以再诠释下SetUID的定义,

当一个可执行文件(命令touch)设置SetUID权限后,当普通用户xiweina执行touch创建新文件时,实际上是以touch命令所有者root的身份在执行此操作,既然是以root身份执行,当然新建文件的所有者为root ,这就是SetUID的作用

setuid的缺点:

1 、为系统的安全性带来了隐患,如果Root用户为指定的程序文件配置过大的SetUID权限,那么就会为***或者非法用户打开了侵入系统的大门。
2、如果vi编辑器被设置了u+s,就更危险了,普通用户可以使用vi编辑/etc/shadow文件,因为具备root身份,可以进行任意读写操作(比如可以把任何一个用户密码位清空,则用户登录不需要输入密码)。但是使用more、cat等命令仍然无法查看文件/etc/shadow的内容,只有被授予了SetUID的vi可以查看和修改。同样,vi如果具有了SetUID权限,普通用户可以vi编辑/etc/passwd文件把自己的UID改为0 ,则他的权限就和root一样;可以vi编辑/etc/inittab文件把缺省运行级别改成6 ,则Linux会开机后不停的重启…,更可恶的是可以vi编辑/etc/inittab文件把缺省运行级别改成1,这时不太懂得人会以为机子坏了。
如果kill被授予setid权限,当普通用户执行kill时,因为kill被授予了SetUID权限,在执行的一瞬间具有了root权限,只要用户不爽想关闭任何服务都可以!

原文出自