2012-05-11 12 views
-3

私はrootから実行しているときにこのコードを使用していますが、root権限で "insecure $ ENV {PATH} at line system"というエラーをスローします。 -d $ mqueue_directory * $ queue_id ";"setuidで安全でないENV変数

私のスクリプトは/scripts/deferred.pl

#!/usr/bin/perl 

use strict; 

my $qtool = "/usr/local/bin/qtool.pl"; 
my $mqueue_directory = "/var/spool/mqueue"; 
my $messages_removed = 0; 
my @rf_id; 
my @date; 
my $temp 
my @write_array; 
my $to; 
my $from; 
use Untaint; 
use File::Find; 
# Recursively find all files and directories in $mqueue_directory 
use Untaint; 
find(\&wanted, $mqueue_directory); 

sub wanted { 
    # Is this a qf* file? 
    if (/^qf(\w{14})/) { 
     my $qf_file = $_; 
     my $queue_id = $1; 
     my $deferred = 0; 
     my $from_postmaster = 0; 
     my $delivery_failure = 0; 
     my $junk_mail = 0; 
     open (QF_FILE, $_); 
     while(<QF_FILE>) { 
     $deferred = 1 if (/^MTemporarily/ | /^Mhost map: lookup/ | /^MUser unknown/); 
     $delivery_failure = 1 if \ 
      (/^H\?\?Subject: DELIVERY FAILURE: (User|Recipient)/); 
     if ($deferred && $from_postmaster && $delivery_failure) { 
      $junk_mail = 1; 
        } 
     $temp=$qf_file.':'; 
     if($junk_mail){ 
     while(<QF_FILE>){ 
     chomp; 
     if(/rRFC822;/){ 
     $temp.=subdtr($_,9) 
     } 
     if(/H?D?Date:/){ 
     $temp.=':'.substr($_,10); 
     push @write_array, $temp."\n"; 
     } 
     } 
     } 
     } 
     close (QF_FILE); 
     my $subqueue_id = substr($queue_id,9); 
     if ($junk_mail) { 
     print "Removing $queue_id...\n"; 
     system "perl $qtool -d $mqueue_directory*$queue_id"; 
     $messages_removed++; 
     } 
    } 
} 
open (MYFILE,">/scripts/mail.txt"); 
print MYFILE "@write_array"; 
close (MYFILE); 
$to='[email protected]'; 
$from='[email protected]'; 
$subject='deleted mails'; 

open(MAIL,"|/usr/sbin/sendmail -t"); 
print MAIL "To: $to\n"; 
print MAIL "From: $from\n"; 
print MAIL "Subject: $subject\n\n"; 
print MAIL "@write_array\n"; 
close(MAIL); 

print "\n$messages_removed total \"double bounce\" message(s) removed from "; 
print "mail queue.\n"; 
+0

可能なDuplikateのhttp://stackoverflow.com/questions/10531142/setuid-to-perl-script – dgw

答えて

6

setuidプログラムが自動的に汚染モードで実行するパスです。エラーメッセージのテキストを含めて、すべてperlsecに説明されています。多くの場合、エラーメッセージを検索エンジンに貼り付けると、そのエラーメッセージをすばやく見つけることができます。 Insecure $ENV{ENV} while running with -T switchと表示される場合もあります。

関連する問題