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.