centos: su silenciosamente falha

3

Em um servidor do CentOS em que estou logado via SSH como root, eu faço:

su otherusername

onde 'otherusername' é o nome de usuário de outro usuário, que existe.

Não faz nada. Depois disso, eu ainda sou root. whoami retorna root, qualquer arquivo que eu crio pertence ao root, ou seja, su apenas não su.

No entanto, não há mensagens de erro. Se eu tentar su com um nome de usuário inválido, será exibida uma mensagem de erro.

O que eu estou perdendo?

    
por matteo 11.06.2012 / 00:01

1 resposta

7

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.

    
por 11.06.2012 / 11:04

Tags