linux权限之setUID

来源:互联网 发布:模拟电子技术软件 编辑:程序博客网 时间:2024/06/05 03:37
咱们从普通用户修改密码说起。

我们知道linux用户修改密码,最终修改的是/etc/shadow这个文件。可是我们用 ll /etc/shadow命令查看会发现此文件的权限为000,如下图:


也就是说,非root用户对此文件没有任何权限。

那矛盾就产生了:linux普通用户是有权限修改自己密码的,而普通用户又不俱备对/etc/shadow这个文件的任何权限。

linux操作系统为了解决这一问题,就产生了setUID权限。

我们了解在linux系统下,用户修改密码(也就是修改/etc/shadow文件)是通过passwd(此命令文件的绝对路径为/usr/bin/passwd,可以通过which passwd查看)这个命令的。我们用ll /usr/bin/passwd看一下此命令文件的权限,如下图:


发现/usr/bin/passwd的权限为:-rwsr-xr-x. 1 root root 在此“文件所有者”的第三位是s权限,也就是咱们本文提到的setUID权限。

回到咱们上面提出的问题,普通用户是怎么修改权限的。普通用户对/etc/shadow没有任何权限,但是可以能过/usr/bin/passwd命令去修改这个文件。linux是怎么做到的呢?就这就得功于/usr/bin/passwd权限(rwsr-xr-x)中的s权限(setUID)。普通用户修改密码使用passwd命令;这时由于passwd命令拥有setUID权限,所有linux系统临时把passwd这个命令文件的所有者(root)身份角色赋给普通用户,普通用户便拥有了root身份当然也就能够用passwd去修改/etc/shadow文件了,从而修改了密码。

换一句话就是说非root用户,在执行passwd命令时检测到有setUID权限;从而灵魂附体变成了超级管理员root。也就达到了普通用户也可以通过passwd命令去修改/etc/shadow文件。也就是说非root用户能够修改密码的原因正是如此。如下图:

在上图中告诉我们,普通用户可以用passwd命令修改/etc/shadow,是因为passwd命令有setUID权限。而普通用户如果用cat命令去读/etc/shadow,是不成功的。因为cat命令没有setUID权限。如果我们给cat命令也加上SUID权限,普通用户也就可以cat /etc/shadow文件了.实例如下图:

做完试验,出于系统安全考虑,防止密码泄漏,禁止让普通用户也能用cat查看/etc/shadow文件(尽管/etc/shadow文件里的密码是加过密的),把/etc/shadow权限改回以前系统默认的权限000如下图:


【补充】

setUID权限的特性

1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。

setUID权限设置 or 取消

设置:chmod u+s 文件  或 chmod 4755

取消:chmod u-s 文件   或 chmod 0755

1 0
原创粉丝点击