2012-05-10 13 views
2

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

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

それを解決して正常ルートprivelegesでスクリプトを実行する方法:IというPerlスクリプトにsetuidし、ユーザーからそれを実行しようと、それはこのメッセージをスロー

!/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"; 
+1

goldilocksが解決策を提供しました。さて、setuidの実行ファイルを避け、 'sudo'を使用してください。あなたの監査人はあなたのセキュリティを高く評価し、プロセスRUID!= EUIDのためにエスカレートされた権限を取得することを拒否するソフトウェアがあると、驚くことはありません。 – JRFerguson

答えて

4

"安全でない依存関係が" Taintものです:http://perldoc.perl.org/perlsec.html

スクリプトsetuidを実行しているため、Taintが強制されています。ファイルへの%オプションキーとしてuntaintを指定する::検索必要があります。

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

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

find(\%options, $mqueue_directory); 

あなたは、ファイルのためのPODでuntaint_patternを見ても、持っている必要があります::検索します。

+0

おかげで私は私のポスト –

+0

@YagyavalkBhatt編集した ゴルディロックス:大丈夫、私はあまりにも私の編集;) – delicateLatticeworkFever

+0

感謝をゴルディロックス しかし、uは、私は例を追加 –

-3

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

+0

問題はperlがSUIDビットを使用できることですか?あなたがそのことを説明するのは素晴らしい... – DipSwitch

+0

ビルドラッパーは何ですか?その名前は 'sudo'です:Pそれを設定するのは明らかです。 – Znik

関連する問題