岩本といいます。

<blqjm0$5s3$1@caraway.media.kyoto-u.ac.jp>の記事において
nospam@excite.co.jpさんは書きました。

>この教えを基に、以下2通りの設定を試みました。
>
>    local_recipient_maps = unix:passwd.byname $alias_maps
>    local_recipient_maps = $alias_maps unix:passwd.byname
>
>上記の何れの設定も以下のような結果になりました。
>
>    ・$alias_maps や $virtual_maps に記述された
>      ユーザーやアドレス宛のメールは正常に受信する
>
>    ・上記以外は /etc/passwd にユーザーが存在しても
>      Unknown User となってしまう
>      ( check_recipient_access でマッチしないものもです)

おそらく smtpd が chroot するように設定されていないでしょうか。

master.cf の中に、以下のような行があると思います。

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd

chrootの所が - になっていると $queue_directory に chroot します。
そのため、$queue_directory の外にある /etc/passwd が読めないのだと思います。

対策としては

・/var/spool/postfix/etc を作り、その中に /etc/passwd をコピーする
・smtpd が chroot しないように設定する
・local_recipient_maps を設定しない(空にする)

などがあると思います。

通常は最初の /var/spool/postfix/etc/passwd を作る方法を取ると思いますが、
ユーザの追加,削除等を行った時に忘れずにコピーする必要があります。
# 自宅では、smtpd が chroot しないように設定していました

Postfix 2 以降ならば、以下のように proxymap を使うという方法もあります。

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

--
いわもと こういち(doda@cds.ne.jp)
# なるようになれ、明日もイケイケ♪