C 从程序重新启动linux
这个问题以前有人问过: 然而,没有一个答案对我有效 我的问题是: 我在一个硬件上有一个程序。我可以以root用户身份登录并运行它,没有任何问题。但是,如果我以具有root权限的其他用户身份登录,程序将正常执行,但不会像应该的那样重新启动。它只关闭当前的Telnet会话 要重新启动,我使用了C 从程序重新启动linux,c,linux,reboot,C,Linux,Reboot,这个问题以前有人问过: 然而,没有一个答案对我有效 我的问题是: 我在一个硬件上有一个程序。我可以以root用户身份登录并运行它,没有任何问题。但是,如果我以具有root权限的其他用户身份登录,程序将正常执行,但不会像应该的那样重新启动。它只关闭当前的Telnet会话 要重新启动,我使用了系统(重新启动)。 到目前为止,我已经尝试: sync(); reboot(RB_POWER_OFF); 及 无济于事 (我不确定我是否正确使用了execl。这是我第一次使用它。如果我弄错了,请纠正我) 任何
系统(重新启动)
。
到目前为止,我已经尝试:
sync();
reboot(RB_POWER_OFF);
及
无济于事
(我不确定我是否正确使用了execl
。这是我第一次使用它。如果我弄错了,请纠正我)
任何帮助都将不胜感激
编辑:
如果我作为服务登录,“脚本”将运行。用户可以从列表中选择选项。其中一个选项是运行上述程序
编辑:
还值得一提的是:脚本中的一个选项是重新启动系统。如果从脚本内部调用,它会工作。但我想从程序中调用reboot。首先,以“具有根权限的其他用户”的身份登录到您的系统,,并执行“init 6”,如果系统已重新启动 是:使用系统(“初始6”);在你的程序中
否:您有安全问题,首先必须修复该问题。您为
execl()
提供了一个相对路径。这仅在您的工作目录为/
时有效,而它可能不是。也许可以尝试/sbin/reboot
?拥有root权限的不同用户是什么?我认为这是错误的。但是,正确的答案是将程序设置为root。因此程序总是以根权限运行。请注意此文件的安全问题。@glglglgl抱歉,这是一个打字错误。Corrected@iveqy由于OP使用telnet(!),因此根本不存在安全问题。@iveqy我提供了更多信息。检查我的编辑
execl("/sbin/reboot","reboot",NULL,NULL);
/data/local/sbin # cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
service:54zljpSAe:0:0:root:/root:/data/local/sbin/script