Como desativo completamente uma conta?

48

Como desativo completamente uma conta? passwd -lnão permitirá que ninguém faça login em uma conta usando uma senha, mas você ainda pode fazer login por meio de chaves públicas / privadas. Como eu desabilitaria a conta completamente? Como uma correção rápida, renomeei o arquivo para authorized_keys_lockme. Existe outro caminho?

Braiam
fonte
3
Você está planejando reativá-lo eventualmente? Bloqueio do sistema? Caso contrário, eu simplesmente removeria a conta.
20911 Ken

Respostas:

59

A maneira correta de acordo com usermod(8)é:

usermod --lock --expiredate 1970-01-02 <username>

(Na verdade, o argumento para --expiredatepode ser qualquer data anterior à data atual no formato YYYY-MM-DD.)


Explicação:

  • --lockbloqueia a senha do usuário. No entanto, o login por outros métodos (por exemplo, chave pública) ainda é possível.

  • --expiredate YYYY-MM-DDdesativa a conta na data especificada. De acordo com man shadow 51970-01-01, é um valor ambíguo e não deve ser usado.

Eu testei isso na minha máquina. Não é possível efetuar login com senha nem chave pública após executar este comando.


Para reativar a conta posteriormente, você pode executar:

usermod --unlock --expiredate '' <username>
Christoph Wurm
fonte
7
Não use 1970-01-01, pois definirá o campo / etc / shadow expiration como 0. shadow (5) O valor 0 não deve ser usado, pois é interpretado como uma conta sem vencimento ou como vencimento em 01/01/1970. Por favor, use: usermod --lock --expiredate 1970-02-02 <username>
Marcus Maxwell
4
Seria ótimo se você também pudesse fornecer o método para reverter essa operação. Parece que usermod --unlock --expiredate '' usernamevai fazer isso.
22414 Bob
3
Adicionando ao que @MarcusMaxwell escreveu: A página de manual do usermoddiz:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3 22/06/16
1
Por que --expiredate 1não basta por si só?
Thomas Jensen
Mas sudo su usernameparece funcionar usando outra conta.
Xuhdev 14/04
10

Bloqueie a senha e altere o shell para /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(Ou mais concisamente sudo usermod -L -s /bin/nologin username.)

mattdm
fonte
Como altero o shell para / bin / nologin. '?
5
@mattdm Esta não é uma solução completa, pois o usuário ainda pode especificar um comando a ser executado. Por exemplo ssh username@hostname /bin/bash, o usuário receberá um prompt do bash, independentemente do shell padrão.
phunehehe
4
@phunehehe - você já experimentou? Você receberá, no log, "Usuário [nome de usuário] não permitido porque shell / bin / nologin não existe".
mattdm
2
Até onde eu sei, o comportamento do shell inválido não está realmente documentado. Por outro lado, a página de manual diz que se a senha tiver uma liderança !! no Linux, a conta será tratada como bloqueada, e isso realmente não funciona. Então, você sabe, documentação e realidade são apenas correspondências aproximadas de qualquer maneira. :)
mattdm
2
sudo chsh -s /bin/nologinseria melhor do que editar /etc/passwdmanualmente. Além disso, em alguns sistemas, é /sbin/nologin.
Mikel
3

Aqui está outra maneira simples. Você pode definir a conta do usuário expirada. Isso impedirá os logins com base em senha e ssh com base em chaves da conta, mas não toca na senha.

Para bloquear a conta:

# chage -E 0 username

A conta de usuário 'nome de usuário' será bloqueada no sistema. Para reativar a conta de usuário, faça o seguinte.

Para desbloquear a conta:

# chage -E -1 username

A conta de usuário 'nome de usuário' será reativada em seu sistema com a mesma senha de antes. O binário 'chage' faz parte do pacote shadow-utils no Red Hat Linux ou do pacote passwd no Debian Linux.

miklosq
fonte
3

Não tenho representante suficiente para comentar a resposta do Legate, mas queria compartilhar que essa resposta nos ajudou em outro caso de uso:

1.) conta em questão é uma conta de serviço local executando um aplicativo, não uma conta de usuário final.

2.) os usuários finais se conectam e sudo /bin/su <user>se tornam usuários e administram aplicativos devido a um requisito de trilha de auditoria de que a conta de serviço não pode ter a capacidade de login direto.

3.) a conta de serviço deve ter um shell válido ( /bin/bash, não /sbin/nologin), porque uma Enterprise Scheduling Platform (agente é executado como raiz localmente) deve ser capaz su - <user>e não possuir a su -s /bin/bash <user>capacidade de um shell completo e é necessária para executar tarefas remotamente para operações em lote maiores que abrangem vários servidores e bancos de dados.


Portanto ...

passwd -l <user>
Não atende a restrições porque a autenticação de chave pública ignora o PAM e ainda permite o login direto.

usermod -s /sbin/nologin <user>
Não satisfaz restrições porque quebra o agendador da empresa

usermod --lock --expiredate 1970-01-01 <user>
Este é o nosso vencedor. O login remoto é desativado, mas o root ainda pode su <user>, assim como outros usuários, sudopara que o planejador funcione corretamente e que os usuários finais autorizados possam se tornar a conta de serviço de destino, conforme necessário.

Obrigado pela solução!

user1880028
fonte
1

Para excluir completamente, use userdel.

Observe que, se você excluir uma conta, existe o risco de que seu ID de usuário ainda seja usado no sistema de arquivos em algum lugar, e um novo usuário herdará a propriedade desses arquivos se ele vier com o mesmo ID de usuário.

Você deseja alterar o proprietário de todos os arquivos pertencentes ao usuário excluído.

Se você deseja adicionar o usuário novamente mais tarde, salve suas linhas de /etc/passwd(e no Solaris /etc/shadow) em arquivos temporários, como /etc/passwd_deleted.

Dessa forma, quando você o adiciona novamente, você pode usar o mesmo ID de usuário e a mesma senha (criptografada em um dos arquivos acima)

Isenção de responsabilidade: eu aprendi o UNIX por conta própria, para não me surpreender se houver uma maneira melhor de desativar temporariamente o usuário. Na verdade, eu nem sei do que você está falando sobre as chaves públicas / privadas. Também tenho certeza de que existe um findcomando que pode ser usado para procurar os arquivos com esse proprietário

Bryan Field
fonte
1
use o google autorizado_keys ou tente ler isso eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html basicamente, em vez de usar uma senha, coloque sua chave publuc nesse arquivo e, ao conectar-se ao ssh, você será automaticamente conectado se o público corresponder à sua chave privada atual