首页 理论教育 LinuxShell编程中的实用SUID设置

LinuxShell编程中的实用SUID设置

时间:2023-11-18 理论教育 版权反馈
【摘要】:SUID仅对可执行的二进制文件起作用。SUID的作用是:其他账户在执行时具有文件所有者的权限。下面以命令passwd为例来理解SUID的作用。SUID的设置有两种方法。其实chmod后面可以跟四位八进制数,最前面一位为4时,表示设置SUID属性。先取消a.sh的对于所有者的执行权限:再设置SUID:可以看见一个大写的字母S而不是小写的s,这是不正常的。

LinuxShell编程中的实用SUID设置

用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的所有者执行权限,就正常了:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈