Como exibir informações de política de senha para um usuário (Ubuntu)?

4

Documentação do Ubuntu > Ubuntu 9.04 > Guia do Servidor Ubuntu > Segurança > Gerenciamento de usuários indica que há um comprimento mínimo de senha padrão para o Ubuntu:

By default, Ubuntu requires a minimum password length of 4 characters

Digamos que a senha seja modificada pelo usuário usando passwd . Existe um comando para exibir as políticas de senha atuais para um usuário (como o comando chage exibe as informações de expiração de senha para um usuário específico)?

> sudo chage -l SomeUserName
Last password change                                : May 13, 2010
Password expires                                    : never
Password inactive                                   : never
Account expires                                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

Isso é, em vez de examinar vários locais que controlam a política e os interpreta, pois o processo pode conter erros. Um comando que informa a política composta seria usado para verificar as etapas de configuração da política.

    
por C.W.Holeman II 09.06.2010 / 16:42

2 respostas

5

O OP confunde duas questões diferentes: política e tamanho da senha .

Como já foi dito por @BillThor, o comprimento da senha é tratado pelo módulo PAM, sob a palavra-chave não verdadeiramente propícia obscure , no arquivo /etc/pam.d/common-password, que contém a seguinte linha:

 password        [success=1 default=ignore]      pam_unix.so obscure sha512

A palavra-chave obscure significa (de acordo com man pam_unix ):

 obscure
       Enable some extra checks on password strength. These checks are based on the "obscure" checks in the
       original shadow package. The behavior is similar to the pam_cracklib module, but for
       non-dictionary-based checks. The following checks are implemented:

       Palindrome
           Verifies that the new password is not a palindrome of (i.e., the reverse of) the previous one.

       Case Change Only
           Verifies that the new password isn't the same as the old one with a change of case.

       Similar
           Verifies that the new password isn't too much like the previous one.

       Simple
           Is the new password too simple? This is based on the length of the password and the number of
           different types of characters (alpha, numeric, etc.) used.

       Rotated
           Is the new password a rotated version of the old password? (E.g., "billy" and "illyb")

A prescrição por obscure pode ser sobrescrita da seguinte forma: em /etc/pam.d/common-password, reescreva a linha acima como

 password        [success=1 default=ignore]      pam_unix.so obscure sha512 minlen=20

ou o que você quiser.

Encontrar exatamente onde a senha de tamanho mínimo é definida requer mergulhar nas profundezas do pam:

  # apt-cache search pam_unix.so
    libpam-modules - Pluggable Authentication Modules for PAM
  # apt-get source libpam-modules

... e depois para descobrir onde o comprimento mínimo do passord é definido:

  # grep -rl UNIX_MIN_PASS_LEN
    modules/pam_unix/support.h
    modules/pam_unix/support.c
    debian/patches-applied/007_modules_pam_unix
    debian/patches-applied/055_pam_unix_nullok_secure

Examinando os patches debian, você verá que o parâmetro UNIX_MIN_PASS_LEN (o 27º parâmetro possível) corresponde a uma variável chamada minlen , que é configurada em /modules/pam_unix/support.c. No entanto, um dos patches debian corrige pass_min_len : o arquivo debian / patches-applied / 007_modules_pam_unix contém as linhas:

 -       int pass_min_len = 0;
 +       int pass_min_len = 6;

e o arquivo debian / Changelog especifica:

  • Further cleanups of 007_modules_pam_unix -- don't use a global variable for pass_min_len, don't gratuitously move the length checking into the "obscure" checks, and internationalize the error strings.

Eu sempre não gostei do PAM e, por essa razão: para localizar um parâmetro trivial como o tamanho mínimo da senha, é obrigatório procurar no código-fonte.

As informações exibidas por chage -l username estão completamente contidas no arquivo / etc / shadow: A página Man estados:

shadow is a file which contains the password information for the system's accounts and optional aging information.

Os campos de cada entrada são:

Login name, encrypted password, date of last password change, minimum password age, maximum password age, password warning period, password inactivity period, account expiration date, plus a reserved field for future use.

Apenas para confirmar, um strace do comando chage mostra quais arquivos são abertos,

 # strace -e trace=open -f chage -l myusername
   open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
   open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3                                                                                                                                                                                                               
   open("/proc/filesystems", O_RDONLY)     = 3                                                                                                                                                                                                                                    
   open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3                                                                                                                                                                                                                 
   open("/etc/passwd", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = 3                                                                                                                                                                                                               
   open("/etc/shadow", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = 4                                                                                                                                                                                                               
   open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 5                                                                                                                                                                                                                 
   open("/usr/share/locale/en_US/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such      file or directory)                                                                                                                                                                        
   open("/usr/share/locale/en/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                                           
   open("/usr/share/locale-langpack/en_US/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                               
   open("/usr/share/locale-langpack/en/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)                                                                                                                                                                  
   open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 5                                                                                                                                                                                                                                 
   Last password change                                    : mag 05, 2014                                                                                                                                                                                                         
   Password expires                                        : never                                                                                                                                                                                                                
   Password inactive                                       : never                                                                                                                                                                                                                
   Account expires                                         : never                                                                                                                                                                                                                
   Minimum number of days between password change          : 0                                                                                                                                                                                                                    
   Maximum number of days between password change          : 99999                                                                                                                                                                                                                
   Number of days of warning before password expires       : 7                                                                                                                                                                                                                    
   +++ exited with 0 +++                                                 
    
por 06.08.2014 / 14:29
2

A política é encontrada em /etc/pam.d/common-password. A política padrão é obscura, documentada na página man do pam_unix. Você pode querer instalar o pam_cracklib e adicionar algumas políticas de adição. As alterações de senha pelo root geralmente evitam políticas.

Se você não estiver usando o pam para verificar a nova senha, a política pertencerá à ferramenta usada para alterar a senha. Isso pode acontecer se você estiver usando o LDAP ou outro banco de dados de senhas externo e alterando a senha diretamente no banco de dados.

    
por 09.06.2010 / 17:51