我正在编写一段 C 代码,它将运行一些sudo
命令输入system("sudo ip route ...")
函数调用。
此调用是在主线程创建的 pthread 中完成的,并且主程序正在执行sudo ./program
启动时。
当我运行该程序时,Ubuntu 提示我输入无人密码:
[sudo] password for nobody:
我也尝试过做system("ip route ...")
直接但它给了我负回报意味着它没有被执行。
我应该在线程中做什么来允许system()
调用以使用sudo
从主程序继承的特权?
您无需执行任何特殊操作即可继承 root 权限sudo
已经给了你。进程通常会自动继承其父进程的特权。原因system(3)
不工作可能是因为你是root(见下文)或者因为你在一个线程上。
话虽如此,不要使用system(3)
。这是因为sudo
通过使用 setuid 来工作,但这并不能很好地配合system()
。因此,使用exec(3)
相反,函数族(除了execlp()
and execvp()
). See man 3 system http://linux.die.net/man/3/system了解更多信息。
现在,与that话虽这么说,不要使用system(3)
or exec(3)
。相反,只需直接调用 C API 来操作 IP 表即可。当您可以简化程序时,为什么要浪费系统资源来生成一两个新进程呢? (不过,此时您已经到了您的问题属于 Stack Overflow 的地步了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)