• 締切済み

sendmail使用し、メールが送られた時にPerl実行するようにaliasesファイルを修正したが・・・

こんにちは。 特定のアカウントにメールが送られた時に Perlが実行されるような実装をしていますが、うまく処理されていないようです。 aliases ファイルに、 aaa: "|/usr/local/bin/test.pl" と加えました。 test.plには、ファイルに文字列を記述するだけの処理になってます。 aaaにメールを送ったのですが、test.plが処理されてません。 perl test.pl とプロンプトで実行すると、正しく処理されているので test.plの記述が悪いわけではなさそうです。 aliasesファイルの記述が悪いのかと思いましたが、 仮に記述ミスしたtest.plにしてから aaaにメールを送ってみると メールデーモンが返ってきて、記述ミスした部分をエラー表示してくれます。 test.plは正しく呼び出されているようなのです。 これ以上、何が悪くて、どうすればこれ以上原因を判明することができるのか まったくわかりません。 どなたか心当たりのある方、ぜひともご教授ください。 よろしくお願い致します。

  • Perl
  • 回答数2
  • ありがとう数2

みんなの回答

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

sendmailがsmrsh機能を有効にしているか確認してください。 有効になっている場合、smrshで許可されていないプログラムは sendmailから実行できなくなっています。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

OSの種類とか、sendmailのバージョンとか、肝心なことが 何も書かれていないので適当にアドバイスしますが、 smrshの設定に問題は無いですか?

majikaru
質問者

お礼

ご返答ありがとうございます。 諸事情により、自分はサーバー管理者ではなく 管理者はまた別にいるので、細かい部分はよくわからないのです。 わかる範囲だけ。 OSはRedhat7.3です。 smrshを使用しているか・設定に問題がないか、自分から確認の仕方がよくわからないのです。 /etc/smrsh にコマンドがあると思うのですが、 現在使用しているフォルダを確認すると /smrshの中は空っぽでした。 どのようになっていると設定に問題が無いのでしょうか? 重ねての質問で申し訳ないですが、 どうぞよろしくお願い致します。

関連するQ&A

  • /etc/aliasesに設定した、sendmailからのプログラム処理はどのアカウントで行われる?

    こんにちは。 タイトルの通りですが、 /etc/aliasesに設定した、sendmailに登録されたメールアカウントに メールが届くと設定したPerlスクリプトが実行されるようにしました。 mail_address: "|/aaa/aaa.pl" (aaa.plはテキストファイルに文字列を記入するだけ。 パスは適当ですが、実際にはあっています) こちらからaaa.plが処理されても、 ある特定のフォルダ(/bbb/test.txt)のテキストファイルに対して 文字列が書き込まれなくて困っています。 そのプログラム自体は正しく動作しています。 ここで例をあげているtest.txtのパーミッションは777にしてあります。 しかし、そのフォルダ/bbbのパーミッションは770になってまして、 これが書込みをさせない原因なのかな?と。 別のフォルダにあるtest.txt(そのフォルダのパーミッションは775)は 正常に動作するので間違いないとは思います。 /etc/aliasesに設定した、sendmailから起動させる処理の アカウントがなんなのかよくわからないのです。 おそらくここでいう「その他」扱いになっているとは思うのですが、 それはそういうものなのでしょうか? /etc/aliasesはrootで設定するため、そこで設定した処理は rootに近いアカウントで起動されるものだと思っていたのですが…。 ちょっとわかりずらい文章で申し訳ないですが、 どなたかぜひともご教授ください。

  • テキストファイルに書き込めない(ファイルの所有者と実行者の違いか?)

    テキストファイルにログを書き込む以下の処理があります。 aaa.pl -------------------- open Log,">>aaa.txt"; print Log 'test'; close Log; Web上(アパッチ)からこのaaa.plを実行すると 正常に処理されて、aaa.txtに書き込まれます。 (aaa.txtのオーナーはwww。属性は644) それとは別に、/etc/aliasesに 特定のメールアカウントにメールが送られた時に このaaa.plが実行されるように設定しているのですが mail_address: "|/ccc/aaa.pl" (パスは適当ですが、実際にはあっています) こちらからaaa.plが処理させても、 aaa.txtに文字列が書き込まれなくて困っています。 open Log,">>aaa.txt"; chmod 666,"aaa.txt"; ... とPerl側でパーミッションを変更させようとしても うまく変更されていません。処理もされません。 おそらくaliasesに設定したPerlの実行権限者が ファイルの所有者(この場合www)と異なる為 書き込みもchmodもうまくいかないと思うのです。 aliasesで実行させるアカウントは いったいどのようなアカウントなのでしょうか(binユーザーとか?) また、これを回避するにはどのようにすればよろしいでしょうか? どなたかご存知の方、どうぞよろしくお願い致します。

    • ベストアンサー
    • Perl
  • Postfixでメールを受信したらPerlスクリプトを実行したい

    Solaris10で構築したサーバにて、ユーザー宛のメールを受信したら Perlで記述したスクリプトを実行したい為、下に記載の手順1及び2の 方法で受信メールを渡すパイプを記述したのですがスクリプトが実行されませんでした。 手順1,2共に他のメールアドレスへ転送させた場合、メールの転送は正常に行われました。 メールを受信したらPerlスクリプトを実行するには、どのように設定すればよいのでしょうか? main.cfやmaster.cfに更なる設定の記述が必要なのでしょうか? 主な環境は下記の様になっているのですが不足がありましたら御指摘下さい。 申し訳ありませんがよろしくお願いします。 【手順1】~/.forwardによるスクリプト起動     (1)~/.forwardに、下記の様な記述をしましたがスクリプト起動せず。 (.forwardの記述)        (パターン1) \username,"|/home/username/test.pl"        (パターン2) "|/home/username/test.pl"        (パターン3) |"/home/username/test.pl"        (パターン4) "|/usr/local/bin/perl /home/username/test.pl"        ※下記のような転送は処理されました         \username,username@test.ne.jp 【手順2】main.cf修正によるスクリプト起動     (1)/usr/local/etc/postfix/main.cfに下記行を作成       alias_maps = hash:/usr/local/etc/postfix/aliases,hash:/usr/local/etc/postfix/usr_alias       (usr_aliasの記述) username: :include:/home/username/include       (includeの記述) |"/home/username/test.pl"               他に上記.forwardの記述の4パターンを試しましたが全てスクリプト起動せずでした。 【サーバ環境】 OS:Solaris10(Sparc) MTA:postfix-2.5.3 【test.plの内容】 #!/usr/local/bin/perl open(DATA_FILE, "> test_log.txt"); print DATA_FILE "Test_OK!!!\n"; close(DATA_FILE);     ※備考       ・保存場所:/home/username/test.pl       ・パーミション:test.plと/home/username共に777 (オーナはusername) 【main.cfについて】 念のために allow_mail_to_files = alias,forward,include allow_mail_to_commands = alias,forward,include の記述を追加しています。

  • aliasesファイルを用いてウイルスメールがばら撒かれているようなのですが。

    Redhat linux9、postfixを用いてメールサーバー(仮ドメイン:aaa.bbb.ccc)を動かしています。最近info@aaa.bbb.cccやadmin@aaa.bbb.cccなどの差出人でaliasesファイルに記述してあるメーリングリスト(group1,group2, etc)にウィルスメールが送られてきます。 group1,group2,group3などのaliasesファイルに記述してある順序でメールが同時刻に一斉に送られます。 これはサーバーが侵入され、不正プログラムか何かでaliasesファイルを利用してウィルスメールをばら撒いているのでしょうか。何を調べればよろしいでしょうか。

  • Perlにて、sendmailを使用するがエラー…

    はじめまして、初めて質問させて頂きます、ぷりんと申します。 早速ですが、質問です。 私はPerlにてメールフォームの作成に勤しんでいるのですが、どうしても500エラーが出てしまいます。 サーバーはレンタルサーバーのロリポップを使用しております。 私が不思議に思うのは、メール自体は送信されますが、ページには500エラーと表示されてしまうことです。 以下は実際のコードです。(全文)(一部変更有(メール宛先部分)) #!/usr/bin/perl require "../mimew.pl"; require "../jcode.pl"; $sendmail = '/usr/lib/sendmail'; $to = "hogemoge\@gmail.com"; $from = "test\@test.tet"; $subject = "題"; $body = "メール本文"; # 本文をJISコードへ変換 &jcode'convert(*body,'jis'); # 標題をJISコードへ変換してMIME エンコード &jcode'convert(*subject,'jis'); $subject = mimeencode($subject); open(MAIL,"| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "\n"; print MAIL "$body\n"; close(MAIL); exit(0); と記述し、こちらのcgiファイルはパーミッション700(ロリポップさんが700で動くので)、アスキーコードでアップロード。 mimew.plとjcode.plどちらも一つ上のフォルダにあります。(パーミッションは644) 以上です。 当方初心者ですので、いろいろ試したのですが、どちらが悪いのか見当つきません・・。 簡単な検索をしましたが、Syntax Errorは見つかりませんでした。 また、いろいろなサイトを参考にしたり、検索したりしましたが、問題解決には至りませんでした。 おそらく初歩的なミスだとは思います・・。 こちらの問題に関してお詳しい方、どうかお手を差し伸べていただけないでしょうか。 何卒、よろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • Perl から csh 実行

    やまとです。 いつもありがとうございます。 Perl + csh を同時(?)に実行する方法を教えてください。 OSはSunです。 具体的にどのような処理を行いたいか簡単に説明しますと。 1.Perlでcshを実行(system関数?)し、cshで環境変数をセット(source)する。 2.cshで環境変数をセットしたら、ファイルを出力する処理が行われます。 3.Perlでcshによって出力されたファイルの内容を画面に表示します。 以下ソースを掲載します。(抜粋して) ================================================== = Perl ( test_perl.pl ) $data = "ABC"; $ret = system(`test_csh.sh $data`); ・ ・ ファイル(test.log)を開き、読込、画面に表示します(まだ作成してません。) ================================================== = Csh ( test_csh.sh ) source test_source.sh echo $1 > test.log ================================================== = test_source.sh setenv CLASSPATH .:/aaa・・・・・・ ↑ PATHの設定を行ってます。 ================================================== 画面に、「ABC」と出力させたいのです。 Perlからcshが実行されていないように思えるのですが、 Perlのsystem関数の使い方が誤っているのでしょうか? それとも、ClassPath等の設定をしなければならないのでしょうか? ちなみにコマンドから、 # test_csh.sh ABC と実行しますと、ファイルが出力され、かつ、sourceも実行されています。 Perlから実行する方法を教えてください。 説明が不十分であれば、補足いたしますのでご指摘ください。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • メールの受信をトリガーとしてperlを起動させたい

    メールの受信をトリガーとしてperlを起動させたいと考えています。 vine linux 4.0 で MTAはpostfix 2.2.10 のみが入っています。 /etc/postfix/aliases に root: "|/usr/bin/perl /root/test.cgi" と書いて postfix reload した後 root 宛にメールをすると、メール自体は普通に届きますが perlは起動しません。 test.cgi 自体は直接叩いてやると、ちゃんと動いています。 main.cf には alias_maps = hash:/etc/postfix/aliases と記述してあります。 メール受信で perlを起動させるにはどうしたらよいのでしょうか?

  • phpで外部ファイルの実行方法を教えて下さい。

    現在、linux、phpでアプリケーションの開発をしているのですが、まだまだ素人で、外部ファイルの実行がうまくできません。 どなたかご教授していただけますでしょうか。 【やりたいこと】 ・phpファイルで同じサーバー内にあるphpファイルを実行する。 以前は実行するファイルがperlであり、phpファイルで、 exec("perl /var/www/test/encoder/test.pl"); を記述することで、うまくtest.plが実行されていました。 今回、test.plをphpに書き直し、tet.phpを実行したいのですが、 なかなかうまくいきません。 exec、systemなどを色々試み、ネットでも調べてみたのですがうまくいかないので、どなたかご教授いただけますでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • perl リモートでコマンド実行結果取得

    perl 初心者です。 Perlでリモートログイン後grep結果を取得する方法で分からないことがあり質問しました。 rootユーザで実行するPPP.plスクリプト内で、他のサーバにsshでログイン後grepの結果を取得しようと考えていますが、rootユーザでPPP.plを実行しスクリプト内でsshを実行するとパスワードを聞かれてしまいます。 そこで、他のユーザAAAでPPP.plを実行し、sshを実行するとパスワードは聞かれない設定になっているそうです。(詳細は分かりませんが) そこで、実現方法について下記のように考えていますが、他の方法、sshのオプション等他の考えが、あれば教えてください。確認する環境がなくて実行していませんのであっているかも分かりません。 PPP.pl実行サーバ:server1 ssh先のサーバ:server2 PPP.plの実行ユーザ:ROOT パスワードが聞かれないserver1のユーザ:AAA server2のログインユーザ:AAA ※PPP.plの実行ユーザはrootから変更はできません --------------------------------------- #ユーザAAAに変更 system("su - AAA"); #server2のgrep結果取得 my @rtn_grep = `ssh -l AAA server2 grep test /var/log/msg.log`; if($? != 0){ exit; } ## grep結果を参照 XXXX #rootユーザに戻る system("exit"); -------------------------------- 以上です。宜しくお願い致します。

    • ベストアンサー
    • Perl