Ubuntuサーバーでpostfixを実行しています。私のドメインのメールサーバーではありません。
ルートでcronジョブが実行されるときはいつでも、出力メールはローカルに配信されず、代わりにメインのメールサーバーを介して[email protected]に送信されます。これは私が望むものではありません。
Root宛のメールをローカルに配信するか、anothermail @ anotherdomain.comに転送する。
~root/.forward
と/etc/aliases
の両方を変更してみました(そしてnewaliasesを実行しています)。
私に何ができる?
これは/etc/postfix/main.cf
です:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = linux1.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = linux1.mydomain.com, localhost.linux1.mydomain.com, localhost
relayhost = my.isps.relayhost.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
編集:
ルートにメールを送信すると、これは/var/log/mail.log
に入ります。
Mar 7 09:39:17 linux1 postfix/pickup[31381]: F3B9C98025E: uid=1000 from=<ct>
Mar 7 09:39:18 linux1 postfix/cleanup[31556]: F3B9C98025E: message-id=<[email protected]>
Mar 7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: from=<[email protected]>, size=283, nrcpt=1 (queue active)
Mar 7 09:39:18 linux1 postfix/smtp[31558]: F3B9C98025E: to=<[email protected]>, orig_to=<root>, relay=my.isps.relayhost.com[<IP address omitted>]:25, delay=0.72, delays=0.19/0.02/0.27/0.25, dsn=2.0.0, status=sent (250 Ok: queued as A97F5D8126)
Mar 7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: removed
名前「ct」は私のユーザー名です。このコマンドで上記のテキストを生成しました。
echo test | mail -s test root
/etc/mailname
の内容は次のとおりです。
mydomain.com
/etc/aliases
の内容は次のとおりです。
root: [email protected]
postmaster: root
ここで、anothermail @ anotherdomain.comは、ルートのメールが転送される場所です。
/etc/hosts
の内容は、実際には少し驚きます。
127.0.0.1 localhost
127.0.1.1 linux1.mylinux.mydomain.com linux1
ここで、「mylinux」は、linux1が仮想マシンとして実行されるホストオペレーティングシステムのホスト名です。 「mylinux」がどのように導入されたかはわかりません。 (しかし、これが本当に私の問題の理由でしょうか?)
通常は、ログを確認してください。
あなたの場合、postfixデーモンはメールがそれのためのものではないと考え、/etc/aliases
を使用せずに送信します
最初に/etc/hosts
ファイルを確認します。次のように、127.0.1.1
に対応するマシン名が含まれている必要があります。
127.0.1.1 linux1.mydomain.com linux1
/etc/mailname
も確認してください。一貫性があるはずです。
/etc/aliases
をチェックして、root(ユーザー)が別のユーザーに送信されているかどうかを確認し、newaliases
コマンドをやり直してください。
そしてそれはうまくいくはずです!
mydestination
が空であるか$myhostname
が含まれていない場合、Postfixは電子メールがローカル配信ではないと見なし、ローカルエイリアスを適用しないため、/etc/aliases
は無視されます。したがって、mydestination
をデフォルト(postconf -d mydestination
またはmain.cf
から削除)のままにすると、ログにto=<...>
がエイリアスアドレスとして表示されます。
状況によっては(つまり、すべてのメールが外部システムにリレーされる場合)、ルートのcrontabのMAILTO
変数を実際のメールアドレスに設定する方が簡単です。これは、ルートへの従来の配信をほとんどバイパスし、必要な場所に移動するだけです。
# Root's crontab
[email protected]
0 0 * * * /usr/bin/somescript
少なくとも強化されたシステムでは、Postfixデーモンによる/root/.forward
のオープンにいくつかの問題があるようです(私は調べていません)。にもかかわらず:
# ls -ld / /root /root/.forward
dr-xr-xr-x. 18 root root 236 Dec 4 00:02 /
dr-xr-x--x. 13 root root 4096 Jan 8 17:45 /root
-rw-r--r--. 1 root root 30 Jan 8 14:51 /root/.forward
Postfixデーモンの子が.forwardにアクセスできません:
7603 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 16
7603 fstat(16, {st_mode=S_IFREG|0644, st_size=1227, ...}) = 0
7603 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f86854fb000
7603 read(16, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1227
7603 close(16) = 0
7603 munmap(0x7f86854fb000, 4096) = 0
7603 geteuid() = 89
7603 getegid() = 89
7603 geteuid() = 89
7603 setresuid(-1, 0, -1) = 0
7603 setresgid(-1, 0, -1) = 0
7603 setgroups(1, [0]) = 0
7603 lstat("/root/.forward", 0x7ffc03f84750) = -1 EACCES (Permission denied)
掘り下げる時間はありませんでした... /etc/aliases
にエントリを追加し、その後にnewaliases
を追加すると正常に機能します。