Estou assistindo a um vídeo em que o autor diz que podemos usar esse comando para impedir que o usuário faça login.
useradd -ms `which false` u2
Abaixo está meu teste.
[root@192 ~]# tree -dL 1 /home
/home
├── u1
└── user1
2 directories
[root@192 ~]# useradd -ms `which false` u2
[root@192 ~]# tree -dL 1 /home
/home
├── u1
├── u2
└── user1
3 directories
[root@192 ~]# passwd u2
Changing password for user u2.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@192 ~]# logout
[u1@192 ~]$ whoami
u1
[u1@192 ~]$ logout
[user1@192 ~]$ whoami
user1
[user1@192 ~]$ su - u2
Password:
[user1@192 ~]$ whoami
user1
[user1@192 ~]$ su - u2
Password:
Last login: Tue Apr 19 11:22:01 PDT 2022 on pts/0
[user1@192 ~]$ whoami
user1
[user1@192 ~]$
Para mim, sinto que o usuário pode fazer login com sucesso, pois não há erros. E, como você pode ver, quando tento fazer login novamente, ele até me informa meu último horário de login. É só que o usuário foi desconectado assim que se conecta. Isso é verdade? O que exatamente acontece por baixo?
A
-s
opção parauseradd
( página man ) é:E
`which false`
apenas dá o caminho para o comandofalse
, que não faz nada além de sair (com um erro, mas isso não importa).Então, na maioria das vezes, o usuário trabalha normalmente, só que ele tem um shell que não roda, então ele não pode fazer nada.
Você provavelmente não deve criar uma senha para eles e, em vez disso, usar algo como
usermod -L u2
( man page ) para bloquear a senha da conta ouchage
( man page ) para fazer a conta expirar, dependendo um pouco do que você deseja fazer com ela.(Bloquear a senha em
/etc/shadow
, ou ter a conta expirada não faz exatamente nada no que diz respeito ao kernel. Apenas as várias ferramentas e bibliotecas relacionadas ao login etc. vejam essas coisas.)