我有一个Perl CGI程序,应该允许用户从文件系统中选择一些文件,然后通过Rsync发送到远程服务器。所有的HTML都是由Perl脚本生成的,并且我使用查询字符串和临时文件来营造类似于有状态交易的假象。Rsync部分是一个单独的shell脚本,使用文件名作为参数调用(该脚本还发送电子邮件和一堆其他东西,这就是为什么我没有将其移动到Perl脚本中的原因)。我想使用不需要密码的sudo,然后我设置了sudoers以允许apache用户无需密码运行脚本并禁用requiretty,但我仍然在日志中收到关于没有tty的错误。然后我尝试使用su -c scriptname,但也失败了。
总之,使用Perl CGI脚本通过sudo调用Bash脚本是否不好的实践?你如何处理Perl CGI脚本的特权升级?Perl 5.10 on Linux 2.6 Kernel。
相关代码:(LFILE是包含文件系统中所有文件数组索引的文件)
总之,使用Perl CGI脚本通过sudo调用Bash脚本是否不好的实践?你如何处理Perl CGI脚本的特权升级?Perl 5.10 on Linux 2.6 Kernel。
相关代码:(LFILE是包含文件系统中所有文件数组索引的文件)
elsif ( $ENV{QUERY_STRING} =~ 'yes' ) {
my @CMDLINE = qw(/bin/su -c /bin/scriptname.sh);
print $q->start_html;
open('TFILE', '<', "/tmp/LFILE");
print'<ul>';
foreach(<TFILE>) {
$FILES[$_] =~ s/\/.*\///g;
print "Running command @CMDLINE $FILES[$_]";
print $q->h1("Sending File: $FILES[$_]") ; `@CMDLINE $FILES[$_]` or print $q->h1("Problem: $?);