我想通过我的一个C恶魔执行我的一个sudo命令。
我在C代码中使用命令 系统(echo MYPASSWORD | sudo -v -S); 。
当我执行恶魔时它运行正常但是当我从终端退出时它失败并返回值为256。
请建议我在后端运行进程时传递密码的其他方法。
答案 0 :(得分:0)
另一种选择是在没有密码的情况下执行sudo命令。为此,您可以使用自己喜欢的编辑器打开文件/etc/sudoers
,并在最后添加此行。请记住使用用户名更改您的姓名。
yourname ALL = (ALL) NOPASSWD: ALL
答案 1 :(得分:0)
某些SUDO版本使用open(“/ dev / tty”)来确保无法以这种方式发送密码。您可以执行以下操作来避免这种情况:
int pid=fork();
int ptm=open("/dev/ptmx"....);
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(...);
当所有ttys都关闭时,调用setsid()并打开一个新的tty(这里是/ dev / ptsn),然后新的tty成为进程的/ dev / tty。这意味着:sudo将从伪终端读取密码。