O otherusername tem um shell válido em /etc/passwd
?
O que su
faz é executar um processo como outro usuário. O processo escolhido por padrão é o que estiver no último campo em /etc/passwd
para o usuário em questão. Isso geralmente é um shell como /bin/sh
ou /bin/bash
. Quando esse processo termina, você é devolvido ao shell original em que você iniciou, de propriedade do root.
No que diz respeito ao su
, ele foi comutado com sucesso para o usuário correto, portanto, nenhuma mensagem de erro é necessária. Em seguida, ele passa o controle para o shell configurado, executando isso. Se este shell for algo como /bin/false
, ele simplesmente fará o que o /bin/false
sempre faz, que é sair com um status 1 ( false ), retornando ao shell pai de propriedade da raiz do utilizador. /bin/true
faz a mesma coisa, mas com um status 0 ( true ).
Outras pseudo-conchas podem exibir comportamento diferente. Por exemplo, /usr/sbin/nologin
ecoa
This account is currently not available.
antes de sair com 1.
Você pode alterar o shell configurado para um usuário com usermod -s /bin/bash otherusername
como usuário root.
Você pode ver um comportamento confuso semelhante em torno de sudo
se você usá-lo com cd
. Se você é um usuário normal e não pode cd
em um diretório, sudo cd directory
não imprimirá nenhuma mensagem de erro, não mudará você para root e não alterará seu diretório.
A razão para isso é que ele inicia um novo shell como root, altera o diretório para o diretório correto e, em seguida, sai imediatamente, deixando-o de volta no shell original em seu diretório original.