Problema quando o sendmail e o mimedefang são executados como usuário não-privilegiado

1

Estou tentando implementar uma solução anti-spam e, de acordo com os conselhos que recebo das respostas às minhas outras perguntas, decidi optar pelo sendmail + mimedefang + spamassassin.

Mas atualmente estou com um problema de permissão bastante simples:

  1. Por padrão, o MIMEdefang é executado como usuário "defang", portanto, cria seu soquete com as seguintes permissões:

    srwxr-x --- 1 horas atrás 0 Mar 3 16:42 /var/spool/MIMEDefang/mimedefang.sock

  2. Se o sendmail for executado como root, não há problema, mas se ele for executado como usuário sem privilégios, ele reclama da falta de permissões para o soquete mimedefang:

    NOQUEUE: SYSERR (root): /etc/mail/sendmail.cf: linha 1870: Xmimedefang: nome do soquete local /var/spool/MIMEDefang/mimedefang.sock inseguro: Permissão negada

Já tentei seguir soluções para este problema:

  1. execute o sendmail como root. Funciona ok, mas é bastante inaceitável, já que eu quero evitar rodar meus daemons como root

  2. execute o sendmail como defang ou execute o mimedefang como o mesmo usuário do sendmail. Parece ok, mas também quer evitar isso, pois há muitos arquivos de configuração, diretórios, etc., o que exigiria a alteração de permissões e / ou propriedade, de modo que todo o processo se tornou muito propenso a erros.

  3. Basta alterar a permissão do arquivo de soquete, mas ele é recriado toda vez que o mimedefang é iniciado. Eu poderia modificar adequadamente os scripts apropriados em /etc/init.d mas não quero evitar isso porque minhas alterações podem ser solucionadas com atualizações futuras desses pacotes.

Você poderia sugerir alguma outra solução? Existem opções disponíveis no sendmail ou mimedefang, que estão relacionadas com permissões?

    
por user71061 03.03.2011 / 17:51

2 respostas

1

O Sendmail é executado como root e forks sempre que os processos necessários forem executados como outro usuário (smmsp, smmta, etc). Então, sim, execute-o como root e verifique se você está executando a versão mais recente. Se você quer rodar o sendmail como não-root, faça esse usuário parte do grupo defang. Observe que o grupo defang também possui direitos de leitura no soquete.

EDIT: (depois de ler os comentários abaixo) Para tornar o grupo de soquetes de leitura-gravação você tem que usar umask apropriadamente antes de iniciar o milter (consulte a seção Notas no link fornecido).

    
por 04.03.2011 / 10:19
0

No meu caso, não precisei definir umask para criar um soquete. Eu só preciso executar o opendkim com o mesmo usuário e grupo que o sendmail ( RunAsUid , RunAsGid ) e ter o diretório usado para o soquete com 600 permission ( S_IRUSR|S_IWUSR ).

Você pode verificar isso no sendmail sources [1]:

  • sendmail / milter.c
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);
  • libsmutil / safefile.c
/*
**  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

    
por 09.10.2016 / 22:20