Existe alguma boa razão para executar o sudo su?

78

Para iniciar um shell raiz em máquinas onde a conta raiz está desativada, você pode executar um dos seguintes:

  • sudo -i: executar um shell de logon interativo (leituras /root/.bashrce /root/.profile)
  • sudo -s: executar um shell interativo sem login (leituras /root/.bashrc)

No mundo do Ubuntu, muitas vezes vejo sudo susugestões como uma maneira de obter um shell raiz. Por que executar dois comandos separados quando um fará? Tanto quanto eu posso dizer, sudo -ié equivalente sudo su -e sudo -sé o mesmo que sudo su.

As únicas diferenças parecem ser (comparando sudo -ià esquerda e sudo su -à direita):

captura de tela do meld comparando 'sudo -i' e 'sudo su -'

E comparando sudo -s(esquerda) e sudo su(direita):

captura de tela do meld comparando 'sudo -s' e 'sudo su'

As principais diferenças (ignorando as SUDO_foovariáveis ​​e LS_COLORS) parecem ser as XDG_foovariáveis do sistema nas sudo suversões.

Existem casos em que essa diferença justifica o uso de algo deselegante sudo su? Posso dizer com segurança às pessoas (como sempre faço) que nunca há sentido em correr sudo suou estou perdendo alguma coisa?

terdon
fonte
8
Eu nunca entendi aqueles sistemas sofisticados como os ubuntuque impedem os usuários do padrão su -. Eles criaram um problema e agora há discussões intermináveis ​​sobre como resolvê-lo.
jimmij
16
@jimmij Você não precisa saber a senha de root su -? Você não acha que isso representa uma falha de segurança em ambientes multiusuário, onde mais de uma pessoa precisa ter acesso root?
Erathiel 24/07
4
@ Christopher O problema não é do usuário que possui privilégio sudo ou da senha de root para invadir o sistema. O problema é sobre segurança de senha. Ao alterar a senha root, você deve informar todos os usuários que precisam, o que pode ser difícil. Com o sudo, você não tem essa dificuldade.
Huygens
4
Qual é a ferramenta diff?
Josh The Geek
5
@jimmij Como o Ubuntu impede o uso de su -? Sim, seria necessário definir uma senha root, mas isso é trivial.
Phizes

Respostas:

62

Como você afirmou em sua pergunta, a principal diferença é o meio ambiente.

sudo su - vs. sudo -i

No caso sudo su -, é um shell de login, portanto /etc/profile, .profilee .bashrcé executado e você se encontrará no diretório inicial do root com o ambiente do root.

sudo -ié quase o mesmo que sudo su -A opção -i(simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como .profile, .bashrcou .loginserão lidos e executados pelo shell.

sudo su vs. sudo -s

sudo suchama sudocom o comando su. O Bash é chamado como shell interativo sem logon. Então, bashapenas executa .bashrc. Você pode ver que, depois de mudar para o root, você ainda está no mesmo diretório:

user@host:~$ sudo su
root@host:/home/user#

sudo -slê a $SHELLvariável e executa o conteúdo. Se $SHELLcontiver /bin/basha chamada sudo /bin/bash, o que significa que /bin/bashé iniciado como um shell que não é de login, portanto, todos os arquivos de ponto não são executados, mas bashele próprio lê. bashrcdo usuário que está chamando. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário que está chamando.

Conclusão

O -isinalizador foi adicionado sudoem 2004 , para fornecer uma função semelhante ao sudo su -, assim sudo su -como o modelo para sudo -ie deveria funcionar como ele. Eu acho que realmente não importa qual você usa, a menos que o ambiente não seja importante.

Adição

Um ponto básico que deve ser mencionado aqui é que sudofoi projetado para executar apenas um único comando com privilégios mais altos e, em seguida, soltar esses privilégios nos originais. Nunca foi feito para realmente mudar o usuário e deixar um shell raiz aberto. Ao longo do tempo, sudofoi ampliado com esses mecanismos, porque as pessoas ficaram irritadas com o porquê de usar sudona frente de cada comando.

Então o significado de sudofoi abusado. sudofoi criado para incentivar o usuário a minimizar o uso de privilégios de root.

O que temos agora é que sudose torna cada vez mais popular. Está integrado em quase todas as distribuições Linux conhecidas. A ferramenta original para mudar para outra conta de usuário é su. Para um veterano da velha escola * nix, algo como isso sudopode parecer desnecessário. Ele adiciona complexidade e se comporta mais provavelmente aos mecanismos que conhecemos da família OS da Microsofts e, portanto, contraria a filosofia de simplicidade dos sistemas * nix.

Eu não sou realmente um veterano, mas também na minha opinião sudosempre foi um espinho do meu lado, a partir do momento em que foi introduzido e sempre trabalhei em torno do uso sudo, se possível. Eu sou muito relutante em usar sudo. Em todos os meus sistemas, a conta root está ativada. Mas as coisas mudam, talvez chegue a hora, quando suserá preterido e será sudosubstituído sucompletamente.

Portanto, acho que será melhor usar sudoos mecanismos internos ( -s, -i) em vez de confiar em uma ferramenta antiga como su.

caos
fonte
4
Ah, então antes de 2004 havia realmente um motivo para correr sudo su? Na época, eu estava usando distros sem sudo e contas raiz ativas, então não sei. Isso pode explicar a prevalência do sudo su meme no mundo Ubuntu.
terdon
8
Eu nunca soube sobre sudo -iou sudo -santes - eu tenho executado UNIX de vários tipos desde 1991 e para mim sudo su -é apenas um hábito arraigado neste momento.
fofo
2
É sudo -so mesmo que sudo $SHELLentão?
Samuel Edwin Ward
3
(Concordando com @chaos) As razões para usar sudo su -são 1) que funciona e você sabe exatamente o que faz; e 2) que não precisa se lembrar de outra opção para sudo(quando você já sabe su -) e 3) você não Não é preciso lembrar com qual versão sudovocê está trabalhando no momento. Por que lembrar mais uma trivialidade quando o que você já tem funciona bem? Existe algo que se su -isai melhor do que evitar uma entrada de log? Eu não uso o sudo su -suficiente para me preocupar com isso.
Jrw32982
3
Acabei de ver a atualização, muito legal! Para constar, deixe-me dizer que eu também cortei meus dentes * nix em sistemas sem sudoe estou muito acostumado su. É a combinação dos dois que me incomoda.
terdon
16

Para responder sua pergunta diretamente: não, não há uma boa razão para fazer isso. Além disso, o sudo su produz duas entradas de log quando uma é suficiente.

Eu já vi muitas pessoas fazerem isso, e quando pergunto por que elas não correm sudo -s, a resposta é que elas não sabem sobre a -sbandeira do sudo e geralmente elas mudam depois que eu a aponto.

No entanto, à sua lista de sudo -se sudo -igostaria de adicionar mais uma opção sudo -sE, que é uma espécie de substituto para su -m. sudo -sEpreserva seu ambiente, incluindo o diretório inicial. Isso tem riscos se o diretório inicial for inseguro (no NFS). Porém, em um ambiente em que muitas pessoas usam raiz, você evita que tenha que concordar com o conteúdo do .bashrcarquivo raiz . Meu .bashrccontém muitas especializações para raiz, portanto, não obtenho exatamente o mesmo ambiente que raiz, mas pelo menos recebo exatamente o ambiente que desejo.

user3188445
fonte
4
Se preservar seu ambiente, inclusive $HOME, isso significa que todos os novos arquivos criados na pasta pessoal são de propriedade da raiz, não de você. Eu já tive essa causa muitos erros de permissão de diagnóstico.
315 Eris
sudo -sEe depois echo $HOME/rootno CentOS 7, bash 4.2. -sEnão parece preservar o diretório inicial como você afirmou.
Jeremysprofile