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

149

Tecnicamente, a menos que pam esteja configurado para verificar seu shell com pam_shells , nenhum deles pode realmente impedir seu login, se você não estiver no shell. No meu sistema eles são 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 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
    
por xenoterracide 07.04.2011 / 20:08

8 respostas

179

Quando /sbin/nologin é definido como o shell, se o usuário com esse shell fizer login, receberá 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 false, quando é chamado, portanto, quando alguém que tem false quando o shell efetua login, ele é imediatamente desconectado quando false sai. Configurar 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 , já que é muito melhor em transmitir o conceito de que a pessoa não tem um shell. / p>

Olhando para a página man do nologin , ele diz que ele foi criado em 4.4 BSD (início dos anos 90), então veio muito depois que false foi criado. O uso de false como um shell é provavelmente apenas uma convenção transportada dos primórdios do UNIX.

nologin é a opção mais amigável, com uma mensagem personalizável dada ao usuário que está tentando se logar, então você teoricamente gostaria de usar isso; mas ambos os nologin e false terão o mesmo resultado final de alguém que não tem um shell e não pode ssh in.

    
por 07.04.2011 / 21:47
25

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

(Eu acho que "válido" significa que seu status de saída é 0, mas /etc/shells também pode vir para ele, provavelmente depende do sistema, do software FTP e da sua configuração.)

    
por 07.04.2011 / 21:27
11

/bin/false é um comando do sistema que é usado sempre que você precisar 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 não produzem qualquer saída por definição. Às vezes, true é usado para um script de shell que deve ser loop indefinidamente, como:

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

/usr/sbin/nologin é projetado especificamente para substituir um shell e produz uma saída que reclama que você não pode efetuar login. Antes de existir, era comum usar /bin/false para usuários fictícios, mas poderia ser confuso, pois o usuário não sabe por que foi iniciado.

    
por 07.04.2011 / 23:11
4

Na minha máquina, nologin exibe sempre a mesma mensagem, em inglês, ignorando 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 na conta de uma pessoa real que fala inglês. Em termos de segurança, não há diferença.

    
por 07.04.2011 / 20:14
2

/ bin / false somente o trabalho é 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 entrar, o shell é / bin / false, então eles saem imediatamente

Espero que isso ajude.

    
por 07.04.2011 / 20:14
2

No linux, /sbin/nologin vem do projeto util-linux , enquanto /bin/false faz parte de GNU Coreutils . Eles desempenham funções diferentes, e o nologin tem a opção de imprimir uma mensagem para pessoas que o têm como seu shell que está efetuando login. Os comandos do linux vêm do BSD, onde eles parecem ter uma longa história de serem diferentes. O FreeBSD false simplesmente retorna 1 , enquanto o nologin verifica se está em execução em um TTY e envia uma mensagem para o syslog durante as tentativas de login. As versões linux são um pouco mais complicadas ( false fazendo todo tipo de coisas divertidas com internacionalização para a saída de --help, eu suponho) mas essencialmente executar da mesma maneira.

    
por 17.11.2011 / 02:47
0

Eles podem ser o mesmo programa, mas têm significados diferentes. O nome do programa informa tudo.

  • / bin / false destina-se a retornar um valor falso. É executado como programa.
  • / bin / nologin destina-se a indicar ao usuário que nenhum login é permitido para uma conta. (É usado um shell de login.)
por 17.11.2011 / 02:29
-3

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.

    
por 26.12.2015 / 20:16