[PREVIOUS CHAPTER]
[NEXT CHAPTER]
4 メールサーバの問題
4.1 エラーメールの例
エラーメールが返ってきたら,こんな風になっていると思います。
この
----- The following addresses had permanent fatal errors -----
や
----- Transcript of session follows -----
のあたりをみて、
Quota exceeded
のようなキーワードを探して下さい。
◯ sendmail が返すエラーメールの例
エラーメールのヘッダ
----- The following addresses had permanent fatal errors -----
<rudo@nui.fml.org
----- Transcript of session follows -----
procmail: Quota exceeded while writing "/var/spool/mail/rudo"
550 <rudo@nui.fml.org>... Can't create output
この後に DSN
送った本文などが続く…
4.2 典型的なエラーメール
4.3 Can't locate getopts.pl in @INC at makefml line 104.
perlが正しくインストールされていません。perlをインストールしなおして
ください。
4.4 :include: がうまく動かない場合 (/etc/aliases)
可能性として
○ メールサーバが include 形式をそもそもサポートしていない
そんなことはなく、設定がおかしい
NT なんかだと普通かも(?)
○ include ファイルの場所がセキュリティ的に問題があるためエラー
例えば
・ NFS ごし
・ include ファイルのある場所までのどこかの permission が危ない
例えば /usr, /usr/local, /usr/local/fml のように順次下って
group writable か否かを調べる。chmod 755 をしまくる
などが考えられます。include ファイルの置き場所は可能な限り permission
を落したローカル(NFSではない)場所(そこまでの階層すべての permission に
配慮する)に include ファイルを置いてみて下さい。例えば /usr/local が
local disk の上にあるとして /usr/local/include/ の下に置いておくなどです。
#注意: そもそも NFS ごしに setuid しようというのが間違い
C wrapper の詳細: ../MTA 4.1
4.5 553 machine-name host name configuration error
あるOS(たしかOEMのSUNかなにかだったとおもう)の附属の sendmail でおきま
す。sendmail R8 では相当するコードが存在しないので…なにがおこっている
のかわかりません;-)
config.ph の $HOST を
$HOST = 'localhost.ドメイン名';
とかにするとOKになることもあります(よくわからない)。
4.6 Executable files not allowed
aliase database /etc/aliases rebuilt by root
cannot open /var/spool/ml/etc/aliases
Executable files not allowed
executable bit を落してください。/ から全階層をたどって検査して下さい。
% chmod a-x /var/spool/ml/etc/aliases
4.7 Insecure dependency in chdir, Permission denied, ...
../MTA 4.1
../MTA 5.1
../internals 2.4
/ から全階層をたどって permission を検査して下さい。
/var/spool/ml/elena に仮想ユーザ fml 以外が書く権限は必要はありません。
4.8 sh: fml.pl not available for sendmail programs
最近では Red Hat Linux ではまる人が多いのが
sendmail の smrsh ではまるケースのようです(?)。
例えばこのようなエラーメールが返ってきます
----- The following addresses had permanent fatal errors -----
"|/usr/local/fml/fml.pl /var/spool/ml/elena "
(expanded from: :include:/var/spool/ml/elena/include)
----- Transcript of session follows -----
sh: fml.pl not available for sendmail programs
554 "|/usr/local/fml/fml.pl /var/spool/ml/elena "... Service unavailable
これは fml じゃなくて sendmail のエラーです。この段階では fml は実行さ
れてもいません。よって fml のログも残りません。
1. /usr/local/bin/perlなどが存在しない。
fml.pl の先頭の #!/usr/local/bin/perl の部分のこのPATHが間違い
A. 直して下さい
A2. インストール時に自動的に修正しているはずなので
インストーラがうまく働いてないかもしれません
2. sendmail restricted shell のせい
最近の linux の distribution のなかにはそれがデフォールトのも
のがあったとおもいます。で、Redhat がまさにそれだったようなきが
します
sendmail.cf に
Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,
のような行が P=/bin/smrsh になっていればこれです。
A. 回避策 1
(securityを緩める方向のうしろむきな解決ですが) そこを/bin/sh
にするととりあえず動くようになるとおもいます。もしこれが正解だっ
たら、Sendmail Restricted Shell というものについて調べて下さい。
そして smrsh について正しい設定をしなおしてみてください。
A2. 回避策 2: link をはりまくる
fml-support: 07458
smrshを使っていると @LIBDIR に/usr/local/fmlが入らない。
このために
require default_config.ph
の場所などでエラーになる。
回避例(『fml バイブル』 5.2.3 節より):
/var/spool/ml/etc/fml/site_init.ph というファイルに
push(@INC, "/usr/local/fml");
push(@LIBDIR,"/usr/local/fml/module");
push(@LIBDIR,"/usr/local/fml/module/CPAN");
push(@LIBDIR,"/usr/local/fml/module/Japanese");
push(@LIBDIR,"/usr/local/fml/module/fml-devel");
1;
と書いて下さい。そして以下の symbolik link をはって下さい。
smrsh のディレクトリが /usr/adm/sm.bin とすると
# ln -s /usr/local/fml/fml.pl /usr/adm/sm.bin
# ln -s /usr/local/fml/libloadconfig.pl /usr/adm/sm.bin/
# ln -s /usr/local/fml/default_config.ph /usr/adm/sm.bin/
# ln -s /usr/local/fml/site_init.ph /usr/adm/sm.bin/
注意: fml-current 3.0B 以降は /usr/local/fml/libloadconfig.pl および
default_config.ph の link が必要です。それ以前の current,
fml-3.0-stable などでは必要ありません。
補足: Red Hat Linux 7.x ではディレクトリは
/usr/adm/sm.bin ではなく /etc/smrsh になるそうです。
(thanks Koichi Honda)
References: fml-support ML:
01877,01879,01881
03942,03944,03965
05706,05708,05712,05715,05721,05722,05723,05724,05725,05726,05727,05728
07458,07733
4.9 :include:何か is unsafe for mailing to program ...
4.10 include's owner != config.ph's owner.
in fml-support: 02475, 02469, 02472 あたり
makefml newml をだれの権限で行なったかを確認する。
一般ユーザで makefml newml をして ML を作ってみる。
4.11 /var/spool/ml/src/fml.pl: permission denied
実行 permission がない。ls -l fml.pl とやって
rwxr-xr-x
のように permission が表示されるかどうかを確認する。
# chmod(1) chmod(2) chown(8)
perl の実行 permission がない場合もありうるかも
4.12 550 User %s@%s doesn't have a valid shell for mailing to programs
FMLプロセスの所有者のシェルが /etc/shells にないためです。
使っているシェルを /etc/shells に登録して下さい。
* /usr/src/usr.sbin/sendmail/src/
else if (bitset(QBOGUSSHELL, a->q_alias->q_flags)) {
a->q_flags |= QBADADDR;
a->q_status = "5.7.1";
if (a->q_alias->q_ruser == NULL)
usrerr("550 UID %d is an unknown user: cannot mail to programs",
a->q_alias->q_uid);
else
usrerr("550 User %s@%s doesn't have a valid shell for mailing to programs",
a->q_alias->q_ruser, MyHostName);
}
else if (bitset(QUNSAFEADDR, a->q_alias->q_flags))
とか
if (!usershellok(pw->pw_name, pw->pw_shell)) {
a->q_flags |= QBOGUSSHELL;
}
とか…
4.13 sh: /var/spool/ml/src/fml.pl: No such file or directory
/var/spool/ml/src/fml.pl の場所にファイルがない。perl がない場合にもで
るかもしれない。
4.14 sh: /var/spool/ml/src/fml.pl: command not found
/var/spool/ml/src/fml.pl は perl が実行しますが
先頭の #!/usr/local/bin/perl の場所に perl がない時にでます。
「コマンドがない」という理由は fml.pl を perl fml.pl に展開してから実
行するので、perl がないというつもりで「コマンドがない」というエラーメッ
セージになります。
# make 時に configure が自動的に補正することにはなっているはずですが
# それがうまくいってないOSの場合にありうるかもしれません
[PREVIOUS CHAPTER]
[NEXT CHAPTER]