我有一个以root身份运行的perl脚本,它监视串行设备并向其发送命令。在apache下,我有另一个perl脚本,它显示了一个用于控制root' root的#i;脚本。
我试图通过sigint和sigusr1来中断来自gui perl脚本的root perl脚本但是不允许进行操作,可能是因为一个是root而另一个不是。
我基本上希望gui能够告诉控制根脚本将一些命令传递给串行设备。
如果我以root身份从cmd行运行gui脚本,它可以成功发出根脚本信号
我不确定从何处开始,有关在不以root身份运行时中断根脚本的方法的建议?呼叫分离"信号"脚本如图所示:
@cmds = ("perl /var/www/signal.cgi", "$perlSerialPID", "test");
if (0 == system(@cmds)) {
# code if the command runs ok
print "system call ok: $?";
} else {
# code if the command fails
print "not ok $?";
}
# try backticks
$output = `perl /var/www/signal.cgi $perlSerialPID test`;
print "<br>:::$output";
signal.cgi:
#!/usr/bin/perl
$pid = $ARGV[0];
$type = $ARGV[1];
if($type eq "test"){
if(kill 0, $pid) {
print "perl-serial $pid running!";
}else{
print "perl-serial $pid gone $!";
}
}elsif($type eq "USR1"){
if(kill USR1, $pid) {
print "perl-serial interrupted";
}else{
print "perl-serial interrupt failed $!";
}
}else{
print "FAILED";
}
答案 0 :(得分:2)
使用named pipes进行IPC。
缺点是您必须改进主脚本以从命名管道读取事件驱动过程。
概念与上述类似(具有相同的缺点),但使用sockets进行沟通。
创建一个单独的“发送信号”脚本,该脚本通过系统调用从您的UI调用,并创建新的脚本SUID并由root拥有 - 在这种情况下,它将以root的权限执行。
下行:对于安全滥用行为来说,成熟非常谨慎。