zoukankan      html  css  js  c++  java
  • setuid 粘滞位 ——想想passwd这个命令修改shadow文件就知道本质 当普通用户使用passwd更改自己密码的时候,那一瞬间突然灵魂附体了,实际在以passwd命令所有者root的身份在执行

    在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置。问题是:用户的信息保存在文件/etc/passwd中,用户的密码保存在文件/etc/shadow中,也就是说用户更改自己密码时是修改了/etc/shadow文件中的加密密码,但是,LOOK——
    -rw-r--r-- 1 root root 1787 Oct 27 2009 /etc/passwd
    -r-------- 1 root root 1187 Oct 27 2009 /etc/shadow
    /etc/passwd文件每个用户都有读权限但是只有root有写权限,/etc/shadow文件只有超级用户root有读写权限,也就是说普通用户对这两个文件都没有写权限无法写入新密码,为什么普通用户可以更改密码呢?
    PS:Linux中设置或更改用户密码,是先写入到/etc/passwd文件然后通过pwconv命令转换到/etc/shadow文件,执行pwunconv命令可观察到转换前效果,会观察到/etc/shadow文件神奇的消失掉了,而/etc/passwd文件中原来打xx的地方变成了真正的加密密码。
     
    其实,用户能更改密码真正的秘密不在于文件的权限,而在于更改密码的命令passwd 。
    -rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd
    passwd命令有一个特殊的权限标记s ,存在于文件所有者的权限位上。这是一类特殊的权限SetUID ,可以这样来理解它:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然灵魂附体了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(不要忘记root这个家伙是superuser什么事都可以干),命令执行完成后该身份也随之消失。
     
    可以试验用root身份修改passwd命令权限去掉SetUID :
    chmod u-s /usr/bin/passwd
    再尝试以普通用户身份登录后修改密码,就会发现提示:
    passwd
    Changing password for user samlee.
    Changing password for samlee
    (current) UNIX password:
    passwd: Authentication token manipulation error
    普通用户无法修改密码,所以只要能够想明白为什么普通用户可以更改密码就可以大概了解SetUID权限的作用。
     
  • 相关阅读:
    HPU第二次个人训练
    2019CCPC江西省赛
    CodeForces-913C 派对柠檬水
    [Codeforces Round #737 (Div. 2)] C Moamen and XOR (T1 D1
    E-Tree Xor_2021牛客暑期多校训练营4
    Educational Codeforces Round 107 (Rated for Div. 2) E Colorings and Dominoes
    状压dp 练习
    权值线段树模板(自用)
    Planar Reflections
    Codeforces Round #688 (Div. 2) D Checkpoints
  • 原文地址:https://www.cnblogs.com/bonelee/p/12924884.html
Copyright © 2011-2022 走看看