Sendmail 8.16を実行するFreeBSDシステムがあります。私は複数のシステムユーザー(テストボット)を持っており、robot1
それらを電子メールで制御したいと思います。まず、彼らはできるはずです。robot2
robot3
受け取るメール。だから私は次のような行を持っています/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@localhost
、robot2
メッセージがの場合、robot2@localhost
およびrobot3
メッセージはrobot3@localhost
?についての時です。
確実な解決策は3つのスクリプトコピーを持ち、各コピーに一意のユーザーがいることを確認し、各ロボットユーザーのエイリアスをスクリプトコピーに追加することです。私はこれがトリックを実行する必要があると思いますが、少し醜いです。もしそうなら、より良い、エレガントなソリューションがあるかどうか疑問に思います。
答え1
私は単にを使用しますsudo
。
デフォルトインストールでは、sendmailはユーザーとしてエイリアススクリプトを実行しますmailnull
。mailnull
人の盗難が許可され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