Como restringir os recursos de login dos usuários no Ubuntu
Introdução
Uma parte fundamental da administração do sistema é configurar e gerenciar usuários e grupos. Parte desta tarefa envolve monitorar os recursos de login de todas as entidades do sistema.
Neste guia, apresentaremos as ideias por trás do gerenciamento de usuários e do log de autenticação.
Estaremos explorando esses conceitos em um servidor Ubuntu 22.04, mas você pode acompanhar em qualquer distribuição Linux moderna. Você pode configurar um servidor Ubuntu 22.04 para este tutorial seguindo nosso guia de configuração inicial do servidor no Ubuntu 22.04.
Conforme mencionado no tutorial anterior desta série, alguns dos usuários em seu servidor podem estar associados a serviços e não devem ser usados como contas comuns.
Nesta seção, você revisará como restringir os recursos de login desses usuários de várias maneiras.
Como restringir o acesso com /etc/passwd
Um método de restringir os recursos de login é definir o shell de login da conta para um valor especial.
Um exemplo disso é o usuário messagebus
, que você pode usar grep para procurar dentro do arquivo /etc/passwd
:
- less /etc/passwd | grep messagebus
Outputmessagebus:x:102:105::/nonexistent:/usr/sbin/nologin
O valor final é o shell ou o comando que é executado quando o login é bem-sucedido. Nesse caso, o valor é definido como /usr/sbin/nologin
.
Se você tentar mudar para o usuário messagebus
usando sudo su
, ele falhará:
- sudo su messagebus
OutputThis account is currently not available.
Você recebe esta mensagem porque o shell para messagebus
está definido como /usr/sbin/nologin
.
Você pode usar a ferramenta usermod
para alterar o shell de login padrão de um usuário (geralmente /bin/bash
) para um shell inexistente como nologin
quando precisar para impedi-los de fazer login.
- sudo usermod -s /usr/sbin/nologin username
Como restringir o acesso com /etc/shadow
Outro método semelhante de restrição de acesso é usar o arquivo /etc/shadow
. Este arquivo contém os valores de senha com hash de cada usuário no sistema.
Você pode usar less
para visualizar o arquivo inteiro:
- sudo less /etc/shadow
Output. . .
uuidd:*:19105:0:99999:7:::
tcpdump:*:19105:0:99999:7:::
sshd:*:19105:0:99999:7:::
pollinate:*:19105:0:99999:7:::
landscape:*:19105:0:99999:7:::
lxd:!:19180::::::
sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::
O segundo campo (aquele que começa com $y$j9T$4gyO…
na última linha) contém o valor da senha com hash.
As contas do sistema têm um asterisco (*
) em vez de um valor de hash complexo. As contas com um asterisco no segundo campo não tiveram uma senha definida e não podem ser autenticadas por senha sem alterá-la.
Você pode desabilitar um valor de senha (na verdade, tornando uma conta com uma senha equivalente ao valor do asterisco), precedendo o valor do hash com um ponto de exclamação (!
).
Duas ferramentas podem fazer isso \bloqueando a conta especificada.
O comando passwd
pode ser bloqueado com o sinalizador -l
e desbloqueado com o sinalizador -u
:
- sudo passwd -l sammy
- sudo less /etc/shadow | grep sammy
Outputsammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::
Como você pode ver, a senha com hash é mantida, mas torna-se inválida colocando um !
na frente dela.
A conta pode ser desbloqueada novamente digitando:
- sudo passwd -u sammy
Operações equivalentes estão disponíveis usando o comando usermod
. Os sinalizadores correspondentes são -L
para bloqueio e -U
para desbloqueio:
- sudo usermod -L sammy
- sudo usermod -U sammy
Observação: embora esse método de restrição de acesso funcione corretamente para todos os logins baseados em senha, os métodos de login sem senha (por exemplo, com chaves ssh) ainda permanecerão disponíveis.
Como restringir o acesso com /etc/nologin
Pode haver algumas situações em que você precisa desabilitar todos os logins de conta, exceto root.
Isso pode ocorrer devido a uma manutenção detalhada ou porque uma ou mais de suas contas de usuário foram comprometidas.
Em qualquer caso, isso pode ser feito criando um arquivo em /etc/nologin
:
- sudo touch /etc/nologin
Isso impedirá o login de qualquer conta que não tenha privilégios de superusuário.
Com um arquivo /etc/nologin
vazio, isso apenas descarrega o usuário de volta ao seu shell local sem qualquer explicação.
O que realmente está acontecendo é que o conteúdo do arquivo é devolvido ao usuário. Se você adicionar uma mensagem, os usuários receberão uma explicação para a falha de login:
- sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin'
Agora, ao tentar fazer login com uma senha, você receberá esta mensagem:
- ssh sammy@host
Outputsammy@host's password:
Planned maintenance. Log in capabilities will be restored at 1545 UTC
Connection closed by host
Os usuários root ainda podem fazer login normalmente. Remova o arquivo \/etc/nologin para reverter a restrição de login:
- sudo rm /etc/nologin
Conclusão
A autenticação do usuário no Linux é uma área relativamente flexível do gerenciamento do sistema. Existem muitas maneiras de atingir o mesmo objetivo com ferramentas amplamente disponíveis.
Agora você deve saber como restringir o uso por meio de vários métodos.
Na próxima parte desta série de tutoriais, você revisará como monitorar logins de usuários.