sendmail
をインストールしました Fedora 23のパッケージです。これで、 / usr / sbin / sendmail
ができました。 それは実際に一種の作品です。今を除いて、bashシェルでメール通知を受け取りません。なぜですか?
編集:私はbash通知が壊れていると思いました(そして以下に説明するようにesmtpで動作しました)。ただし、ログイン時の通知の方がテストが簡単だったため、問題を混乱させたのではないかと思います。
ログイン時の通知は機能しませんでしたが、それは実際にはpam_mailの責任であり、bashの責任ではないと思います。ログイン時の通知はesmtpで機能すると思いましたが、 grep -r pam_mail/etc/pam.d
に気づきました。 結果は表示されません。残念ながら、ドキュメントに従ってpam_mailを有効にしても、何もしないようです。 、常に印刷することになっている場合でも、たとえば「メールなし」。 debug
もあります オプションですが、ユーザーにもsyslog(別名ジャーナル)にも何も表示されませんでした。
メールアラン;睡眠60
します 通知を生成します。
ただし、 alanにメールを送信すると、ログアウト
その後、再度ログインしても通知は届きません。 sleep 60
の後でも 。明らかにこれは望ましくありません。
bashはpam_mail
を想定しているようです 仕事中。したがって、ログイン時にメールが利用できる場合、bashはしないようにします。 同じメールについてもう一度通知します。
したがって、本当の問題はpam_mailが機能していないことです。
私は愚かなので、この実現には徹底的なテストが必要でした。
徹底的なテスト
mail alan
の場合 、次に2回目のログインを開き、 sleep 60
を実行します 、1回のログインで通知が届きます(のみ)。 mail alan;であるため、ログアウトスクリプトでは明らかに問題にはなりません。睡眠60
2回目のログインを開いてすぐにログアウトしても、機能します。
2人目のユーザーからメールを送信してテストすると、メールの送信時にログインしていないと通知が機能しないことがわかります。
bashが通知を表示すると、それは再び表示されません。たとえば、 2回目のsleep60
の後 。
ファイルのアクセス時間と変更時間を比較しているのではないかと思いましたが、そうではないようです。
$ stat $ MAIL
ファイル:'/ var / spool / mail / alan'
サイズ:859ブロック:16 IOブロック:4096通常のファイル
デバイス:fd00h / 64768d iノード:655929リンク: 1
アクセス:(0660 / -rw-rw—-)Uid:(1000 / alan)Gid:(12 / mail)
コンテキスト:unconfined_u:object_r:mail_spool_t:s0
アクセス: 2016-05-12 22:17:28.907175410 +0100
変更:2016-05-12 22:18:03.177899774 +0100
変更:2016-05-12 22:18:03.177899774 +0100
誕生:–
環境変数
以下の例。これは私が自分自身にテストメールを送った後です。そのため、ログインすると通知が届きます。 mail
を実行し続けると 、期待どおりにテストメールが表示されます。
[[email protected] ~]$ ssh alan-nuc
Last login: Thu May 12 20:50:54 2016 from 172.16.9.242
[[email protected] ~]$ echo $MAIL
/var/spool/mail/alan
[[email protected] ~]$ ls -l $MAIL
-rw-rw----. 1 alan mail 850 May 12 20:56 /var/spool/mail/alan
[[email protected] ~]$ echo $MAILCHECK
60
[[email protected] ~]$ echo $MAILPATH
[[email protected] ~]$
sendmailのインストール
Fedora Workstationには、機能しない / bin / sendmail
が付属しています。 (esmtpパッケージ)。
maildropをインストールし、/ etc / esmtprcにmda="maildrop -d%T"を設定することで設定できます。 。これにより、ユーザーから自分自身へのメール、およびルートから誰へのメールも可能になります。 esmtpとmaildropを使用すると、bashは期待どおりにメール通知を表示します 。
関連:「新しい通知を受信するたびに音を鳴らす」をオフにしても、Facebookの通知が鳴るのはなぜですか?
ただし、esmtpは cron
からのメールでは機能しません デーモン。 esmtpは、配信するメッセージを読み取ろうとすると、「permissiondenied」をログに記録します。 https://bugzilla.redhat.com/show_bug.cgi?id=1303305具体的には、 / dev / stdin
を再度開こうとしたとき 、これは一般的に成功すると予想されます( dup()
と同等です )。したがって、おそらくSELinuxですが、SELinux(AVC)の拒否は記録されておらず、おそらく dontaudit
です。 。
古いsendmailパッケージをインストールすると、esmtpが提供するsendmailコマンドが置き換えられます。これは新しいバグを回避する簡単な方法だと思いましたが、今ではさらに別のバグがあります:(。
承認された回答:
ログイン時にメールのステータスを報告するための設定は、 pam_mail
によって処理されます。 。対応するファイルを確認してください(例: /etc/pam.d/ssh
)そして、次のような行があることを確認してください:
session optional pam_mail.so standard noenv
ディストリビューションによって異なる場合があります。ディストリビューションのドキュメントをチェックして、設定方法を確認してください。