我想这样做,以便 gShutdown 应用程序可以在我不在输入密码时关闭系统。但我在论坛上看到,使用 chmod 更改 linux 命令可能会在多用户系统中导致问题。
有人能解释一下为什么会这样吗?
答案1
在关机进程中添加 setuid 位将允许任何用户 ID 拥有的任何进程以任意延迟关闭或重新启动系统。
虽然可能性不大,但它也可能暴露缓冲区溢出,允许非特权用户执行更多操作。设置 setuid 位后,可能会使用导致命令发生故障的输入来调用该命令,这对攻击者来说是一种有用的方式。
即使您有一个单用户系统,这也可能是一个问题:如果攻击者利用允许他们在您的系统上运行非特权代码的漏洞,那么 setuid 程序可以提供一种获得超级用户权限的方法。
相比之下,桌面使用的 API 提供的操作要有限得多(立即重启、立即关机等),并且仅允许非特权用户在有限的情况下激活它们(用户是活动的本地用户,并且没有其他人登录到系统)。如果您使用的应用程序可以选择使用这些 API,而不是直接调用命令shutdown
,那就更好了。