linux权限之setUID
来源:互联网 发布:mac怎么玩qq游戏 编辑:程序博客网 时间:2024/06/06 15:43
我们知道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
- linux权限之setUID
- linux权限之setUID
- Linux 权限管理之二:setuid、setgid 和 sticky bit
- linux特殊权限位之setuid、setgid和sticky
- 浅议Linux中的SetUID权限
- linux特殊权限SetUID-36
- Linux setuid setgid stickybit 权限
- Linux 的setUid权限详解
- linux系统文件权限SetUID
- setuid权限
- linux/unix特殊权限setuid,setgid,sticky
- Linux权限360度赤裸裸华丽丽大曝光连载之二:深入理解SetUID
- Linux权限360度赤裸裸华丽丽大曝光连载之二:SetUID
- Linux权限360度赤裸裸华丽丽大曝光连载之二:SetUID
- Linux下权限管理-文件特殊权限setUID/sticky BIT
- Android系统篇之----Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)
- Android系统篇之----Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)
- linux特殊权限:setUid, setGid, 粘着位(sticky)
- Jetty9架构解析-Jetty配置及部署(二)
- unity渲染层级关系小结zz
- poj 2586
- 【详细】关于Java中的反射
- auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
- linux权限之setUID
- Hadoop yarn任务调度策略介绍
- 【转】调试段错误方法
- opengles拾取,碰撞检测,相交检测
- IllegalStateExceptio: Couldn't read row * from CursorWindow due to CursorWindow.nativeGetLong
- VC++6.0下C语言的输入输出
- C_Free5使用VC6.0编译器配置完成后出现无法构建的问题
- oc基础1
- 使用matplotlib的示例:调整字体-设置colormap和colorbar