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


170

Tecnicamente, a menos que pamesteja configurado para verificar seu shell com pam_shellsnenhum deles, pode realmente impedir seu login, se você não estiver no shell. No meu sistema, eles têm tamanhos ainda diferentes, então eu suspeito que eles realmente fazem alguma coisa. Então qual a diferença? por que os dois existem? Por que eu usaria um sobre o 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


O caminho /bin/falsedeve existir em qualquer lugar, mas não /sbin/nologin: '/ sbin / nologin': esse arquivo ou diretório não existe . Alguma idéia do porquê /usr/sbin/nologindo /sbin/nologinDebian e do Ubuntu?
baptx

4
Estou curioso para saber por que / bin / false leva 21k de código para retornar um código de retorno "1"! (e / sbin / nologin leva apenas 4.7k)
Mark Stewart


1
@nxnev Sim, não pensei na sobrecarga da ELF. E desde os tempos antigos da IBM havia um programa IEFBR14 que era uma instrução simples de montagem de código operacional: BR 14 - Ramifique para registrar 14, que encerraria o programa com o código de retorno definido como o que estivesse no registro 14!
Mark Stewart

Respostas:


198

Quando /sbin/nologiné definido como o shell, se o usuário com esse shell efetuar login, eles receberão uma mensagem educada dizendo 'Esta conta não está disponível no momento'. Esta mensagem pode ser alterado com o arquivo /etc/nologin.txt.

/bin/falseé apenas um binário que sai imediatamente, retornando false, quando é chamado; portanto, quando alguém que tem falsecomo shell efetua login, é imediatamente desconectado quando falsesai. Definir o shell para /bin/trueo mesmo efeito de não permitir que alguém faça login, mas falseprovavelmente é usado como uma convenção, truepois é muito melhor transmitir o conceito de que a pessoa não tem um shell.

Olhando para nologina página de manual, ela diz que foi criada no 4.4 BSD (início dos anos 90), por isso falsefoi criada muito tempo depois . O uso de falsecomo shell é provavelmente apenas uma convenção herdada dos primeiros dias do UNIX.

nologiné a opção mais fácil de usar, com uma mensagem personalizável dada ao usuário tentando efetuar login, portanto, teoricamente, você deseja usá-la; mas ambos nologine falseterão o mesmo resultado final de alguém que não possui uma concha e não pode fazer o SSH.


10
/usr/sbin/nologinpara distribuições baseadas no Debian.
Diemo

3
Pelo menos a implementação do BSD também registra as tentativas de login no syslog, como visto em opensource.apple.com/source/system_cmds/system_cmds-735/… , enquanto que / bin / false não registraria nada
Sergiy Kolodyazhnyy

28

Alguns servidores FTP permitirão o acesso ao FTP somente se você tiver um shell válido. /sbin/nologiné considerado um shell válido, enquanto /bin/falsenão é.

(Acho que "válido" significa que o status de saída é 0, mas /etc/shellstambém pode aparecer, provavelmente depende do sistema, do software FTP e da sua configuração.)


1
sim, isso provavelmente faz parte do programa ftp usando pam e pam usando pam_shells que, como você disse, verifica /etc/shells. Apenas um palpite ... Eu posso estar errado.
Xenoterracide

4
Acabei de verificar o Ubuntu 8.04 e 14.04. O comando nologin sai com o status 1 semelhante a false e nenhum true, false ou nologin está incluído no / etc / shells. Se fossem, um usuário poderia usar o chsh para selecionar um shell desse tipo e bloquear-se fora de sua conta.
penguin359

12

/bin/falseé um comando do sistema usado sempre que você precisa passar um comando para um programa que não deve fazer nada além de sair com um erro. É o companheiro para /bin/true. Ambos são utilitários POSIX muito antigos e padrão e nem produzem nenhuma saída por definição. Às vezes, true é usado para um script de shell que deve executar um loop indefinidamente, como:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinfoi projetado especificamente para substituir um shell e produz reclamações de saída que você não pode fazer login. Antes de existir, era comum o uso /bin/falsepara usuários fictícios, mas poderia ser confuso, pois o usuário não sabe por que foi expulso.


4
vale a pena notar isso /bin/truee /bin/falsenem sempre é o que você obterá em um script de shell. Em zsh truee falsesão built-ins, onde bashusa as /bin/*versões
xenoterracide

4

Na minha máquina, nologinexibe sempre a mesma mensagem, em inglês, ignorando argumentos. /bin/falseresponde --versione --helpno 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.


4
parece que talvez falseseja mais para contas do sistema que não têm usuário real e nologinpara contas desativadas.
Xenoterracide

1
Qual é o seu sistema operacional? A nologinversão do Centos não usa argumentos, mas pode ler a mensagem /etc/nologin.txt.
Alexander Gonchiy

3

O trabalho / bin / false only é 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 login, o shell será / bin / false e, portanto, será encerrado imediatamente


2

No linux, /sbin/nologinvem do projeto util-linux , enquanto /bin/falsefaz parte do GNU Coreutils . Eles desempenham diferentes funções, e o nologin tem a opção de imprimir uma mensagem para pessoas que a possuem como shell que estão efetuando login. Os comandos linux vêm do BSD, onde parecem ter um longo histórico de diferenças. O FreeBSD falsesimplesmente retorna 1 , enquanto nologinverifica se está 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 ( falsefazendo todo tipo de coisa divertida com internacionalização para a saída de --help, suponho), mas essencialmente executam da mesma maneira.


1

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 programa.
  • / bin / nologin pretende indicar ao usuário que nenhum login é permitido para uma conta. (É usado um shell de login.)

-4

Ambos fazem mais ou menos o mesmo trabalho, mas /bin/falsesão úteis para usuários não privilegiados. Por outro lado, /sbin/nologiné para usuários privilegiados.


4
Oh, como você chegou a essa conclusão?
fpmurphy

Provavelmente ele investigou /etc/passwd. Eu apenas dei uma olhada em /etc/passwdum trecho Debian recém-instalado. Nesta caixa, quase todas as contas do sistema (IDs de usuário <1000) têm /usr/sbin/nologincomo shell, com algumas exceções. Observe que eu não concordo com a resposta do @ pythondetective. Estou apenas especulando o que poderia ter levado a essa conclusão. Meu comentário é um pouco tarde, no entanto.
Binarus

não! o shell de login padrão não é o mesmo que privilégios.
MUY Belgium

não é um ótimo "detetive"
Emobe 19/09
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.