如何在C/C++程序中使用执行sudo命令

How to execute a sudo command with in a C/C++ Program?

本文关键字:执行 sudo 命令 程序 C++      更新时间:2023-10-16

我想通过我的一个C恶魔来执行我的一条sudo命令。

我在C代码中使用命令system(echo MYPASSWORD | sudo -v -S);

当我处决恶魔时,它运行良好。然而,当我从终端退出时,它失败了,返回值为256。

当进程在后台运行时,请向我建议一些其他方式来传递密码。

一些SUDO版本使用open(/dev/tty)来确保密码不能以这种方式发送。你可以做以下事情来避免这种情况:

int ptm=open("/dev/ptmx"....);
int pid=fork();
if(!pid)
{
    close(0);
    close(1);
    close(2);
    setsid();
    unlockpt(...); grantpt(...);
    pts=open(ptsname...);
    execl(getenv("SHELL"),"sh","-c","sudo any_command",NULL);
    exit(1);
}
// now the ptm file handle is used to send data
// to the process and to receive output from the process
waitpid(...);

当所有tty都关闭时,调用setsid()并打开一个新的tty(这里是/dev/ptsn),然后新的tti就变成了进程的/dev/tty。这意味着:sudo将从伪终端读取密码。

编辑

我刚刚修复了示例中的一个错误:open("/dev/ptmx" ...)应该在fork()之前调用。

另一个选项是在没有密码的情况下执行sudo命令。要做到这一点,你可以用你喜欢的编辑器打开文件/etc/sudoers,并在末尾添加此行。记住用用户名更改您的姓名。

yourname ALL = (ALL) NOPASSWD: ALL