Ola*_*eni 4 c linux permissions
如何更改我的c程序将自己标识为的用户?
我想要自动调用的命令行工具需要作为特定用户运行,否则将无法运行.
我尝试过使用setuid(0)
但我仍然没有得到预期的结果.
我想模仿的用户不是' root ',而是普通的无特权,无shell用户.我希望能够以用户nobody身份运行登录的二进制文件.我能够使用以下方法将解决方案编写为"root":
su -ls /bin/bash -c /binary
(超级用户)
但是我希望能够实现与用户nobody相同的登录
有什么我想念的吗?
如果任何人都可以通过setuid(0);
加入他们的程序而成为root用户,那么Unix就是Windows.
一些想法:
sudo
为它设置权限并通过sudo运行它.鉴于您提出的非常基本的问题,您甚至不应该尝试编写将以root身份运行的代码,因此我省略了有关如何为程序设置root权限的任何详细信息.
小智 6
要更改当前用户 ID:
首先,使用 查找新的用户 ID getpwnam()
。这将返回 astruct passwd *pw
并且 NULL 值将指示用户不退出。包含执行更改所需的struct
用户 ID ( pw_uid
) 和组 ID ( )。pw_gid
if((pw = getpwnam(userid)) == NULL)
sprintf(error_msg "Userid '%s' does not exist", userid);
然后为新用户设置组id
if (setgid(pw->pw_gid) != 0)
sprintf(error_msg "setgid() to %d failed", pw->pw_gid);
最后,设置新用户的用户id
if (setuid(pw->pw_uid) != 0)
sprintf(error_msg "setuid() to %d failed", pw->pw_uid);
这个过程中的错误恢复是混乱的。setgid()
最简单的方法是在或失败时直接中止setuid()
。如果更改组成功,但更改用户失败,则会出现真正的问题。