Como posso su para um usuário sem shell de login?

Como posso su para um usuário sem shell de login?

Problema

No Debian 10, quero criar um usuário que não possa efetuar login diretamente. Só se deve poder acessar o usuário usando o subinário. Na minha configuração do Ubuntu 18.04, fiz exatamente isso e funcionou perfeitamente, mas no Debian 10 não consigo fazer isso.

Dica

O usuário que conseguir fazer login não terá permissão para usar o sudo.

O que eu fiz

Eu configurei um usuário com o shell padrão /usr/sbin/nologin. Mas ao tentar acessar esse usuário su --shell=/bin/bash usernão consigo.

Exemplo mínimo

# useradd --shell /usr/sbin/nologin locked

# passwd locked
Enter new UNIX password: *secret*
Retype new UNIX password: *secret*
passwd: password updated successfully

$ su --shell /bin/bash locked
Password: *secret*
This account is currently not available.

Por que isso não funciona mais no Debian?

Editar 1:

Saída de /etc/shells:

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh

Editar 2:

Uma resposta um pouco mais detalhada sobre o que desejo alcançar:

Estou tentando criar um usuário (usuário1) que é capaz de fazer login no computador por SSH ou usando um monitor e um teclado. Esseusuário1o usuário deve ter direitos restritos. Uma dessas restrições é que ele não pode usar sudoo aplicativo, simplesmente não tem permissão para fazê-lo.

Então eu tenho um segundo usuário (usuário2) que poderá usar o aplicativo sudo para realizar algumas tarefas de configuração, como alterar configurações de rede ou outras coisas. Esseusuário2deve estar bloqueado para fazer login por padrão. Portanto, não há login por SSH e (mais pertencente ao meu problema) nenhum login por monitor e teclado.

--> Quando alguém quiser realizar alguma tarefa ele tem que fazer o login como restritousuário1, altere o usuário parausuário2e então ele pode alterar alguma configuração ou algo parecido.

Esta é toda a situação que desejo alcançar. Existem alguns detalhes mais detalhados sobre o que os usuários podem ou não fazer. Mas para descrevê-lo da forma mais simples possível, simplesmente expliquei com `sudo.

Responder1

Se o seu usuário tivesse um shell de login, você precisaria digitar seu cmd como: su --shell=/bin/bash lockedou sudo -u locked /bin/bash,desde que o shell padrão especificado para o usuário de destino esteja listado em/etc/shell.
(Observe que há um sinal de igual após a opção longa --shell.)

No entanto:

  1. o objetivo de ter um usuário sem shell de login é precisamente que esse usuário não pode fazer login de forma alguma, seja diretamente no início da sessão ou por meio de outra conta de usuário. Estranhamente, é exatamente isso que você está tentando alcançar.

  2. para poder acessar esse usuário (desde que tenha um shell de login, mudando para seu perfil conforme mostrado acima, você geralmente precisará sudode privilégios, ou pelo menos poderá usar o sucmd...

Responder2

Eu encontrei este deIvanleonczem Server Fault e id funcionaram para mim:

Você pode usar a opção -s para su para executar um shell específico

su -s /bin/bash -c '/path/to/your/script' testuser

informação relacionada