AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1166586
Accepted
user4540359
user4540359
Asked: 2024-10-15 05:00:57 +0800 CST2024-10-15 05:00:57 +0800 CST 2024-10-15 05:00:57 +0800 CST

Maneira correta de dar suporte a e-mails de usuários e serviços com Postfix/Dovecot

  • 772

Estou tentando entender a abordagem correta para oferecer suporte a e-mail via Postfix/Dovecot para usuários autenticados em rede e vários serviços de rede, como o Gitlab.

Meu servidor de autenticação de rede é o Ubuntu 22.04, usando OpenLDAP e Kerberos. Todos os meus usuários autenticados em rede herdam das classes posixAccountde PostfixBookMailAccountobjeto e enquanto minhas contas de serviço herdam apenas da última. Esta é uma tentativa de permitir login em várias máquinas apenas dos meus usuários, mas não das contas de serviço, mas para dar suporte a e-mail para ambos.

Tentei configurar o Dovecot para usar o pamdriver que funcionou para o e-mail do usuário, mas o Gitlab não funcionou. Modifiquei as configurações do PAM (que utilizavam Kerberos, mas não LDAP) adicionando LDAP antes do Kerberos. Isso incluiu configurar o PAM LDAP para pesquisar com base em mailEnabledem vez de posixAccountpara pesquisa do usuário, mas algo pode estar errado, pois ainda funcionou para usuários, mas não para serviços.

Também tentei configurar o Dovecot para usar o ldapdriver e fazer uma busca semelhante, mailEnabledmas algo também está errado, pois não funcionou para nenhuma conta.

Parece que eu poderia capitular e simplesmente criar contas de usuário para serviços como o Gitlab, mas isso desperta minha paranoia de segurança.

Antes de girar minhas rodas muito mais longe ou ir na direção errada, eu gostaria primeiro de entender se faz sentido distinguir essas duas fontes de e-mail ou se estou apenas pensando demais. Se eu deveria distinguir, alguém pode me indicar materiais de referência que descrevam essa abordagem ou fornecer algumas dicas se houver / quais considerações fazer ao configurar Postfix/Dovecot. Até agora, não tenho nenhuma combinação que se adapte a ambos os tipos de conta. Minha pesquisa na web não revelou nada sobre qual abordagem adotar e, portanto, nenhum material relevante.

Meu 10-auth.confcontém:

auth_krb5_keytab = /etc/dovecot/dovecot.keytab
auth_mechanisms = plain login gssapi

onde o keytab foi preenchido com imap, nslcde smtpprincipais.

Quando configurado para PAM, meu auth-network.conf.extse parece com:

passdb {
  driver = pam
}
userdb {
  driver = passwd
  args = uid=vmail gid=vmail home=/srv/vmail/%u mail=maildir:/srv/vmail/%u/Maildir
}

e quando configurado para LDAP é:

passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
userdb {
  driver = prefetch
}
userdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
email
  • 2 2 respostas
  • 86 Views

2 respostas

  • Voted
  1. u1686_grawity
    2024-10-16T00:56:30+08:002024-10-16T00:56:30+08:00

    Parece que eu poderia capitular e simplesmente criar contas de usuário para serviços como o Gitlab, mas isso desperta minha paranoia de segurança.

    Essa é a maneira padrão de fazer isso. O conceito relevante é que a existência de uma conta, ou a capacidade de autenticação como uma conta, não deve ser vinculada à autorização para que essa conta acesse serviços – por exemplo, é por isso que o PAM tem pilhas separadas auth(autenticação) e account(autorização) para tudo.

    • autenticação: determinar quem é o cliente
    • autorização: determinar o que o cliente tem permissão para fazer

    Então você pode ter autenticação baseada em Kerberos (GSSAPI que ignora PAM, ou senha via PAM) e ainda ter o serviço verificando autorização chamando pam_ldap.so de sua accountpilha PAM. A maneira padrão é usar o authorizedServiceatributo LDAP, que corresponde 1:1 ao nome do serviço LDAP (mas você pode estendê-lo com valores personalizados para sistemas não baseados em PAM).

    Dessa forma, suas contas de "serviço" podem ser autorizadas a acessar apenas serviços específicos – como SMTP – mas ainda impedidas de usar SSH/Telnet/cron/sudo, apesar de serem uma posixAccount, pois não teriam a authorizedService: sshdpermissão para logins SSH.

    Como alternativa, você pode pam_succeed_ifexigir a associação a um grupo POSIX específico (por exemplo, se seus usuários regulares forem membros de 'usuários', mas contas de serviço não), para atingir o mesmo objetivo de impedir que contas de serviço efetuem login via SSH e coisas do tipo.


    Em comparação com o AD, que praticamente não faz distinção entre contas "completas" e contas "somente LDAP", qualquer serviço que precise de acesso de leitura LDAP obtém apenas uma conta de usuário "completa" (é o único tipo que existe) e todas as formas de acesso são controladas por meio de ACLs, não pela existência de contas.

    • 0
  2. Best Answer
    user4540359
    2024-11-06T04:19:12+08:002024-11-06T04:19:12+08:00

    Não tenho certeza se minha aplicação dessa abordagem está completa, mas pelo menos está funcionando para e-mail. Meus usuários autenticados pela rede agora têm um authorizedServiceatributo para os seguintes serviços:

    • autofs
    • gdm-senha
    • sshd
    • seu
    • usuário systemd

    enquanto meus usuários de serviço gostam de gitlabnão ter nenhum. As partes relevantes do meu /etc/sssd/sssd.confem cada máquina cliente e o próprio servidor de e-mail contém:

    [domain/EXAMPLE.COM]
    auth_provider = krb5
    krb5_server = sso.example.com
    krb5_realm = EXAMPLE.COM
    access_provider = ldap
    chpass_provider = krb5
    id_provider = ldap
    ldap_id_use_start_tls = true
    ldap_uri = ldap://sso.example.com
    ldap_schema = rfc2307
    ldap_search_base = dc=example,dc=com
    ldap_default_bind_dn = ...
    ldap_default_authtok = ...
    ldap_access_order = authorized_service
    ldap_user_authorized_service = authorizedService
    ldap_access_filter = authorizedService
    

    onde example.com/EXAMPLE.COMestá seu domínio ;)

    Acho que sem adicionar um atributo de serviço autorizado sunão consegui alternar para outro usuário como:

    su someone
    

    e sem isso gdm-passwordnão consegui fazer login pela tela de bloqueio.

    Não encontrei muitas informações sobre o uso desse atributo, o que me surpreende um pouco se essa for a abordagem padrão. Este link https://freeradius-users.freeradius.narkive.com/IW953CLH/ldap-authorizedservice-attribute-matching#post2 ofereceu dicas sobre quais serviços eu deveria autorizar e também sugere quais outros serviços são necessários se você tiver algum gerenciador de exibição diferente.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve