Sendmail 8.16을 실행하는 FreeBSD 시스템이 있습니다. 나는 여러 명의 시스템 사용자(테스트 봇)를 갖고 있으며 , robot1
이들을 이메일로 제어하길 원합니다. 먼저 그들은 할 수 있어야 한다robot2
robot3
받다이메일. 그래서 나는 다음과 같은 줄을 가지고 있습니다 /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@localhost
및 robot3
메시지가 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