As Diferenças entre Su, Sudo Su, Sudo -s e Sudo -i

Existem muitas maneiras diferentes de obter uma sessão root no terminal Linux. Isso pode causar alguma confusão, já que a maioria dos usuários iniciantes que estão procurando obter privilégios de root pode não estar familiarizada com como cada comando pode acessar o root, como eles são diferentes e quando essas diferenças importam. Aqui, analisamos cada um dos muitos comandos diferentes usados para obter acesso root em um terminal, explicamos como eles ganham acesso root, quando usá-los e tudo mais.
Índice
- su
- su -c
- sudo su
- sudo -i
- sudo -s
- Perguntas Frequentes
Leia também: O que é Doas e como instalá-lo
su
O comando su substitui o usuário atual pelo root no shell atual.
Você pode mudar para qualquer usuário digitando su e adicionando um nome de usuário a seguir.
Isso avisará o sistema para trocar (e essencialmente desconectar) o usuário atual pelo especificado. Alternativamente, o comando su pode obter acesso root ao inserir su sem especificar nada após o comando.
su é melhor usado quando um usuário deseja acesso direto à conta root do sistema. Ele não passa pelo sudo ou por algo semelhante. Em vez disso, você é solicitado a inserir a senha do usuário root, pois você está literalmente fazendo login nele. Além disso, outras formas de obter acesso root não têm o benefício de também obter acesso ao diretório home do root e ao ambiente root.
Aviso: usar su é a maneira menos segura de executar uma ação como root. Geralmente, se você puder evitar, não use isso.
Leia também: O guia definitivo para comandos Apt e Apt-Get
su -c
Este comando passa outros comandos diretamente para o usuário root.

Semelhante a digitar sudo antes de um comando, su -c executará um comando como o usuário root. Em vez de simplesmente digitar o comando, porém, você terá que colocá-lo entre aspas.
Esta é uma maneira rápida de executar um comando pelo seu terminal com privilégios elevados. É muito útil se sudo, de alguma forma, não estiver disponível (não vem pré-instalado em distribuições como Arch Linux) ou falhar em funcionar corretamente porque está corrompido.
Como você está passando algo diretamente para o root, se a sua senha de usuário e a senha de root forem diferentes, você precisará digitar sua senha de root para autenticar.
sudo su
Este comando solicita a senha do usuário atual em vez da senha do root.
É essencialmente o mesmo que apenas executar su no shell, exceto por uma diferença crucial: em vez de dizer ao sistema para “trocar de usuários” diretamente, você está dizendo para executar o comando su com privilégios de superusuário. Quando sudo su é executado, “.profile”, “.bashrc” e “/etc/profile” serão iniciados, muito parecido com a execução de su (ou su root). Se qualquer comando for executado com sudo na frente, recebe privilégios de root.
Embora não haja uma grande divergência entre sudo su e su, o primeiro ainda é um comando muito útil por uma razão importante: quando um usuário está executando su para obter acesso root em um sistema, ele deve conhecer a senha do root. O root é concedido com sudo su solicitando a senha do usuário atual, o que torna possível obter root sem a senha do root.
Isso é útil em situações em que você pode ter esquecido a senha do root se for diferente da senha da sua conta de usuário. Enquanto você pode fazer isso enquanto isso, ainda deve redefinir a senha do root em algum momento.
Leia também: Como usar o comando Rm no Linux
sudo -i
Usar sudo -i é praticamente o mesmo que o comando sudo su com uma exceção: ele não interage diretamente com o usuário root.
Assim como sudo su, a flag -i permite que um usuário obtenha um ambiente root sem ter que conhecer a senha da conta root. sudo -i também é muito semelhante a usar sudo su: ele lerá todos os arquivos ambientais (“.profile”, etc.) e definirá o ambiente dentro do shell.
Onde ele difere de sudo su é que sudo -i é uma maneira muito mais limpa de obter root e um ambiente root sem interagir diretamente com o usuário root.
Para esclarecer: com sudo su, você está usando mais de um comando setuid root em segundo plano. Isso torna muito mais desafiador descobrir quais variáveis ambientais serão mantidas e quais serão alteradas (ao trocar para o ambiente root). Isso não é verdade com sudo -i. Por causa disso, a maioria das pessoas vê isso como o método preferido para obter root sem fazer login diretamente.
Em linguagem mais simples: sudo -i lhe dará um login root “limpo” na sua pasta “/root”, que é a pasta “home” para o usuário root.
Leia também: Como usar o comando dd no Linux
sudo -s
Este comando invoca um shell com a sua variável $SHELL.
A opção -s para o comando sudo lê a variável $SHELL do usuário atual que está executando os comandos. Este comando funciona como se o usuário estivesse executando sudo /bin/bash, se o shell do usuário for bash.
No nosso caso, sudo -s nos deu o shell interativo fish, já que previamente instalamos fish como nosso shell padrão, então seria como se tivéssemos executado sudo /usr/bin/fish.

Sudo -s é um shell do tipo “não-login”. Diferente de um comando como sudo -i ou sudo su, o sistema não lerá nenhum arquivo ambiental. Quando um usuário diz ao shell para executar sudo -s, ele obtém root, mas não mudará o ambiente do usuário. Sua home não será a home do root, etc.

Este comando é melhor usado quando o usuário deseja mudar para o root, mas manter o mesmo ambiente de shell. Por exemplo, você pode querer executar um script fish e não ser forçado a usar o shell bash padrão que o root frequentemente recebe na maioria das distribuições.
Outros comandos cobertos acima obtêm acesso root, mas também lhe darão o shell e as variáveis ambientais que a distribuição tem para o root. Talvez você só queira trocar para o usuário sem toda essa bagagem!
Leia também: Comandos básicos de Bash para iniciantes no Linux
Perguntas Frequentes
Por que o shell que estou usando importa?
Se você usar um shell bash não modificado para sua conta de usuário, a diferença é principalmente filosófica. Na maioria dos casos, elevar a root através de qualquer shell não resultará em nenhuma mudança perceptível. Mas se você usar qualquer outra coisa, poderá notar imediatamente como as coisas podem ser diferentes!
Por exemplo, digamos que você esteja usando o shell fish para sua conta de usuário e mantenha o shell root em bash. Carregar o shell do usuário usando sudo -s produz um resultado drasticamente diferente.
O shell seguirá qualquer configuração que você tenha na pasta home do root. Se você não tiver tal coisa, ele apenas carregará a configuração padrão em vez da sua pessoal. (No nosso caso, isso seria “~/.config/fish/config.fish”.) Para todos os efeitos, é melhor deixar as coisas assim ao invés de copiar a configuração do usuário para “/root”.
Mudar para o shell da sua conta de usuário ao trocar para root deve ser feito apenas se você precisar executar um script que precise absolutamente daquele shell em particular.
Acessar root pode prejudicar meu sistema?
Em alguns casos, sim. A menos que você tenha certeza absoluta de que precisa acessar o root para tudo em uma sessão de terminal particular, geralmente é melhor digitar sudo seguido de um comando, se você quiser acessar o root para aquele comando em particular. Por exemplo, digitar sudo apt install vlc em qualquer versão do Linux baseada em Debian faria com que o sistema operacional acessasse o root apenas para executar o gerenciador de pacotes APT para instalar o VLC.
Uma advertência muito importante ao executar sudo -i ou qualquer outra variante que discutimos anteriormente em vez de digitar sudo antes de cada comando que você deseja executar como root é que a primeira não registra seu histórico de comandos em “/var/log/auth.log”. Se você cometer um erro, não conseguirá voltar e verificar o que fez para que possa corrigir. Você terá que operar de memória, já que sessões root não são registradas.
Quando eu digito “sudo” antes de um comando, qual variante de “sudo su” eu estou executando?
Ao digitar sudo para executar um comando (ou seja, você está digitando na mesma linha que o comando que deseja executar), você está, essencialmente, executando-o em um shell root interativo. Isso seria o que o comando autônomo sudo -s faz. Também é muito semelhante a executar o comando su -c.
Todas as capturas de tela são de Miguel Leiva-Gomez.