为何sudo会接受哈希后的密码?
为何sudo会接受哈希后的密码?
哈哈,这个操作看起来超离谱对吧?其实这是BusyBox自带的sudo工具的一个特殊“简化实现”导致的!
咱们来拆解一下:标准的sudo验证密码时,会把你输入的明文密码用和/etc/shadow里相同的哈希算法(比如这里的SHA-256,从$5$能看出来)加密,然后再和shadow里的哈希值比对。但BusyBox为了极致精简体积,直接跳过了哈希计算这一步——它把你输入的内容直接和/etc/shadow里的哈希字符串做字面量对比。
对应你操作里的情况:
- 当你输入明文"user"时,这个字符串和shadow里的哈希值
$5$7AAMbV/R$xbGLljZDpzFCy6ReMyC1er53lFJgqRCgvZJnGrc7Q9A完全不一样,所以验证失败; - 当你直接粘贴这个哈希值时,两者完全匹配,自然就通过了sudo的验证。
这种实现虽然省空间,但也有明显的安全问题——比如只要能读取/etc/shadow的人,就能直接用哈希值作为密码sudo,不过在BusyBox的目标场景(比如嵌入式系统)里,可能这种权衡是被接受的。
给你再还原下你的操作过程,方便对照:
$ whoami user $ su $ cat /etc/shadow root:::::::: daemon:*::::::: bin:*::::::: sys:*::::::: sync:*::::::: mail:*::::::: www-data:*::::::: operator:*::::::: nobody:*::::::: sshd:*::::::: user:$5$7AAMbV/R$xbGLljZDpzFCy6ReMyC1er53lFJgqRCgvZJnGrc7Q9A::::::: $ su user $ sudo ls -la Password: <-- 输入"user" Sorry, try again. Password: <-- 粘贴上面的哈希值 total 12 drwxr-xr-x 2 user user 4096 Jan 1 00:00 . drwxr-xr-x 3 root root 4096 Aug 24 2024 .. -rw------- 1 user user 156 Jan 1 01:05 .ash_history
备注:内容来源于stack exchange,提问作者zachm0
相关产品推荐
相关产品推荐

