Gerenciando Senhas - Linux
Comando passwd
O comando passwd
passwd [opções] [NOME_DE_USUÁRIO]
O comando aceita dois parâmetros opcionais: opções
NOME_DE_USUÁRIO
NOME_DE_USUÁRIO
O parâmetro opções
: remove a senha da conta especificada.-d, --delete
: força a expiração da senha da conta especificada. No próximo login, o usuário será obrigado a mudar a senha.-e, --expire
: muda a senha somente se o prazo de validade tiver expirado.-k, --keep-tokens
: bloqueia a senha da conta especificada.-l, --lock
: informa o estado da senha da conta especificada.-S, --status
: desbloqueia a senha da conta especificada.-u, --unlock
: define o número mínimo de dias antes que a senha possa ser alterada.-n, --mindays MIN_DAYS
: desativa automaticamente a conta se não for usada durante o período especificado pelo parâmetro INACTIVE (número de dias).-i, --inactive INACTIVE
: define o número de dias antes da expiração da senha, durante os quais o usuário receberá um aviso.-w, --warndays WARN_DAYS
: define o número máximo de dias antes que a senha deva ser alterada. Por padrão, esse valor é 99999 dias (cerca de 273 anos).-x, --maxdays MAX_DAYS
Vamos criar um usuário chamado "superuser1" e depois alterar sua senha:
>programicio@Programicio:~$ sudo useradd superuser1 programicio@Programicio:~$ sudo passwd superuser1 New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic Retype new password: passwd: password updated successfully
Como visto no exemplo, o Linux considerou a senha inserida como fraca, mas a senha foi alterada com sucesso.
Se for necessário remover completamente a senha, pode-se usar a opção -d
programicio@Programicio:~$ sudo passwd -d superuser1 passwd: password changed.
Configurando Políticas de Senhas
Para configurar políticas de verificação de qualidade das senhas, o Linux utiliza o arquivo /etc/security/pwquality.conf
sudo
# Configuration for systemwide password quality limits # Defaults: # # Number of characters in the new password that must not be present in the # old password. # difok = 1 # # Minimum acceptable size for the new password (plus one if # credits are not disabled which is the default). (See pam_cracklib manual.) # Cannot be set to lower value than 6. # minlen = 8 # # The maximum credit for having digits in the new password. If less than 0 # it is the minimum number of digits in the new password. # dcredit = 0 # # The maximum credit for having uppercase characters in the new password. # If less than 0 it is the minimum number of uppercase characters in the new # password. # ucredit = 0 # # The maximum credit for having lowercase characters in the new password. # If less than 0 it is the minimum number of lowercase characters in the new # password. # lcredit = 0 # # The maximum credit for having other characters in the new password. # If less than 0 it is the minimum number of other characters in the new # password. # ocredit = 0 # # The minimum number of required classes of characters for the new # password (digits, uppercase, lowercase, others). # minclass = 0 # # The maximum number of allowed consecutive same characters in the new password. # The check is disabled if the value is 0. # maxrepeat = 0 # # The maximum number of allowed consecutive characters of the same class in the # new password. # The check is disabled if the value is 0. # maxclassrepeat = 0 # # Whether to check for the words from the passwd entry GECOS string of the user. # The check is enabled if the value is not 0. # gecoscheck = 0 # # Whether to check for the words from the cracklib dictionary. # The check is enabled if the value is not 0. # dictcheck = 1 # # Whether to check if it contains the user name in some form. # The check is enabled if the value is not 0. # usercheck = 1 # # Length of substrings from the username to check for in the password # The check is enabled if the value is greater than 0 and usercheck is enabled. # usersubstr = 0 # # Whether the check is enforced by the PAM module and possibly other # applications. # The new password is rejected if it fails the check and the value is not 0. # enforcing = 1 # # Path to the cracklib dictionaries. Default is to use the cracklib default. # dictpath = # # Prompt user at most N times before returning with error. The default is 1. # retry = 3 # # Enforces pwquality checks on the root user password. # Enabled if the option is present. # enforce_for_root # # Skip testing the password quality for users that are not present in the # /etc/passwd file. # Enabled if the option is present. # local_users_only
Cada opção aqui está comentada por padrão e precedida por um comentário explicativo. As principais opções são:
: define o comprimento mínimo da senha (oito caracteres).minlen
: estabelece o número mínimo de classes de caracteres requeridos (três classes, como minúsculas, maiúsculas e dígitos).minclass
: limita o número máximo de caracteres idênticos consecutivos (são permitidos dois caracteres idênticos consecutivos).maxrepeat
: define o comprimento mínimo de uma sequência (quatro caracteres, como "1234" ou "abcd").minsequence
: limita o número máximo de caracteres consecutivos de uma mesma classe de caracteres (são permitidos quatro caracteres consecutivos de uma mesma classe).maxclassrepeat
: garante que a senha não contenha o nome do usuário.reject_username
Comando chage
O comando chage
O comando possui a seguinte sintaxe:
chage [opções] NOME_DE_USUÁRIO
O parâmetro obrigatório NOME_DE_USUÁRIO
: define a data da última alteração da senha como LAST_DAY.-d, --lastday LAST_DAY
: define a data de expiração da conta como EXPIRE_DATE.-E, --expiredate EXPIRE_DATE
: usa o formato AAAA-MM-DD ao imprimir datas.-i, --iso8601
: desativa automaticamente a conta se não for usada durante o período especificado pelo parâmetro INACTIVE (número de dias).-i, --inactive INACTIVE
: mostra informações sobre a expiração da conta.-l, --list
: define o número mínimo de dias antes que a senha possa ser alterada.-m, --mindays MIN_DAYS
: define o número máximo de dias antes que a senha deva ser alterada.-M, --maxdays MAX_DAYS
: define o número de dias antes da expiração da senha, durante os quais o usuário receberá um aviso.-w, --warndays WARN_DAYS
Suponha que inicialmente criamos um usuário chamado superuser1
sudo useradd superuser1
Mesmo que a senha do usuário não tenha sido definida, a política de senha ainda se aplica a ele. Primeiro, vamos verificar as informações de expiração da senha da conta criada com o comando chage -l superuser1
programicio@Programicio:~$ sudo chage -l superuser1 Last password change : Mar 07, 2024 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
A saída do comando exibe as seguintes informações:
Last password change: mostra a data da última alteração da senha da conta.
Password expires: mostra a data de expiração da senha atual.
Password inactive: mostra a data em que a senha será desativada e a conta se tornará inacessível.
Account expires: mostra a data de expiração da conta, quando ela será desativada.
Minimum number of days between password change: mostra o número mínimo de dias que deve passar antes que a senha possa ser alterada.
Maximum number of days between password change: mostra o número máximo de dias que a senha pode ser usada antes de precisar ser alterada.
Number of days of warning before password expires: mostra o número de dias antes da expiração da senha durante os quais o usuário receberá um aviso.
Por exemplo, vamos alterar a data da última alteração da senha para 1 de dezembro de 2023:
sudo chage -d 2023-12-1 superuser1
E definir a data de expiração da senha para 31 de dezembro de 2023:
sudo chage -E 2023-12-31 superuser1
Vamos verificar novamente as informações de expiração da senha:
programicio@Programicio:~$ sudo chage -l superuser1 Last password change : Dec 01, 2023 Password expires : never Password inactive : never Account expires : Dec 31, 2023 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
Comando pwck
O comando pwck
/etc/passwd
/etc/shadow
/etc/group
passwd
shadow
pwck
O exemplo de uso:
sudo pwck /etc/passwd
O comando pwck