Fedora

Fedora Linux:我安裝了 sendmail 但現在登錄時沒有收到郵件通知

  • May 14, 2016

我在 Fedora 23 上安裝了這個sendmail包。所以現在我有了/usr/sbin/sendmail這個真正的作品。除了現在我沒有在 bash shell 中收到郵件通知。為什麼不?


編輯:我認為 bash 通知已損壞(並與 esmtp 一起使用,如下所述)。但是登錄時的通知更容易測試,所以恐怕我把問題混為一談了。

登錄時的通知不起作用,但我認為這實際上是 pam_mail 的責任,而不是 bash。我認為登錄時的通知確實適用於 esmtp,但我注意到grep -r pam_mail /etc/pam.d沒有顯示任何結果。不幸的是,根據文件啟用 pam_mail 似乎沒有做任何事情,即使它應該總是列印,例如“沒有郵件”。它也有一個debug選項,但它沒有向使用者或系統日誌(又名日誌)顯示任何內容。

mail alan; sleep 60 確實會生成通知。

但是,如果我mail alan; logout再次登錄時沒有收到任何通知。甚至之後sleep 60。顯然這是不可取的。

似乎 bash 假設pam_mail正在工作。因此,如果郵件在登錄時可用,那麼 bash 確保不會再次通知同一郵件。

所以真正的問題是 pam_mail 不工作。

這種認識需要詳盡的測試,因為我很笨。

詳盡的測試

如果我mail alan,然後打開第二個登錄並執行sleep 60,我會在一次登錄中收到通知(僅)。註銷腳本顯然不是問題,因為mail alan; sleep 60即使我打開第二個登錄並立即將其註銷也可以使用。

使用從第二個使用者發送郵件進行的測試表明,如果您在發送郵件時未登錄,則通知不起作用。

一旦 bash 顯示了一個通知,它就不會再次顯示它,例如在 second 之後sleep 60

我認為它可能會將文件的訪問時間與修改時間進行比較,但似乎並非如此。

$ stat $ 郵件文件:’/var/spool/mail/alan’ 大小:859 塊:16 IO 塊:4096 正常文件設備:fd00h/64768d 索引節點: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,它會按預期顯示測試郵件。

[alan@localhost ~]$ ssh alan-nuc
Last login: Thu May 12 20:50:54 2016 from 172.16.9.242

[alan@alan-nuc ~]$ echo $MAIL
/var/spool/mail/alan
[alan@alan-nuc ~]$ ls -l $MAIL
-rw-rw----. 1 alan mail 850 May 12 20:56 /var/spool/mail/alan
[alan@alan-nuc ~]$ echo $MAILCHECK
60
[alan@alan-nuc ~]$ echo $MAILPATH

[alan@alan-nuc ~]$ 

安裝發送郵件

Fedora Workstation 附帶一個非工作/bin/sendmail(esmtp 包)。

可以通過安裝 maildrop 和設置來設置mda="maildrop -d %T" in /etc/esmtprc。這允許從使用者到他們自己的郵件,以及從 root 到任何人的郵件。 使用 esmtp 和 maildrop,bash 會按預期顯示郵件通知

但是 esmtp 不適用於來自cron守護程序的郵件。esmtp 在嘗試讀取要傳遞的消息時記錄“權限被拒絕”。 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

根據您的分佈,可能會有所不同。檢查您的發行版文件以了解它應該如何設置。

引用自:https://unix.stackexchange.com/questions/280182