gpt4 book ai didi

c - 在 C 程序中实现 sudo su

转载 作者:行者123 更新时间:2023-11-30 20:08:13 24 4
gpt4 key购买 nike

我编写了一个由父进程使用的程序。我无法控制父进程、其权限以及它如何运行我的进程。

我的程序运行一个需要root权限的设备,而父进程没有相应的权限。

尝试使用setuid(0);设置gid(0);在我的程序中。另外,尝试添加进程的用户以使用 sudo。此外,我运行以下解决方案。不起作用

代码

if(dry_run == 0)
{
PRINT("reached here\n");
ret = ioctl((int64_t)device, NVME_IOCTL, &usr_io_cmd);
}

if (ret != 0 ) {
PRINT("ERROR : error %x returned\n", ret);
PRINT( "%s\n",strerror(errno) );

PRINT 打印到日志文件。

日志文件

[2019-09-05 14:27:25]到达这里

[2019-09-05 14:27:25] 错误:返回错误 ffffffff

[2019-09-05 14:27:25] 不允许操作

我的程序能做什么?如何在我的程序中实现“sudo su”?有替代解决方案吗?

编辑:为什么这个问题被锁定?我尝试了下面的解决方案,但没有成功。

最佳答案

您需要做的是让您的程序具有 setuid or setgid 文件权限中设置的位。这将导致正在运行的进程具有程序所有者的有效用户 ID (setuid) 或程序组的有效 gid (gid)。然后,您可以以这些身份执行操作,或者成为具有 setuidsetgid 的身份。

sudo su 是一种 cargo 崇拜的做事方式 - 两者都是或多或少做同样事情的程序 - 提升非特权调用者的权限。

即要让程序 foo 由 root 拥有并设置了 setuid 位,您需要执行以下操作:

gcc foo.c -o foo
sudo chown root:root foo
sudo chmod 4755 foo

关于c - 在 C 程序中实现 sudo su,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com