Ho installato sendmail
pacchetto su Fedora 23. Quindi ora ho /usr/sbin/sendmail
quel tipo di lavoro funziona davvero. Tranne che ora non ricevo notifiche di posta nella shell bash. Perché no?
EDIT:pensavo che la notifica bash fosse interrotta (e funzionasse con esmtp, come descritto di seguito). Tuttavia, la notifica all'accesso è stata più facile da testare, quindi temo di aver confuso il problema.
La notifica all'accesso non ha funzionato, ma penso che in realtà sia responsabilità di pam_mail, non bash. Pensavo che le notifiche all'accesso funzionassero con esmtp, ma ho notato grep -r pam_mail /etc/pam.d
non mostra alcun risultato. Sfortunatamente, l'abilitazione di pam_mail come da documentazione non sembra fare nulla , anche se dovrebbe sempre stampare, ad es. “Niente posta”. Ha anche un debug
opzione, ma non mostrava nulla all'utente né al syslog (ovvero il journal).
mail alan; sleep 60
fa generare una notifica.
Tuttavia, se mail alan; logout
quindi non ricevo alcuna notifica quando accedo di nuovo. Anche dopo sleep 60
. Ovviamente questo è indesiderabile.
Sembra che bash presuppone pam_mail
sta lavorando. Quindi, se la posta è disponibile al momento dell'accesso, bash si assicura non per notificare una seconda volta per la stessa posta.
Quindi il vero problema è che pam_mail non funziona.
Questa realizzazione ha richiesto test esaurienti perché sono stupido.
Test esaustivi
Se mail alan
, quindi apri un secondo accesso ed esegui sleep 60
, ricevo una notifica in un accesso (solo). Non è ovviamente un problema con uno script di logout, perché mail alan; sleep 60
funziona anche se apro un secondo accesso e lo disconnetto immediatamente.
Il test con l'invio di posta da un secondo utente suggerisce che le notifiche non funzionano se non hai effettuato l'accesso quando la posta viene inviata.
Una volta che bash ha mostrato una notifica, non la mostra più, ad es. dopo un secondo sleep 60
.
Ho pensato che potesse confrontare il tempo di accesso del file con il tempo di modifica, ma non sembra essere così.
$ stat $MAIL
File:'/var/spool/mail/alan'
Dimensioni:859 Blocchi:16 IO Blocco:4096 file normale
Dispositivo:fd00h/64768d Inode:655929 Collegamenti:1
Accesso:(0660/-rw-rw—-) Uid:( 1000/ alan) Gid:( 12/ mail)
Contesto:unconfined_u:object_r:mail_spool_t:s0
Accesso:2016-05-12 22:17:28.907175410 +0100
Modifica:2016-05-12 22:18:03.177899774 +0100
Modifica:2016-05-12 22:18:03.177899774 +0100
Nascita:–
Variabili d'ambiente
Esempio sotto. Questo è dopo che ho inviato una mail di prova a me stesso. Quindi, quando accedo, mi aspetto una notifica. Se continuo a eseguire mail
, mi mostra la mail di prova come previsto.
[[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] ~]$
Installazione di sendmail
Fedora Workstation viene fornita con un /bin/sendmail
non funzionante (pacchetto esmtp).
Può essere configurato installando maildrop e impostando mda="maildrop -d %T" in /etc/esmtprc
. Ciò consente la posta da un utente a se stesso e da root a chiunque. Con esmtp e maildrop, bash mostra le notifiche di posta come previsto .
Tuttavia esmtp non funziona per le e-mail da cron
demone. esmtp registra "permesso negato" quando si tenta di leggere il messaggio da consegnare. https://bugzilla.redhat.com/show_bug.cgi?id=1303305 In particolare, quando si tenta di riaprire /dev/stdin
, che generalmente dovrebbe avere successo (equivalente a dup()
). Quindi probabilmente è SELinux, ma non è stato registrato alcun rifiuto SELinux (AVC), probabilmente è dontaudit
.
L'installazione del vecchio pacchetto sendmail sostituisce il comando sendmail fornito da esmtp. Ho pensato che sarebbe stato un modo semplice per aggirare i nuovi bug, ma ora ho un altro bug :(.
Risposta accettata:
La configurazione per la segnalazione dello stato della posta al momento dell'accesso è gestita da pam_mail
. Controlla il file corrispondente (ad es. /etc/pam.d/ssh
) e assicurati di avere una linea simile a questa:
session optional pam_mail.so standard noenv
Potrebbe essere diverso a seconda della distribuzione. Controlla la documentazione della tua distribuzione per vedere come dovrebbe essere impostata.