在Linux上运行setuid脚本中的$ ORIGIN链接的二进制文件
我使用suidperl来运行一些需要root权限的程序。 但是,运行时链接程序不会扩展包含$ ORIGIN条目的库path,所以我要运行的程序(来自java的jstack)将不会运行。 更多信息在这里 build议大量使用$ ORIGIN有一个例外。 运行时链接程序不会像$ ORIGIN那样为安全(setuid)应用程序扩展令牌。 在绝大多数情况下这不应该是一个问题。 我的程序看起来像这样: #!/usr/bin/perl $ENV{PATH} = "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.6.0_12/bin:/root/bin"; $ENV{JAVA_HOME} = "/usr/java/jdk1.6.0_12"; open(FILE, '/var/run/kil.pid'); $pid = <FILE>; close(FILE); chomp($pid); if ($pid =~ /^(\d+)/) { $pid = $1; } else { die 'nopid'; } system( "/usr/java/jdk1.6.0_12/bin/jstack", "$pid"); 有没有办法以某种方式分离subprocess,以便链接程序能够正常工作。