Я пытаюсь реализовать решение для защиты от спама, и, согласно советам, которые я получил здесь из ответов на мои другие вопросы, я решил перейти на sendmail + mimedefang + spamassassin.
Но в настоящее время я застрял с довольно простой проблемой разрешения:
По умолчанию MIMEdefang запускается от имени пользователя defang, поэтому он создает сокет со следующими разрешениями:
srwxr-x --- 1 defang defang 0 3 марта 16:42 /var/spool/MIMEDefang/mimedefang.sock
Если sendmail запускается от имени root, проблем нет, но если он запускается от имени непривилегированного пользователя, он жалуется на отсутствие разрешений для сокета mimedefang:
NOQUEUE: SYSERR (root): /etc/mail/sendmail.cf: строка 1870: Xmimedefang: имя локального сокета /var/spool/MIMEDefang/mimedefang.sock unsafe: Permission denied
Я уже пробовал следующие решения этой проблемы:
запустите sendmail от имени root. Работает нормально, но довольно неприемлемо, так как я не хочу запускать свои демоны от имени root
запустите sendmail как defang или запустите mimedefang от имени того же пользователя, что и sendmail. Вроде нормально, но этого также хочется избежать, так как существует слишком много файлов конфигурации, каталогов и т.д., что потребует изменения разрешений и / или прав собственности, поэтому весь процесс стал подвержен ошибкам.
Просто измените разрешение файла сокета, но оно воссоздается каждый раз при запуске mimedefang. Я мог бы соответствующим образом изменить соответствующие сценарии в /etc/init.d, но опять же не хочу этого избегать, потому что мои изменения могут быть потеряны с будущими обновлениями этих пакетов.
Не могли бы вы предложить другое решение? Доступны ли какие-либо параметры в sendmail или mimedefang, связанные с разрешениями?
Sendmail запускается от имени пользователя root и разветвляется всякий раз, когда необходимы процессы для запуска от имени другого пользователя (smmsp, smmta и т. Д.). Так что да, запустите его как root и убедитесь, что у вас установлена последняя версия. Если вы хотите запустить sendmail без полномочий root, сделайте этого пользователя частью группы defang. Обратите внимание, что группа defang также имеет права на чтение сокета.
РЕДАКТИРОВАТЬ: (после прочтения комментариев ниже) Сделать чтение-запись группы сокетов вы должны использовать umask перед запуском milter (см. раздел «Примечания» по предоставленной ссылке).
В моем случае мне не нужно было устанавливать umask для создания сокета. Мне просто нужно запустить opendkim с тем же пользователем и группой, что и sendmail (RunAsUid
, RunAsGid
) и иметь каталог, используемый для сокета с 600
разрешение (S_IRUSR|S_IWUSR
).
Вы можете проверить это в источниках sendmail [1]:
errno = safefile(colon, RunAsUid, RunAsGid, RunAsUserName, sff,
S_IRUSR|S_IWUSR, NULL);
...
else if (errno != 0)
{
/* if not safe, don't create */
save_errno = errno;
if (tTd(64, 5))
sm_dprintf("X%s: local socket name %s unsafe\n",
m->mf_name, colon);
/*
** SAFEFILE -- return 0 if a file exists and is safe for a user.
**
** Parameters:
** fn -- filename to check.
** uid -- user id to compare against.
** gid -- group id to compare against.
** user -- user name to compare against (used for group
** sets).
** flags -- modifiers:
** SFF_MUSTOWN -- "uid" must own this file.
** SFF_NOSLINK -- file cannot be a symbolic link.
** mode -- mode bits that must match.
** st -- if set, points to a stat structure that will
** get the stat info for the file.
**
** Returns:
** 0 if fn exists, is owned by uid, and matches mode.
** An errno otherwise. The actual errno is cleared.
**
** Side Effects:
** none.
*/
int
safefile(fn, uid, gid, user, flags, mode, st)
[1]: ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.15.2.tar.gz