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.