sendmail 별칭 파일을 통해 구성된 스크립트를 이 이메일의 수신자 사용자로 실행하려면 어떻게 해야 합니까?

sendmail 별칭 파일을 통해 구성된 스크립트를 이 이메일의 수신자 사용자로 실행하려면 어떻게 해야 합니까?

Sendmail 8.16을 실행하는 FreeBSD 시스템이 있습니다. 나는 여러 명의 시스템 사용자(테스트 봇)를 갖고 있으며 , robot1이들을 이메일로 제어하길 원합니다. 먼저 그들은 할 수 있어야 한다robot2robot3받다이메일. 그래서 나는 다음과 같은 줄을 가지고 있습니다 /etc/mail/aliases:

robot1: "| /usr/local/project/script"
robot2: "| /usr/local/project/script"
robot3: "| /usr/local/project/script"

이러한 봇은 이메일을 정확히 동일한 방식으로 처리해야 하므로 모두 동일한 스크립트를 사용합니다.

문제는 sendmail이 항상 가짜 uid 26(예: "mailnull" 특수 사용자)을 사용하여 세 명의 수신자 모두에 대한 스크립트를 호출한다는 것입니다. 외부 스크립트를 시작하기 전에 sendmail 데몬이 포크에서 유효한 gid/uid를 다운그레이드하는 것 같습니다. 이는 완전히 합리적이지만 다음과 같습니다.

문제는 다음과 같습니다해당 수신자 사용자로 스크립트를 실행하도록 sendmail을 얻는 방법즉, robot1메시지가 에 대한 것일 때 robot1@localhost, robot2메시지가 에 대한 것일 때 robot2@localhostrobot3메시지가 robot3@localhost? 에 대한 것일 때입니다.

확실한 해결책은 세 개의 스크립트 복사본을 갖고, 각 복사본에 고유한 사용자가 있도록 하고, 각 로봇 사용자에 대한 별칭을 스크립트 복사본에 추가하는 것입니다. 나는 이것이 트릭을 수행해야 한다고 생각하지만 약간 추악합니다. 그렇다면 더 좋고 우아한 솔루션이 있는지 궁금합니다.

답변1

저는 간단히 를 사용하겠습니다 sudo.

기본 설치에서 sendmail은 사용자로 별칭 스크립트를 실행합니다 mailnull. mailnull명의 도용이 허용 sudo됩니다해당 사용자만, 그리고 할해당 특정 스크립트를 실행하는 목적으로만.

먼저 가 된 root후 다음을 실행 visudo하고 편집합니다.

mailnull ALL = (robot1) NOPASSWD: /usr/local/project/script
mailnull ALL = (robot2) NOPASSWD: /usr/local/project/script
mailnull ALL = (robot3) NOPASSWD: /usr/local/project/script

이제 콘텐츠를 /etc/mail/aliases다음과 같이 편집하세요.

robot1: "|sudo -u robot1 /usr/local/project/script"
robot2: "|sudo -u robot2 /usr/local/project/script"
robot3: "|sudo -u robot3 /usr/local/project/script"

그리고 할

cd /etc/mail
make

관련 정보