用ls-l命令查看文件或者目录的权限时,可以看见r、w和x,在自己的Linux系统里面查找,还能看见其他字母。进入/usr/bin、/bin或者/sbin目录,运行ls-l|grep'^...s',能看到字母s。例如,在Ubuntu的/bin目录下,执行命令:
可见账户root对这些文件的权限为rws,而不是rwx。在解释字母s的含义之前,先介绍命令passwd。命令passwd用来修改账户密码,任何账户都可以使用它。运行命令,输入旧密码和新密码,新密码需要输入两次且必须一致,则可以成功修改密码。例如:
修改密码之后,文件/etc/shadow会被更新,因为加密之后的密码存在/etc/shadow中。查看一下它的权限:
从表面看,只有账户root才有权限修改更新这个文件,然而任何账户都可以使得/etc/shadow的内容更新(因为任何账户都可以运行passwd来修改自己的密码)。这是如何实现的呢?查看一下可执行文件passwd:
在表示文件所有者的执行权限的地方可以看见s,而不是x,它就是SUID,SUID是set uid的缩写。SUID仅对可执行的二进制文件起作用。SUID的作用是:其他账户在执行时具有文件所有者的权限。下面以命令passwd为例来理解SUID的作用。
执行命令passwd就是执行/usr/bin/passwd,而文件/usr/bin/passwd有SUID属性并且所有者是root,那么任何账户执行passwd时,就临时具有了与账户root一样的权限(也可以认为临时变为了root),加密的新密码就可以写入文件/etc/shadow了。
SUID的设置有两种方法。例如,有一个可执行的文件a.sh:(www.xing528.com)
对文件所有者(u)增加SUID属性(+s):
文件a.sh具有了SUID属性:
另一种方法是,使用数值的方法。通过前面章节的内容,似乎所谓的数值方法就是在chmod后面跟三位八进制数。其实chmod后面可以跟四位八进制数,最前面一位为4时,表示设置SUID属性。例如:
设置SUID要同时保证文件对于所有者有执行权限,如果没有,会怎样?先取消a.sh的对于所有者的执行权限:
再设置SUID:
可以看见一个大写的字母S而不是小写的s,这是不正常的。增加文件a.sh的所有者执行权限,就正常了:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。