Linux下密码通过 /etc/passwd 文件进行管理,该文件只有root用户有rw权限,普通用户是通过带有Setuid的passwd程序对自己的密码进行修改的,setuid可能将用户的权限提升到root,既然只是修改/etc/passwd文件,而普通用户在运行passwd程序时权限已提升至root,为何普通用户不能更改其它用户的密码,而root用户就可以呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为
passwd在修改密码之前会查看当前用户是否匹配要修改的用户,否则就不会往下执行。会显示“您不能查看或更改xxx的密码信息。”之类的提示。这个提示是
passwd修改密码之前的判断,而不是在修改shadow的时候系统提示的权限不足。而对于普通用户是没有办法修改
passwd的源码的(只有二进制文件才能设置setuid),因为没有权限,所以没办法修改passwd的执行流程,所以没办法绕过passwd对用户的校验,因此不能够修改其他人的密码。