Criando uma política de senha no Linux

Olá novamente! As aulas começarão amanhã no novo grupo do curso Administrador Linux , e nesse sentido publicamos um artigo útil sobre o assunto.



No último tutorial, falamos sobre como usar o pam_cracklib para complicar senhas nos sistemas Red Hat 6 ou CentOS. No Red Hat 7, pam_pwquality substituiu cracklib como o módulo pam para verificação de senha. O módulo pam_pwquality também pam_pwquality suportado no Ubuntu e CentOS, bem como em muitos outros sistemas operacionais. Este módulo facilita a criação de políticas de senha para garantir que os usuários aceitem seus padrões de complexidade de senha.

Por um longo tempo, a abordagem usual das senhas era forçar o usuário a usar caracteres maiúsculos e minúsculos, números ou outros caracteres neles. Essas regras básicas de complexidade de senha foram promovidas ativamente nos últimos dez anos. Houve muita discussão sobre se isso é uma boa prática ou não. O principal argumento contra a definição de condições tão difíceis foi que os usuários escrevessem senhas no papel e as armazenassem de maneira insegura.

Outra política que foi recentemente questionada obriga os usuários a alterar suas senhas a cada x dias. Vários estudos foram realizados que mostraram que isso também é prejudicial à segurança.

Muitos artigos foram escritos sobre o tópico dessas discussões que justificam esse ou aquele ponto de vista. Mas não é isso que discutiremos neste artigo. Este artigo mostrará como definir corretamente a complexidade da senha e não gerenciar a política de segurança.

Configurações de diretiva de senha

Abaixo, você verá as configurações da política de senha e uma breve descrição de cada uma delas. Muitos deles são semelhantes aos parâmetros no módulo cracklib . Essa abordagem facilita a porta de suas políticas do sistema antigo.

  • difok - O número de caracteres na sua nova senha que NÃO deve estar presente na sua senha antiga. (O padrão é 5)
  • minlen - O tamanho mínimo da senha. (O padrão é 9)
  • ucredit - O número máximo de créditos para o uso de caracteres maiúsculos (se o parâmetro> 0) ou o número mínimo necessário de caracteres maiúsculos (se o parâmetro <0). O padrão é 1.
  • lcredit - O número máximo de créditos para o uso de caracteres minúsculos (se o parâmetro> 0) ou o número mínimo necessário de caracteres minúsculos (se o parâmetro <0). O padrão é 1.
  • dcredit - O número máximo de créditos para o uso de dígitos (se o parâmetro> 0) ou o número mínimo necessário de dígitos (se o parâmetro <0). O padrão é 1.
  • ocredit - O número máximo de créditos pelo uso de outros símbolos (se parâmetro> 0) ou o número mínimo necessário de outros símbolos (se parâmetro <0). O padrão é 1.
  • minclass - Define o número de classes necessárias. As classes incluem os parâmetros acima (maiúsculas, minúsculas, números, outros caracteres). O padrão é 0.
  • maxrepeat - O número máximo de vezes que um caractere é repetido em uma senha. O padrão é 0.
  • maxclassrepeat - O número máximo de caracteres consecutivos em uma única classe. O padrão é 0.
  • gecoscheck - Verifica se a senha contém alguma palavra das linhas GECOS do usuário. (Informações do usuário, por exemplo, nome real, local etc.) Padrão 0 (desativado).
  • dictpath - Permite desabilitar dicionários.
  • badwords - palavras separadas por espaço que são proibidas em senhas (nome da empresa, palavra "senha" etc.).

Se o conceito de empréstimos parecer estranho, tudo bem, tudo bem. Falaremos sobre isso em mais detalhes nas próximas seções.

Configuração da Política de Senha

Antes de começar a editar arquivos de configuração, é uma boa prática pré-escrever a política de senha básica. Por exemplo, usaremos as seguintes regras de complexidade:

  • A senha deve ter um comprimento mínimo de 15 caracteres.
  • Na senha, o mesmo caractere não deve ser repetido mais de duas vezes.
  • Em uma senha, as classes de caracteres podem ser repetidas até quatro vezes.
  • A senha deve conter caracteres de cada classe.
  • A nova senha deve ter 5 novos caracteres em comparação com a antiga.
  • Habilite a validação GECOS.
  • Negue as palavras "senha, senha, palavra, putório"

Agora, assim que definimos a política, podemos editar o arquivo /etc/security/pwquality.conf para reforçar os requisitos de complexidade da senha. Abaixo está um exemplo de arquivo de comentário para melhor compreensão.

 # Make sure 5 characters in new password are new compared to old password difok = 5 # Set the minimum length acceptable for new passwords minlen = 15 # Require at least 2 digits dcredit = -2 # Require at least 2 upper case letters ucredit = -2 # Require at least 2 lower case letters lcredit = -2 # Require at least 2 special characters (non-alphanumeric) ocredit = -2 # Require a character from every class (upper, lower, digit, other) minclass = 4 # Only allow each character to be repeated twice, avoid things like LLL maxrepeat = 2 # Only allow a class to be repeated 4 times maxclassrepeat = 4 # Check user information (Real name, etc) to ensure it is not used in password gecoscheck = 1 # Leave default dictionary path dictpath = # Forbid the following words in passwords badwords = password pass word putorius 

Como você deve ter notado, alguns parâmetros em nosso arquivo são redundantes. Por exemplo, o parâmetro minclass redundante, pois já usamos pelo menos dois caracteres da classe usando os campos de [u,l,d,o]credit . Nossa lista de palavras que não podem ser usadas também é redundante, pois proibimos a repetição de qualquer classe 4 vezes (todas as palavras da nossa lista são escritas em letras minúsculas). Eu incluí essas opções apenas para demonstrar como usá-las para configurar uma política de senha.
Depois de criar sua política, você pode forçar os usuários a alterar suas senhas na próxima vez que efetuarem login.

Outra coisa estranha que você deve ter notado é que os campos [u,l,d,o]credit contêm um número negativo. Isso ocorre porque números maiores ou iguais a 0 darão crédito pelo uso do caractere em sua senha. Se o campo contiver um número negativo, significa que é necessária uma certa quantia.

O que são empréstimos?

Eu os chamo de empréstimos, porque transmite com precisão seu objetivo. Se o valor do parâmetro for maior que 0, adicione o número de "créditos por caracteres" igual a "x" ao comprimento da senha. Por exemplo, se todos os parâmetros (u,l,d,o)credit definidos como 1 e o comprimento da senha necessário for 6, serão necessários 6 caracteres para atender ao requisito de comprimento, porque cada caractere é maiúsculo, minúsculo, dígito ou outro caractere lhe dará um empréstimo.

Se você definir dcredit como 2, teoricamente poderá usar uma senha de 9 caracteres e obter 2 créditos por caracteres para números, e a senha já poderá ser 10.

Dê uma olhada neste exemplo. Defino o tamanho da senha como 13, defino dcredit como 2 e todo o resto como 0.

 $ pwscore Thisistwelve Password quality check failed: The password is shorter than 13 characters $ pwscore Th1sistwelve 18 

Minha primeira verificação falhou porque a senha tinha menos de 13 caracteres. Na próxima vez, mudei a letra “I” para o número “1” e recebi dois créditos pelos números, o que equivalia à senha como 13.

Teste de senha

O pacote libpwquality fornece a funcionalidade descrita no artigo. Ele também vem com o programa pwscore , projetado para verificar a senha quanto à complexidade. Usamos isso acima para verificar empréstimos.

O utilitário pwscore lê a partir de stdin . Basta executar o utilitário e escrever sua senha, isso dará um erro ou um valor de 0 a 100.

O índice de qualidade da senha está relacionado ao parâmetro minlen no arquivo de configuração. Em geral, um indicador menor que 50 é considerado como uma "senha normal" e acima como uma "senha forte". Qualquer senha que passe nas verificações de qualidade (especialmente cracklib verificações forçadas por cracklib ) deve suportar ataques de dicionário, e uma senha com pontuação maior que 50 com a configuração padrão de minlen até um brute force .

Conclusão

A configuração do pwquality é pwquality e fácil em comparação com a inconveniência de usar o cracklib com a edição direta de arquivos pam . Neste guia, abordamos tudo o que você precisa para configurar políticas de senha nos sistemas Red Hat 7, CentOS 7 e até Ubuntu. Também conversamos sobre o conceito de empréstimos, que raramente são escritos em detalhes; portanto, esse tópico geralmente permanece incompreensível para quem nunca o havia encontrado antes.

Fontes:

página do manual pwquality
Página do manual pam_pwquality
página de manual do pwscore

Links úteis:

Escolhendo senhas seguras - Bruce Schneier
Lorrie Faith Cranor discute seus estudos de senha na CMU
O infame desenho animado xkcd na Entropy

Source: https://habr.com/ru/post/pt448996/


All Articles