sendmail
이 패키지를 Fedora 23에 설치했습니다 . 그래서 지금은 /usr/sbin/sendmail
잘 일하고 있어요. 하지만 이제 bash 쉘에서 이메일 알림을 받지 못합니다. 왜 안 돼?
편집: bash 알림이 손상된 것 같습니다(그리고 아래 설명된 대로 esmtp를 사용하여 작업합니다). 다만, 로그인 시 알림은 테스트하기가 더 쉽기 때문에 문제를 혼란스럽게 할까봐 걱정됩니다.
로그인 알림이 작동하지 않지만 실제로는 bash의 책임이 아니라 pam_mail의 책임이라고 생각합니다. 로그인 알림이 esmtp에 대해 작동한다고 생각했는데 grep -r pam_mail /etc/pam.d
결과가 표시되지 않는 것으로 나타났습니다. 불행하게도 문서에 따라 pam_mail을 활성화해도 작동하지 않는 것 같습니다.아무것, 예를 들어 "No 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가 알림을 표시하면 잠시 후에 다시 표시하지 않습니다 sleep 60
.
파일 접근 시간과 수정 시간을 비교하는 것이 아닐까 생각했는데, 그렇지 않은 것 같습니다.
$ stat $MAIL 파일: '/var/spool/mail/alan' 크기: 859 블록: 16 IO 블록: 4096 일반 파일 장치: fd00h/64768d Inode: 655929 링크: 1 액세스: (0660/-rw-rw-- --) Uid: ( 1000/ alan) Gid: ( 12/ mail) Context: 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
. 이를 통해 사용자는 자신뿐만 아니라 루트의 누구에게나 메일을 보낼 수 있습니다. esmtp 및 maildrop을 사용하여 bash는 예상대로 메일 알림을 표시합니다..
cron
그러나 esmtp는 데몬의 메일 에서는 작동하지 않습니다 . esmtp는 배달을 위해 메시지를 읽으려고 할 때 "Permission Denied"를 기록합니다. https://bugzilla.redhat.com/show_bug.cgi?id=1303305 특히 를 다시 열려고 하면 /dev/stdin
일반적으로 성공할 것으로 예상됩니다( 와 동일 dup()
). 따라서 SELinux일 수 있지만 문서화된 SELinux(AVC) 거부가 없으면 dontaudit
.
이전 sendmail 패키지를 설치하면 esmtp에서 제공하는 sendmail 명령이 대체됩니다. 나는 이것이 새로운 오류를 해결하는 쉬운 방법이라고 생각했지만 이제 또 다른 오류가 발생합니다 :(.
답변1
로그인 시 보고 메일 상태 구성은 에서 처리합니다 pam_mail
. 해당 파일(예 /etc/pam.d/ssh
: )을 확인하고 다음과 같은 줄이 있는지 확인하세요.
session optional pam_mail.so standard noenv
이는 배포판에 따라 다를 수 있습니다. 배포 문서를 확인하여 어떻게 설정해야 하는지 알아보세요.