2

sendmailのmqueueフォルダーからデータを削除するPerlスクリプトを使用しています。

そのsetuidPerlスクリプトを実行してユーザーから実行しようとすると、次のメッセージがスローされます。

Insecure dependency in chdir while running setuid at /file/find

それを解決し、ルート特権を使用してスクリプトを正常に実行するにはどうすればよいですか?

!/usr/bin/perl

use strict;

my $qtool = "/usr/local/bin/qtool.pl";
my $mqueue_directory = "/var/spool/mqueue";
my $messages_removed = 0;

use File::Find;
# Recursively find all files and directories in $mqueue_directory
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 $double_bounce = 0;
      open (QF_FILE, $_);
      while(<QF_FILE>) {
         $deferred = 1 if ( /^MDeferred/ );
         $from_postmaster = 1 if ( /^S<>$/ );
         $delivery_failure = 1 if \
            ( /^H\?\?Subject: DELIVERY FAILURE: (User|Recipient)/ );
         if ( $deferred && $from_postmaster && $delivery_failure ) {
            $double_bounce = 1;
            last;
         }
      }
      close (QF_FILE);
      if ($double_bounce) {
         print "Removing $queue_id...\n";
         system "$qtool", "-d", $qf_file;
         $messages_removed++;
      }
   }
}

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

2 に答える 2

4

「安全でない依存関係」はTaint問題です: http://perldoc.perl.org/perlsec.html

スクリプト setuid を実行したため、汚染が強制されています。untaintFile::Find の %option キーとして指定する必要があります 。

http://metacpan.org/pod/File::Find

my %options = (
    wanted => \&wanted,
    untaint => 1
);

find(\%options, $mqueue_directory);

untaint_patternFile::Find の PODも参照してください。

于 2012-05-10T09:35:20.130 に答える
-3

プログラム ラッパーを作成する必要があります。ほとんどの UNIX システムでは、スクリプトは SetUID ビットを介して root 権限を取得できません。ここでいくつかの有用な例を見つけることができますhttp://www.tuxation.com/setuid-on-shell-scripts.html

于 2012-05-10T11:33:11.060 に答える