sendmailエイリアスファイルで設定されたスクリプトをこの電子メールの受信者として実行するにはどうすればよいですか?

sendmailエイリアスファイルで設定されたスクリプトをこの電子メールの受信者として実行するにはどうすればよいですか?

Sendmail 8.16を実行するFreeBSDシステムがあります。私は複数のシステムユーザー(テストボット)を持っており、robot1それらを電子メールで制御したいと思います。まず、彼らはできるはずです。robot2robot3受け取るメール。だから私は次のような行を持っています/etc/mail/aliases

robot1: "| /usr/local/project/script"
robot2: "| /usr/local/project/script"
robot3: "| /usr/local/project/script"

これらのボットは電子メールをまったく同じ方法で処理する必要があるため、すべて同じスクリプトを使用します。

問題は、sendmailが常に偽のuid 26(「mailnull」特殊ユーザーなど)を使用して3人の受信者すべてに対してスクリプトを呼び出すことです。外部スクリプトを開始する前に、sendmailデーモンがフォークで有効なgid / uidをダウングレードしているようです。これは完全に合理的ですが、次のようになります。

問題は次のとおりです。その受信者ユーザーとしてスクリプトを実行するようにsendmailを取得する方法つまり、robot1メッセージがの場合robot1@localhostrobot2メッセージがの場合、robot2@localhostおよびrobot3メッセージはrobot3@localhost?についての時です。

確実な解決策は3つのスクリプトコピーを持ち、各コピーに一意のユーザーがいることを確認し、各ロボットユーザーのエイリアスをスクリプトコピーに追加することです。私はこれがトリックを実行する必要があると思いますが、少し醜いです。もしそうなら、より良い、エレガントなソリューションがあるかどうか疑問に思います。

答え1

私は単にを使用しますsudo

デフォルトインストールでは、sendmailはユーザーとしてエイリアススクリプトを実行しますmailnullmailnull人の盗難が許可されsudoますそのユーザーのみその特定のスクリプトを実行する目的でのみ

最初に行ったroot後、次を実行して編集visudoします。

mailnull ALL = (robot1) NOPASSWD: /usr/local/project/script
mailnull ALL = (robot2) NOPASSWD: /usr/local/project/script
mailnull ALL = (robot3) NOPASSWD: /usr/local/project/script

次に、コンテンツを/etc/mail/aliases次のように編集します。

robot1: "|sudo -u robot1 /usr/local/project/script"
robot2: "|sudo -u robot2 /usr/local/project/script"
robot3: "|sudo -u robot3 /usr/local/project/script"

そして

cd /etc/mail
make

関連情報