Atualizado: 24/10/2024

Gerenciando Senhas - Linux

Comando passwd

O comando passwd é utilizado para gerenciar senhas, permitindo que os usuários mudem sua própria senha. Além disso, administradores podem usar este comando para alterar a senha de outro usuário. Também é possível usar esta ferramenta para definir a validade da senha e realizar a manutenção de contas (como bloquear ou desbloquear).

passwd [opções] [NOME_DE_USUÁRIO]

O comando aceita dois parâmetros opcionais: opções e o argumento NOME_DE_USUÁRIO. O argumento NOME_DE_USUÁRIO indica o login do usuário para o qual a senha será definida. Se este parâmetro não for especificado, a senha será alterada para o usuário atual.

O parâmetro opções define as opções de configuração da senha e permite obter o status da senha do usuário. As principais opções são:

  • -d, --delete: remove a senha da conta especificada.

  • -e, --expire: força a expiração da senha da conta especificada. No próximo login, o usuário será obrigado a mudar a senha.

  • -k, --keep-tokens: muda a senha somente se o prazo de validade tiver expirado.

  • -l, --lock: bloqueia a senha da conta especificada.

  • -S, --status: informa o estado da senha da conta especificada.

  • -u, --unlock: desbloqueia a senha da conta especificada.

  • -n, --mindays MIN_DAYS: define o número mínimo de dias antes que a senha possa ser alterada.

  • -i, --inactive INACTIVE: desativa automaticamente a conta se não for usada durante o período especificado pelo parâmetro INACTIVE (número de dias).

  • -w, --warndays WARN_DAYS: define o número de dias antes da expiração da senha, durante os quais o usuário receberá um aviso.

  • -x, --maxdays MAX_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).

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. Este arquivo define regras e configurações que controlam a complexidade e a confiabilidade das senhas dos usuários. Ele é usado pelo sistema de módulo de autenticação plugável (PAM) para garantir o cumprimento das políticas de senha no sistema, como comprimento mínimo, requisitos de complexidade e prevenção de reutilização. Administradores podem editar este arquivo para ajustar os parâmetros da política de senhas conforme suas exigências de segurança. Com privilégios de administrador (sudo), é possível abrir este arquivo em um editor de texto e modificar seu conteúdo. Por padrão, o arquivo possui o seguinte conteúdo:

# 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:

  • minlen: define o comprimento mínimo da senha (oito caracteres).

  • minclass: estabelece o número mínimo de classes de caracteres requeridos (três classes, como minúsculas, maiúsculas e dígitos).

  • maxrepeat: limita o número máximo de caracteres idênticos consecutivos (são permitidos dois caracteres idênticos consecutivos).

  • minsequence: define o comprimento mínimo de uma sequência (quatro caracteres, como "1234" ou "abcd").

  • maxclassrepeat: 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).

  • reject_username: garante que a senha não contenha o nome do usuário.

Comando chage

O comando chage é utilizado para modificar as políticas de expiração e validade da senha de um usuário. O objetivo desse comando é garantir o cumprimento das políticas de senhas e aumentar a segurança do sistema, estabelecendo limites para a validade da senha, o tempo entre alterações de senha e o número máximo de tentativas de login fracassadas antes de bloquear o usuário. Isso ajuda a garantir a troca regular de senhas e incentiva os usuários a criar senhas fortes e seguras.

O comando possui a seguinte sintaxe:

chage [opções] NOME_DE_USUÁRIO

O parâmetro obrigatório NOME_DE_USUÁRIO representa o login do usuário. As opções opcionais incluem:

  • -d, --lastday LAST_DAY: define a data da última alteração da senha como LAST_DAY.

  • -E, --expiredate EXPIRE_DATE: define a data de expiração da conta como EXPIRE_DATE.

  • -i, --iso8601: usa o formato AAAA-MM-DD ao imprimir datas.

  • -i, --inactive INACTIVE: desativa automaticamente a conta se não for usada durante o período especificado pelo parâmetro INACTIVE (número de dias).

  • -l, --list: mostra informações sobre a expiração da conta.

  • -m, --mindays MIN_DAYS: define o número mínimo de dias antes que a senha possa ser alterada.

  • -M, --maxdays MAX_DAYS: define o número máximo de dias antes que a senha deva ser alterada.

  • -w, --warndays WARN_DAYS: define o número de dias antes da expiração da senha, durante os quais o usuário receberá um aviso.

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 verifica a consistência dos arquivos /etc/passwd, /etc/shadow e /etc/group. O objetivo deste comando é assegurar que as contas de usuários e grupos listadas nesses arquivos são válidas e identificar quaisquer discrepâncias entre eles. Isso é útil para manter a integridade e a segurança do sistema Linux, pois pode ajudar a detectar e corrigir erros que possam surgir devido à edição manual desses arquivos. Por exemplo, se uma conta de usuário existir no arquivo passwd, mas não no arquivo shadow, o comando pwck identificará essa discrepância e sugerirá ao usuário que a corrija.

O exemplo de uso:

sudo pwck /etc/passwd

O comando pwck não aceita opções adicionais. Se não houver discrepâncias, ele não exibirá nenhuma mensagem. Caso contrário, ele exibirá uma mensagem de erro indicando a discrepância encontrada.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com