如何在C/C++程序中使用执行sudo命令
How to execute a sudo command with in a C/C++ Program?
我想通过我的一个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
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- 在 Eclipse CDT 中执行 sudo make install
- 如何在没有sudo的情况下执行python OpenCV程序
- 如何在C/C++程序中使用执行sudo命令
- 如何使用 execvp 函数执行 bash 的 sudo 命令?
- 在Qt QProcess中执行sudo命令