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 / 890012
Accepted
Dessa Simpson
Dessa Simpson
Asked: 2017-12-30 07:42:38 +0800 CST2017-12-30 07:42:38 +0800 CST 2017-12-30 07:42:38 +0800 CST

PAM aceitando qualquer senha para usuários válidos

  • 772

Acabei de vincular minha estação de trabalho Arch Linux ao Samba AD que configurei para nossa empresa. Eu testei e funcionou, ou assim eu pensei. Aceitou minha senha, criou meu homedir e tudo mais, e me conectou. O que esqueci de testar foi o que não aceitava. Acontece que, desde que o nome de usuário seja válido (AD ou local, não importa), ele aceitará qualquer senha. Alguém pode me indicar o que fiz de errado?

Estou usando SSSD para gerenciar a conexão AD. Aqui está o meu /etc/pam.d/system-auth:

#%PAM-1.0

auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_env.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so
active-directory
  • 1 1 respostas
  • 3976 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2018-01-02T23:34:53+08:002018-01-02T23:34:53+08:00

    Vamos analisar detalhadamente a seção de autenticação da configuração do PAM.

    auth        sufficient    pam_unix.so nullok try_first_pass
    

    A primeira linha diz: "Se este teste for bem-sucedido, pare de verificar e aceite o login; se falhar, continue verificando. Verifique se há usuários/senhas configurados em /etc/passwde /etc/shadow.Se o usuário existir e o campo de senha estiver em branco, o usuário será permitido em." Esta é a verificação de autenticação para contas de usuários locais.

    auth        requisite     pam_succeed_if.so uid >= 500 quiet
    

    A segunda linha diz: "Se este teste falhar, pare de verificar e rejeite o login; se for bem-sucedido, continue verificando. O valor UID do usuário deve ser 500 ou maior." Isso evita logins em contas do sistema usando senhas no AD ou em outro banco de dados de usuário compartilhado.

    auth        sufficient    pam_sss.so use_first_pass
    

    A terceira linha diz: "Se este teste for bem-sucedido, pare de verificar e aceite o login; se falhar, continue verificando. Verifique com o SSSD." Esta é a verificação de contas do AD.

    auth        required      pam_env.so
    

    A quarta linha diz: "Se esta linha falhar, rejeite o login; mas continue verificando até o final desta seção em qualquer caso. Defina quaisquer variáveis ​​de ambiente descritas em /etc/security/pam_env.confe/ou /etc/environment."

    Agora pense no que acontecerá se o usuário existir (no AD ou no local /etc/passwd), mas as verificações de senha falharem. Primeiro, pam_unix.sofalha; mas isso não pode causar uma rejeição porque isso o impediria de usar qualquer conta de usuário baseada em AD.

    Assim, o processo segue para a segunda linha. Se o usuário tiver um mapeamento de UID válido e o número de UID for 500 ou maior, isso também será bem-sucedido. As únicas maneiras de isso falhar seriam se o UID fosse menor que 500.

    A terceira linha faz a verificação de AD; isso também falha. Mas, novamente, "suficiente" é usado para permitir a configuração de quaisquer outros métodos de autenticação após este, para que o processo continue, assim como com pam_unix.so.

    Neste ponto, a quarta linha deve ser executada com sucesso para permitir a entrada do usuário. Mas isso é apenas configurar variáveis ​​de ambiente. man pam_envme diz que o pam_env.somódulo retornará um valor PAM_SUCCESS se as variáveis ​​de ambiente foram definidas com sucesso. Mas como este é o último módulo PAM nesta pilha, e nenhum dos outros módulos terá colocado uma rejeição absoluta até agora, o resultado deste módulo se tornará o resultado geral da fase de autenticação.

    Para corrigir isso, a fase de autenticação precisa de um pam_deny.sono final, para interromper qualquer tentativa de login sempre que todos os mecanismos de autenticação reais falharem em aceitar o usuário.

    Além disso, o pam_env.soprovavelmente deve acontecer mais cedo no processo, para que a inicialização da variável de ambiente ocorra da mesma maneira para todos os usuários válidos. Se isso não funcionar no início da authfase, pam_env.soprovavelmente deve ir para a sessionfase; man pam_envdiz que funcionará em uma authou duas sessionfases.

    Então, minha sugestão inicial seria mudar a authseção da sua configuração do PAM para isso:

    auth        required      pam_env.so
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        requisite     pam_succeed_if.so uid >= 500 quiet
    auth        sufficient    pam_sss.so use_first_pass
    auth        requisite     pam_deny.so
    

    Assim, a funcionalidade seria:

    • Defina variáveis ​​de ambiente para o usuário. Se isso falhar, algo está seriamente errado de qualquer maneira.
    • Verifique a senha local; se for bem sucedido, aceite o login e encerre esta fase.
    • Rejeite qualquer usuário com UID menor que 500 neste momento (= sem root ou login de conta do sistema com uma conta AD!)
    • Verifique a senha no AD; se for bem sucedido, aceite o login e encerre esta fase.
    • Se chegarmos a este ponto, nenhum dos mecanismos de autenticação reais aceitou a senha, então rejeite a tentativa de login incondicionalmente.

    Se isso pam_env.socausar problemas quando colocado no início da authfase, você pode tentar apenas comentar; parece que anteriormente foi ignorado em todos os logins válidos.

    Como sempre, ao alterar as configurações do PAM, primeiro abra uma sessão no sistema e certifique-se de que ela seja sudoroot ou tenha privilégios de root completos disponíveis: então faça backup da configuração atual. Faça a alteração , mas não faça logout para testá-la: em vez disso, teste-a abrindo outra sessão. Se falhar, você ainda terá a sessão original conectada, para que possa restaurar facilmente a configuração antiga, se necessário. Se este for um sistema de produção ou de outra forma crítico, abra duas sessões raiz antes de fazer a alteração, apenas para proteger contra erros de dedos sendo mais rápidos que o cérebro.

    • 17

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