Necoです。 sendmail のお話。qmail は知りません。 In Message-Id <200008281345.WAA20454 _at_ mx2.people.or.jp> hiroaki _at_ people.or.jp (SAKAI Hiroaki) さんwrites: > さかいです.はずしてたらごめんなさい. > >> "| cat > ~/qqq.txt" > sendmail がプログラムを起動するときには,メール配送先のユーザの権限ではなく, > sendmail のプロセスのユーザの権限(おそらく root か daemon)で起動されるので, > ~/ は /root になっているのではないでしょうか? > そもそも /etc/aliases や .forward で ~/ は使えるのかどうか,疑問です. > (sendmail はシェルを起動してくれるのだろうか? 誰かしってます?) /etc/sendmail.cf の記述によります。この中で各種 mailer の 指定があって外部コマンド用の mailer は「prog」mailer と呼ば れます。 「Mprog」という mailer 指定行に「P=/bin/sh」とあれば、その 環境では sendmail は /bin/sh を起動してくれます。これは安全 に fork()/execve() されます。 ですから、alias や .forward で ~ の展開が可能かどうかはこ こで指定した shell に依存します。Linux では /bin/sh の正体は bash なので展開可能です。 Linux 以外の platform でも「P=/usr/local/bin/bash」等と設 定しておけば ~ の展開を含め bash の文法が有効ですが、可搬性 に欠けるので余りお奨め出来ません。 また、この prog mailer 起動時には setuid()/seteuid() で実 効 user の切替が行なわれるので、root/daemon 権限で実行された りはしません。 setuid() しないまま prog mailer の起動が可能であれば、一般 user が自分の .forward を書換えて root を乗っ取ることが出来 てしまうので、そんな危険な実装にはなっていません。 ですから、展開後の ~ は宛先 user の $HOME になっている筈で、 決して /root に展開されたりはしません。 # とは言え、/bin/sh が bash である環境など Linux くらいの #ものなので、~ ではなく $HOME を用いる癖をつけておいた方が #後々困らないでしょう。勿論 full path 指定なら尚良し。 > (sendmail は daemon ユーザで動いているのだが,daemon ユーザは > /usr/local/bin に実行パスが通ってなかったので,nkf や sample.pl が > 見つからなかったのが原因) PATH 指定をどの初期化 file で行なっていますか?例えば bash の場合、~/.bash_profile(または ~/.bash_login, ~/.profile) は login shell として起動された時だけ有効です。 また ~/.bashrc は interactive shell として起動された時のみ 有効ですので、端末すら持たない prog mailer として起動された 場合はやはり無効です。 その場合、bash は compile 時に埋込まれた static な search path を用いますので、大抵の場合は /usr/local/bin は含まれな いでしょう。 /usr/local/bin に限らず、.forward は full path で書く癖を つけておいた方が幸せだと思います。 白井 隆 (as Neco)
References:
- [linux-users:73014] Re: メールがプログラムに渡せないSAKAI Hiroaki
- Prev by Subject: [linux-users:73027] Re: Re:他のパーティションにあるLinuxを起動するには
- Next by Subject: [linux-users:73029] CRCエラー
- Previous by thread: [linux-users:73014] Re: メールがプログラムに渡せない
- Next by thread: [linux-users:73015] Re: メールがプログラムに渡せない
- Indexes:[Main][Thread]