Answers:
您无法更改其他密码,因为该程序不允许您这样做。该程序具有更改其所需密码的系统权限,因为它以身份运行root
,但是该程序经过专门设计,不向用户提供任何获取其使用这些权限的方式。
用户暂时不是root用户,而是受信任的程序以root用户权限运行。显然,只有专门设计用来限制用户只能执行他们应被允许做的事情的程序才可以安全地设置为setuid。
Unix上的早期破解是建立与setuid shell脚本的符号链接并调用该链接-i
。这导致脚本被称为,sh -i
而不是-i
按预期执行脚本,而是启动了一个交互式shell,然后该交互式shell提供了全部功能。有效的用户ID可以用于修改passwd
任何用户或root本身的文件。防止这种情况的最佳方法是使用SELinux来防止信任脚本或程序在SELinux允许其运行的区域之外进行修改。
另一种技术是在重要文件上保留不可变的位,即使root用户也不能修改一组(除了在单用户模式下)
作为超级用户,您可以邀请用户使用密码登录到系统,并以任何用户的身份出现,但正常的特权进程会尽力防止这种情况的发生。
如果您使用某种类型的网络文件系统,则在该文件空间中,root用户将被视为“ nobody”,而不是root,这将使不受信任的计算机加入受信任的网络(例如大学校园)。
仅允许您更改密码,因为set-password程序尽管有权执行任何操作,但它被编程为仅更改密码。它将检查真实的用户ID,以确定要更改的密码。
因为您无法更改您的真实用户ID,所以即使通过调用set-uid程序,该程序也可以使用它来实现安全性。操作系统将安全性放弃给设置的uid根程序。
注意:set uid根程序也可以更改实际用户ID(但这在本用例中没有用)。
警告:设置uid root被认为是有害的(远不理想)。这些天我们应该使用功能(请参阅在gnu / linux和http://man7.org/linux/man-pages/man7/capabilities.7.html 上设置文件权限等的不同方法有哪些)