[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]