お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2012-09-15 22:24:12

oosamuuy
メンバ
登録日: 2009-03-09

postfixのaliasesの実行権

お世話になります。
postfixとdovecotを設定して、メールサーバを立てています。今現在aliasesはメールの転送ぐらいにしか使っていませんでしたが、aliasesからパイプでcgiの起動などをしたいと思っています。
簡単なテストで/tmp内のファイルに書き込むとかはできるのですが、ユーザーのホームディレクリ内などのディレクトリ内のテキストに書き込むコマンドを発行したりするとパーミッションのエラーで実行できませんでした。
やっていることはものすごく簡単で、
info:    "| echo hoge >> /tmp/test.txt"
みたいな感じです。[email protected]にメールを送信してhogeを書き込むだけです。これは成功したのですが、
info:    "| echo hoge >> /home/user/test.txt"
はエラーになってしまいます。
パーミミッションの設定は、text.txt[777]にして、その上のディレクトリも777にしてみたのですが駄目でした。
aliases内のコマンドが実行される際のユーザーはどのユーザーなのでしょうか?postfixなのかな…とは思っているのですが、今のところどのログを見て良いのかもわからなかったりします。

詳しい方いましたらご教授ください。
よろしくお願いいたします。

オフライン

 

#2 2012-09-15 23:34:32

epii
メンバ
登録日: 2008-12-11

Re: postfixのaliasesの実行権

test: "|id >/tmp/mail.log"
などとしてみたところ、ユーザとグループは nobody, nogroup で実行されているようです。
(ファイル所有者もそうなっていました)

また当方の環境ではホームディレクトリ以下への書き込みも問題なくできました。
パーミッションが正しく設定されているか、もう一度確認してみてください。

オフライン

 

#3 2012-09-16 01:24:54

oosamuuy
メンバ
登録日: 2009-03-09

Re: postfixのaliasesの実行権

epii による投稿:

test: "|id >/tmp/mail.log"
などとしてみたところ、ユーザとグループは nobody, nogroup で実行されているようです。
(ファイル所有者もそうなっていました)

また当方の環境ではホームディレクトリ以下への書き込みも問題なくできました。
パーミッションが正しく設定されているか、もう一度確認してみてください。

ありがとうございます。
すみません。ユーザーとグループはどこで確認したらよいでしょうか?
またパーミッション確認してみたところ、ちょこちょこおかしいところがあったのですが、今一度調整して正しくなったと自分では思っているのですが、

コード:

home root:[755]
  info info:[755]
    cgi  info:[777]
      test.php info:[755]
      test.txt  info:[666]

という風に設定しています。
カレントのディレクトリで、php ./test.phpも正常に起動してtest.txtに書き込み可能です。
aliasesでは、

コード:

info: "| /usr/bin/php /home/info/cgi/test.php"

と設定しています。
phpは644でも実行可能みたいです。カレントディレクトリでの手動実行では、
php ./test.php
でも実行できましたが、aliasesには一応フルパスで書いています。このフルパスでの実行もコンソール上で手動で実行してもうまくいっています。
実行したユーザーはrootとinfoの両方でやってみました。
これらのパーミッションで何か間違っているところはあるでしょうか?

オフライン

 

#4 2012-09-16 21:48:15

oosamuuy
メンバ
登録日: 2009-03-09

Re: postfixのaliasesの実行権

>epiiさん
epiiさんの返信に確信をもちつつ、悪銭苦闘した挙句、やっと原因がわかりました。とても情けない結果でした。
aliasesに記載したパイプ処理のコマンドは、全部フルパスで書かないと駄目なんですね。あんまり頻繁にやる処理じゃないのですっかり忘れていましたが、かつてcronから何らかの処理をする際にも同じような経験が1年前ぐらいにありました。
phpの中身は、テストように日付と時間だけをスタンプするもので、

コード:

$epock = time();
$date = date('Y.m.d A H:i.s',$epock);
$output = shell_exec('echo '.$date.' >> test.txt');

というような内容だったのですが、3行目の部分はフルパスじゃないと駄目ですね。

コード:

$output = shell_exec('echo '.$date.' >> /home/info/cgi/test.txt');

かなり当たり前の話しだったのですが、ここ2日休日を潰してしまいました。。。とほほ。
最後の部分だけは見逃しておりました。aliasesのある場所からコマンド実行してみて、発見しました。

オフライン

 

Board footer

Powered by FluxBB