suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。于是,如果超级用户的某一个脚本设置了这样的权限,那么其他普通用户在执行它的期间也同样具有超级用户的权限。同样的原则也适用于guid,执行相应脚本的用户将具有该文件所属用户组中用户的权限。
可以使用以下命令查找设置了suid或guid的文件:
$ ls -l | grep '^...s'(查找suid)
$ ls -l | grep '^...s..s'(查找suid和guid)
如果希望设置suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。一旦设置了这一位,一个s将出现在x的位置上。记住:在设置suid或guid的同时,相应的执行权限位必须要被设置。
如:chmod 4755 <filename> rws r-x r- x
chmod 6711 <filename> rws--s --s
还可以使用符号方式来设置suid / guid。如果某个文件具有这样的权限:rwx r-x r- x,那么可以这样设置其suid:
chmod u+s <filename> rws r-x r-x
在查找设置了suid的文件时,没准会看到具有这样权限的文件:rwS r-x r- x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的suid设置,可以忽略它的存在。
注意,chmod命令不进行必要的完整性检查,可以给某一个没用的文件赋予任何权限,但chmod命令并不会对所设置的权限组合做什么检查。因此,不要看到一个文件具有执行权限,就认为它一定是一个程序或脚本。