Tecnicamente, a menos que pam
está configurado para verificar seu shell com pam_shells
nenhum destes pode realmente impedir seu login, se você não estiver no shell. No meu sistema eles têm tamanhos diferentes, então eu suspeito que eles realmente fazem alguma coisa. Então, qual é a diferença? por que ambos existem? Por que eu usaria um em vez do outro?
-rwxr-xr-x 1 root root 21K Feb 4 17:01 /bin/false -rwxr-xr-x 1 root root 4.7K Mar 2 14:59 /sbin/nologin
Comentários
- Veja também O / usr / sbin / nologin como um shell de login tem um propósito de segurança?
- Eu ‘ estou curioso por que / bin / false leva 21k de código para retornar um código de retorno ” 1 “! (e / sbin / nologin leva apenas 4,7k)
- útil para ler. Qual é a diferença entre / sbin / nologin e / bin / false
- @MarkStewart Um pouco tarde demais, mas você pode querer ler Por que verdadeiro e falso são tão grandes? e Um tutorial Whirlwind sobre como criar executáveis ELF realmente Teensy para Linux .
- @nxnev Sim, não ‘ não pensei sobre a sobrecarga do ELF. E dos meus velhos tempos de IBM havia um programa IEFBR14 que era uma simples instrução de montagem de código operacional: BR 14 – Ramificar para o registrador 14, que encerraria o programa com o código de retorno definido para o que quer que estivesse no registrador 14!
Resposta
Quando /sbin/nologin
é definido como o shell, se o usuário com esse login do shell, eles “receberão uma mensagem educada dizendo” Esta conta não está disponível no momento. “Esta mensagem pode ser alterada com o arquivo /etc/nologin.txt
.
/bin/false
é apenas um binário que sai imediatamente, retornando falso, quando “é chamado, portanto, quando alguém que tem false
como logs de shell , eles “são desconectados imediatamente quando false
sai. Definir o shell para /bin/true
tem o mesmo efeito de não permitir que alguém faça login mas false
é provavelmente usado como uma convenção sobre true
, pois é muito melhor um t transmitindo o conceito de que a pessoa não tem um shell.
Olhando a página do manual de nologin
“, diz que foi criado no 4.4 BSD (início de 1990 ) por isso veio muito depois de false
ter sido criado. O uso de false
como shell é provavelmente apenas uma convenção herdada dos primeiros dias do UNIX.
nologin
é a opção mais amigável, com uma mensagem personalizável fornecida ao usuário que tenta fazer o login, então, teoricamente, você gostaria de usá-la; mas nologin
e false
terão o mesmo resultado final de alguém não ter um shell e não ser capaz de fazer o ssh.
Comentários
-
/usr/sbin/nologin
para distribuições baseadas em Debian. - Pelo menos a implementação BSD também registra as tentativas de login para syslog como visto em opensource.apple.com/source/system_cmds/system_cmds-735/… , enquanto / bin / false wouldn ‘ não registrar nada
- ISTO – é uma resposta incrível, com uma grande história apresentada aqui. Muito bem, Mark!
- O
/etc/nologin.txt
recurso de mensagem personalizada não está disponível no Ubuntu.
Resposta
Alguns servidores FTP permitirão acesso ao FTP apenas se você tiver um shell válido. /sbin/nologin
é considerado um shell válido, enquanto /bin/false
não é.
(Eu acho que “válido” significa seu o status de saída é 0, mas /etc/shells
também pode entrar nele, provavelmente depende do sistema, do software FTP e de sua configuração.)
Comentários
- sim, que ‘ é provavelmente parte do programa ftp usando pam, e pam usando pam_shells que, como você disse, verifica
/etc/shells
. Só um palpite … Posso estar errado. - Acabei de verificar o Ubuntu 8.04 e 14.04. O comando nologin sai com status 1 semelhante a falso e nenhum de verdadeiro, falso ou nologin é incluído em / etc / shells. Se fossem, um usuário poderia usar chsh para selecionar tal shell e bloquear sua conta.
Resposta
/bin/false
é um comando do sistema que é usado sempre que você precisa passar um comando para um programa que não deve fazer nada além de encerrar com um erro. É o complemento de /bin/true
. Ambos são utilitários POSIX muito antigos e padrão e nenhum produzem qualquer saída por definição.true às vezes é usado para um script de shell que deve repetir indefinidamente, como:
while true; do ... # Waste time if [ $wasted_time -gt 100000 ]; then exit 0 fi ... done
/usr/sbin/nologin
é projetado especificamente para substitui um shell e produz uma saída reclamando que você não pode fazer login. Antes de existir, era comum usar /bin/false
para usuários fictícios, mas pode ser confuso porque o usuário não saiba por que eles foram iniciados.
Comentários
- vale a pena observar que
/bin/true
e/bin/false
nem sempre são o que você obterá em um script de shell. Emzsh
true
efalse
são integrados, ondebash
usa as/bin/*
versões
Resposta
Na minha máquina, nologin
exibe sempre a mesma mensagem, em inglês, ignorando os argumentos . /bin/false
responde a --version
e --help
no idioma indicado por $LC_CTYPE
. Além dessas diferenças cosméticas, elas têm o mesmo efeito.
Em termos de usabilidade, nologin
é melhor se for usado por conta de uma pessoa real que fala inglês. Em termos de segurança, não há diferença.
Comentários
- parece que talvez
false
é mais para contas de sistema que não têm um usuário real enologin
é para contas desabilitadas. - Qual é o seu sistema operacional? Centos
nologin
a versão não tem argumentos, mas pode ler a mensagem de/etc/nologin.txt
.
Resposta
No linux, /sbin/nologin
vem do projeto util-linux , enquanto /bin/false
faz parte do GNU Coreutils . Eles desempenham diferentes funções e nologin tem a opção de imprimir uma mensagem para pessoas que têm como seu shell que está se autenticando. Os comandos do Linux vêm do BS D, onde parecem ter uma longa história de ser diferentes. O FreeBSD false
simplesmente retorna 1 , enquanto nologin
verifica para certifique-se de que está “s rodando em um TTY e envia uma mensagem para o syslog durante as tentativas de login. As versões do Linux são um pouco mais complicadas (false
fazendo todo tipo de coisa divertida com internacionalização para a saída de –help, suponho), mas essencialmente executa da mesma maneira.
Resposta
/ bin / false apenas a tarefa é sair com um código de saída diferente de zero.
Experimente na linha de comando:
$:> /bin/false $:> echo $? 1 $:>
Algumas instituições usam / bin / false no campo shell do arquivo de senha. Se o usuário tentar fazer o login, o shell é / bin / false, então eles são encerrados imediatamente
Resposta
Eles podem ser o mesmo programa, mas têm significados diferentes. O nome do programa diz tudo.
- / bin / false destina-se a retornar um valor falso. é executado como um programa.
- / bin / nologin destina-se a indicar ao usuário que nenhum login é permitido para uma conta. (É usado um shell de login.)
Resposta
Ambos fazem mais ou menos o mesmo trabalho, mas /bin/false
é útil para usuários sem privilégios. Por outro lado, /sbin/nologin
é para usuários privilegiados.
Comentários
- Oh, como você chegou a essa conclusão?
- Provavelmente ele olhou para
/etc/passwd
. Acabei de dar uma olhada em/etc/passwd
de um trecho Debian recém-instalado. Nesta caixa, quase todas as contas do sistema (ids de usuário < 1000) têm/usr/sbin/nologin
como shell, com algumas exceções. Observe que não concordo com a resposta de @pythondetective ‘. Estou apenas especulando o que pode tê-lo levado a essa conclusão. Meu comentário está um pouco atrasado, no entanto. - não! shell de login padrão não é o mesmo que privilégios.