J'ai installé le sendmail
package sur Fedora 23. Alors maintenant j'ai /usr/sbin/sendmail
ce genre de travaux. Sauf que maintenant, je ne reçois pas de notifications par e-mail dans le shell bash. Pourquoi pas ?
EDIT :Je pensais que la notification bash était cassée (et fonctionnait avec esmtp, comme décrit ci-dessous). Cependant, la notification lors de la connexion était plus facile à tester, donc j'ai bien peur d'avoir confondu le problème.
La notification à la connexion n'a pas fonctionné, mais je pense que c'est en fait la responsabilité de pam_mail, pas de bash. Je pensais que les notifications à la connexion fonctionnaient avec esmtp, mais je remarque grep -r pam_mail /etc/pam.d
n'affiche aucun résultat. Malheureusement, l'activation de pam_mail conformément à la documentation ne semble pas faire rien , même s'il est censé toujours imprimer, par ex. "Pas de courrier". Il a également un debug
option, mais cela n'a rien affiché à l'utilisateur ni à syslog (alias le journal).
mail alan; sleep 60
fait générer une notification.
Cependant, si je mail alan; logout
alors je ne reçois aucune notification lorsque je me reconnecte. Même après sleep 60
. Évidemment, ce n'est pas souhaitable.
Il semble que bash suppose pam_mail
travaille. Donc, si le courrier est disponible au moment de la connexion, alors bash s'assure pas notifier une deuxième fois pour le même courrier.
Donc le vrai problème est que pam_mail ne fonctionne pas.
Cette réalisation a nécessité des tests poussés car je suis bête.
Tests exhaustifs
Si j'mail alan
, puis ouvrez une deuxième connexion et exécutez sleep 60
, je reçois une notification en une seule connexion (uniquement). Ce n'est évidemment pas un problème avec un script de déconnexion, car mail alan; sleep 60
fonctionne même si j'ouvre une deuxième connexion et que je la déconnecte immédiatement.
Tester avec l'envoi d'e-mails à partir d'un deuxième utilisateur suggère que les notifications ne fonctionnent pas si vous n'êtes pas connecté lorsque l'e-mail est envoyé.
Une fois que bash a affiché une notification, il ne l'affiche plus, par exemple. après un second sleep 60
.
Je pensais qu'il s'agissait peut-être de comparer l'heure d'accès du fichier à l'heure de modification, mais cela ne semble pas être le cas.
$ stat $MAIL
Fichier :'/var/spool/mail/alan'
Taille :859 blocs :16 bloc d'E/S :4096 fichier normal
Périphérique :fd00h/64768d Inode :655929 Liens :1
Accès :(0660/-rw-rw—-) Uid :( 1000/ alan) Gid :( 12/ mail)
Contexte :unconfined_u:object_r:mail_spool_t:s0
Accès :2016-05-12 22:17:28.907175410 +0100
Modifier :2016-05-12 22:18:03.177899774 +0100
Modifier :2016-05-12 22:18:03.177899774 +0100
Naissance :–
Variables d'environnement
Exemple ci-dessous. C'est après que j'ai envoyé un mail test à moi-même. Ainsi, lorsque je me connecte, j'attends une notification. Si je continue à exécuter mail
, il me montre le courrier de test comme prévu.
[[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] ~]$
Installer sendmail
Fedora Workstation est livré avec un /bin/sendmail
qui ne fonctionne pas (paquet esmtp).
Il peut être configuré en installant maildrop et en définissant mda="maildrop -d %T" in /etc/esmtprc
. Cela permet le courrier d'un utilisateur à lui-même et de root à n'importe qui. Avec esmtp et maildrop, bash affiche les notifications de courrier comme prévu .
Cependant esmtp ne fonctionne pas pour les mails du cron
démon. esmtp enregistre "autorisation refusée" lors de la tentative de lecture du message à livrer. https://bugzilla.redhat.com/show_bug.cgi?id=1303305 Plus précisément, lorsque vous essayez de rouvrir /dev/stdin
, qui est généralement censé réussir (équivalent à dup()
). Donc, c'est probablement SELinux, mais il n'y a pas de refus SELinux (AVC) enregistré, c'est probablement dontaudit
.
L'installation de l'ancien package sendmail remplace la commande sendmail fournie par esmtp. Je pensais que ce serait un moyen simple de contourner les nouveaux bugs, mais maintenant j'ai encore un autre bug :(.
Réponse acceptée :
La configuration du rapport sur l'état du courrier au moment de la connexion est gérée par pam_mail
. Vérifiez le fichier correspondant (par exemple /etc/pam.d/ssh
) et assurez-vous que vous avez une ligne qui ressemble à ceci :
session optional pam_mail.so standard noenv
Peut être différent selon votre distribution. Consultez la documentation de votre distribution pour voir comment elle doit être configurée.