【发布时间】:2010-02-16 18:21:35
【问题描述】:
我正在尝试做安全的事情,并且有一个程序需要以 root 身份运行以在不需要它们时放弃其权限。如果我 chmod 我的二进制文件带有 SUID 位,这很好用,并使其属于 root,因为现在我有 UID = 某个用户,并且 EUID = root,所以我可以使用 seteuid(0) 和 seteuid(getuid()) 分别提高并删除管理员权限。
但是如果我使用sudo 而不是设置SUID,那么UID == EUID == 0,所以调用seteuid(getuid()) 不会有任何效果。而且我不能只是将UID 更改为某个随机用户的某个值,因为setuid() 手册页明确指出,如果从以root 身份运行的程序调用它,则永远失去特权,没有希望让他们回来。
那么,如何让我的程序在使用sudo 运行时暂时失去其权限?
【问题讨论】:
-
您需要返回运行
sudo的用户的UID,还是只返回一个随机的、权限较低的用户? -
我会选择
nobody。但如果你知道获取 sudo 调用者的简单方法,我很感兴趣。 -
嗯,很简单,只需
getenv("SUDO_UID")。
标签: c linux security root setuid