Qual é a diferença entre / sbin / nologin e / bin / false?


69

Muitas vezes ouvi dizer que é recomendável desabilitar uma conta de usuário configurando seu shell para /bin/false. Mas, nos meus sistemas Linux existentes, vejo que um grande número de contas existentes (todas elas contas de serviço) possuem um shell /sbin/nologin.

Vejo na página do manual que /sbin/nologinimprime uma mensagem para o usuário dizendo que a conta está desativada e sai. Presumivelmente /bin/false, não imprimiria nada.

Também vejo que /sbin/nologinestá listado /etc/shells, enquanto /bin/falsenão está.

A página de manual diz que o FTP desativará o acesso de usuários com um shell não listado /etc/shellse implica que outros programas podem fazer o mesmo. Isso significa que alguém pode acessar FTP com uma conta que tem /sbin/nologincomo shell?

Qual é a diferença aqui? Qual deles devo usar para desativar uma conta de usuário e em que circunstâncias? Que outros efeitos tem uma listagem /etc/shells?



11
Como informação geral que funciona. Estou pensando especificamente da perspectiva da administração do sistema.
Michael Hampton

Apenas significava como backgrounder.
dmourati

Respostas:


70

/bin/falseé um programa utilitário associado a /bin/true, que é útil em algum sentido abstrato para garantir que o unix esteja completo de recursos. No entanto, propósitos emergentes para esses programas foram encontrados; considere a instrução BASH /some/program || /bin/true, que sempre avalia booleana como true ( $? = 0), independentemente do retorno de /some/program.

Um uso emergente de /bin/false, como você identificou, é como um shell nulo para usuários que não têm permissão para efetuar login. Nesse caso, o sistema se comportará exatamente como se o shell falhasse em executar.

POSIX (embora eu possa estar errado e o SUS) restrinja esses dois comandos a fazer exatamente nada além de retornar o valor booleano apropriado.

/sbin/nologiné um utilitário BSD que possui um comportamento semelhante a /bin/false(retorna boolean false), mas também imprime a saída, como /bin/falseé proibido. Isso deve ajudar o usuário a entender o que aconteceu, embora na prática muitos emuladores de terminal simplesmente fechem quando o shell terminar, tornando a mensagem praticamente ilegível em alguns casos.

Há pouca finalidade de listar /sbin/nologinno /etc/shells. O efeito padrão de /etc/shellsé listar os programas permitidos para uso chshquando os usuários estão alterando seu próprio shell (e não há motivo credível para mudar seu próprio shell /sbin/nologin). O superusuário pode alterar o shell de qualquer um para qualquer coisa. No entanto, convém listar os itens " in" /sbin/nologine " /bin/falsein" /etc/rsh, o que proibirá que os usuários com esses shells alterem seu shell usando chshno infeliz evento de obter um shell.

Os daemons de FTP podem proibir o acesso a usuários com um shell que não esteja no / etc / shells ou podem usar qualquer outra lógica que desejarem. A execução do FTP deve ser evitada em qualquer caso, porque sftp(que fornece funcionalidade semelhante) é semelhante, mas seguro. Alguns sites usam /sbin/nologinpara desativar o acesso ao shell e, ao mesmo tempo, permitir o acesso sftp /etc/shells. Isso pode abrir um backdoor se o usuário tiver permissão para criar cronjobs.

Em qualquer um dos casos, scpnão funcionará com um shell inválido. scponlypode ser usado como um shell nesta instância.

Além disso, a escolha do shell afeta a operação do su -(AKA su -l). Particularmente, a saída de /sbin/nologinserá impressa em stdout se for o shell; não pode ser esse o caso /bin/false. Em ambos os casos, os comandos executados com su -clfalharão.

Finalmente, a resposta:

Para desabilitar uma conta, dependa de nenhuma dessas opções, mas defina o shell como /sbin/nologinpara fins informativos (a menos que /sbin/nologinesteja dentro /etc/shells, nesse momento você deve usar /bin/falsee não deveria estar). Em vez disso, defina o campo de senha /etc/passwdcomo !, o que é garantido cryptcomo válido para nenhuma senha. Considere definir o hash /etc/shadowda mesma maneira para evitar erros. passwd -lfará isso por você.

Uma terceira maneira de desativar uma conta é definir o campo de data de validade da conta para uma data antiga (por exemplo, usermod --expiredate 1). Isso impedirá logins, caso sua configuração permita que os usuários se autentiquem em sua conta unix sem uma senha e o serviço que eles estão usando não exija shell.


9
Embora esta resposta resume perfeitamente as diferentes opções (e responde a pergunta), eu senti a necessidade de apontar para um recurso útil para este caso de uso, que está disponível, pelo menos no estoque de repositórios do Debian, no titantoolspacote: noshell. Esse pseudo-shell fornece recursos de auditoria, registrando-se no syslog tentando usar contas noshellcomo seu shell, enquanto ainda não permite o acesso.
Dawud

11
Ele não é de forma apócrifa, mas é de fato bastante comum entre os administradores de um determinado vintage (tosse), para usar /bin/falsecomo um shell de login para as pessoas que não devem entrar.
MadHatter

2
Apócrifo no sentido de que não é o uso pretendido original. Eu não disse anacrônico; Eu vejo isso todos os dias :)
Falcon Momot

11
Desabilitar a conta por senha inválida não funciona muito bem com o ssh. Se o usuário tiver conseguido configurar a autenticação de chave pública anteriormente, ele poderá entrar de qualquer maneira.
joshudson

3
O sshd está documentado para verificar se as contas que estão bloqueadas de determinadas maneiras (os hashes de senha começando com! são mencionados especificamente) mesmo com a autenticação pubkey.
Falcon Momot 13/09/14

13

Depois de fazer alguma pesquisa sobre isso, o método usado depende do que você deve bloquear. Se um usuário efetuar login com esse conjunto no shell, ele receberá uma mensagem com o efeito This account is currently unavailable.Observe que você pode alterar isso criando o arquivo /etc/nologin.txtpelo menos nos derivados RHEL.

Como você sabe /bin/falsenão é uma concha. O modo como funciona é que ele retorna false, que efetua logout imediatamente após a saída binária. Observe que /bin/trueatingiria o mesmo efeito.

Quanto à sua pergunta FTP: Sim, você está correto em que, tendo o shell definido para /sbin/nologinpermitirá aos usuários para acessar FTP ao mesmo tempo /bin/falseou /bin/trueirá impedir completamente o usuário de login em qualquer serviço.

Portanto, /bin/falseou /bin/trueé melhor impedir que um usuário /sbin/nologinefetue login em qualquer serviço, enquanto ainda permitirá que os usuários acessem serviços que não sejam SSH ou console local enquanto fornece feedback ao usuário de que a conta está inativa e é melhor usada quando apenas SSH / local console precisa estar bloqueado.


2

Alguém tentou provar que / bin / false não permitiria o acesso ao FTP?

Acabei de alterar o shell do meu usuário para / bin / false e consegui fazer o FTP muito bem.

Eu uso / dev / null para bloquear completamente o usuário (bem, exceto o e-mail, eles ainda podem POP3).


Você tinha /etc/shells? Como o seu servidor FTP está configurado?
Michael Hampton

não há regra dizendo que um usuário precisa de um shell para fazer login em um servidor FTP.
Petter H

Isso não será permitido em alguns daemons de FTP, e não em outros. Há muita variação na funcionalidade entre os vários. A implementação clássica proibirá o acesso a qualquer pessoa que não tenha um shell, mas isso não significa que todas as implementações precisam.
Falcon Momot
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.