Cron이 이메일을 보내지 않고 명령줄 이메일이 작동합니다.

Cron이 이메일을 보내지 않고 명령줄 이메일이 작동합니다.

Raspbian 10 Buster를 실행하는 Raspberry Pi에 ssmtp를 설치했습니다. 예를 들어 명령줄에서 이메일을 보내는 것은 mail훌륭하게 작동합니다. 그러나 MAILTO파일에 변수를 추가하여 이메일을 보내도록 사용자의 cron 작업도 구성했습니다.

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).

MAILTO="[email protected],[email protected]"

# we need to set the user path to add the system scripts directory /usr/local/sbin
# I tried with PATH=$PATH:/usr/local/sbin but it used this verbatim in the path
PATH=/usr/sbin:/usr/bin:/bin:/usr/local/sbin:

# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

26 3 * * * cronic python3 ~/redacted_directory_name/redacted_script_name.py
24 22 * * * echo "Testing cron email"

다른 온라인 검색을 통해 제가 이해한 바에 따르면(틀렸다면 정정해 주십시오) cron은 기본적으로 sendmail을 사용하여 이메일을 보냅니다.

Sendmail은 시스템에서 사용할 수 있지만 실제로는 ssmtp입니다.

$ which sendmail
/usr/sbin/sendmail
$ ls -l /usr/sbin/sendmail 
lrwxrwxrwx 1 root root 5 Jul 20  2014 /usr/sbin/sendmail -> ssmtp

이 컴퓨터에서는 외부 SMTP 서버를 사용하여 메일을 보내도록 ssmtp를 구성했습니다.

cron은 루트나 sudo가 아닌 다른 사용자에게 이메일을 보내지 않습니다.

메일 로그에 다음이 표시됩니다.

$ tail /var/log/mail.log
Jan 17 16:43:02 ed-mh-pi01 sSMTP[25679]: Cannot open mailhub:25
Jan 18 03:22:24 ed-mh-pi01 sSMTP[9846]: Creating SSL connection to host
Jan 18 03:22:25 ed-mh-pi01 sSMTP[9846]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Jan 18 03:22:26 ed-mh-pi01 sSMTP[9846]: Sent mail for root@[email protected] (221 2.0.0 Bye) uid=0 username=root outbytes=638
Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: /etc/ssmtp/ssmtp.conf not found
Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: Unable to locate mailhub
Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: Cannot open mailhub:25
Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: /etc/ssmtp/ssmtp.conf not found
Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: Unable to locate mailhub
Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: Cannot open mailhub:25

1월 18일 22:20:02 및 1월 18일 22:24:02에 대한 항목은 크론 작업 이메일과 관련된 것으로 보입니다. 그 당시에 몇 가지 테스트를 했습니다.

이메일을 보내는 프로세스에는 액세스 권한이 없다고 명시되어 있습니다 /etc/ssmtp/ssmtp.conf.아치 리눅스 위키그것은 상태

/usr/bin/ssmtp 바이너리는 메일 그룹으로 실행되며 이 파일을 읽을 수 있습니다. 자신이나 다른 사용자를 메일 그룹에 추가할 이유가 없습니다.

이것이 Raspbian의 경우인지는 모르겠지만 아마도 그것이 문제일지도 모른다고 생각하게 됩니다. /etc/ssmtp/그룹 소유권과 그 내용을 다음과 같이 메일로 변경해 보았습니다 .

$ ls -l /etc/ssmtp/
total 8
-rw-r--r-- 1 root mail 200 Jul 20  2014 revaliases
-rw-r----- 1 root mail 764 Jan 17 12:03 ssmtp.conf

그러나 문제는 여전히 존재합니다

[root] ~ $ tail /var/log/mail.log
<snip>
Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: /etc/ssmtp/ssmtp.conf not found
Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: Unable to locate mailhub
Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: Cannot open mailhub:25

그러면 cron이 이메일을 보내지 않는 이유는 무엇이며 어떻게 해결합니까?

편집하다

모든 사용자가 읽을 수 있도록 권한을 (일시적으로) 변경하면 /etc/ssmtp/ssmtp.conf이메일이 전송됩니다. 파일에 이메일 계정의 일반 텍스트 비밀번호가 포함되어 있고 일반 사용자가 명령줄에서 보낼 수 있지만 cron에서는 보낼 수 없는 이유를 설명하지 않기 때문에 이것은 해결책이 아닙니다.

편집 2

$ ls -l /usr/sbin/ssmtp
-rwxr-xr-x 1 root root 30588 Jul 20  2014 /usr/sbin/ssmtp

답변1

이미 작성하셨는데요,

/usr/bin/ssmtp 바이너리는 메일 그룹으로 실행되며 이 파일을 읽을 수 있습니다.

그러나 바이너리의 경우에는 그렇지 않다는 것을 입증했습니다.

-rwxr-xr-x 1 루트 루트 30588 2014년 7월 20일/usr/sbin/ssmtp

위키피디아는 말합니다.

이메일 비밀번호는 /etc/ssmtp/ssmtp.conf에 일반 텍스트로 저장되므로 이 파일을 안전하게 유지하는 것이 중요합니다. 기본적으로 전체 /etc/ssmtp 디렉토리는 루트 및 메일 그룹만 액세스할 수 있습니다. /usr/bin/ssmtp 바이너리는 메일 그룹으로 실행되며 이 파일을 읽을 수 있습니다. 자신이나 다른 사용자를 메일 그룹에 추가할 이유가 없습니다.

따라서 손상된 권한을 수정해야 합니다.

chown -R root:mail /etc/ssmtp /usr/sbin/ssmtp
chmod -R g=u,g-w,o= /etc/ssmtp
chmod a=rx,g+s /usr/sbin/ssmtp

그러나 나는 또한 Arch wiki가 말하는 첫 번째 내용이 다음과 같다는 점을 지적하고 싶습니다.

sSMTP는 유지되지 않습니다. msmtp 또는 OpenSMTPD와 같은 대안 사용을 고려해보세요.

관련 정보