Pesquisa de site

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 criar alguma confusão, já que a maioria dos usuários iniciantes que desejam obter privilégios de root podem não estar familiarizados com como cada comando pode obter acesso root, como eles são diferentes e quando essas diferenças são importantes. Aqui desmontamos cada um dos vários comandos diferentes usados para obter acesso root em um terminal, explicamos como eles ganham root, quando usá-los e tudo mais.

Contente

  • su
  • su-c
  • sudo su
  • sudo -eu
  • sudo -s
  • perguntas frequentes

Leia também: O que é Doas e como instalá-lo

su

O comando su substitui o usuário atual por root no shell atual.

Você pode mudar para qualquer usuário digitando su e adicionando um nome de usuário depois dele.

Isso dirá ao sistema para mudar (e essencialmente sair) do usuário atual para aquele especificado. Alternativamente, o comando su pode obter acesso root digitando su sem especificar nada após o comando.

su é melhor usado quando um usuário deseja acesso direto à conta root no sistema. Não passa pelo sudo ou algo parecido. Em vez disso, você será solicitado a inserir a senha do usuário root, pois estará 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 inicial raiz e ao ambiente raiz.

Aviso: usar su é a maneira menos segura de executar uma ação root. Geralmente, se você puder evitá-lo, não use.

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 usuário root. Em vez de simplesmente digitar o comando, você terá que colocá-lo entre aspas.

Esta é uma maneira rápida de disparar um comando através de seu terminal com privilégios elevados. É muito útil se sudo de alguma forma não estiver disponível (ele não vem pré-instalado em distros como Arch Linux) ou não funcionar corretamente porque está corrompido.

Como você está passando algo diretamente para o root, se suas senhas de usuário e root forem diferentes, você terá que digitar sua senha root para autenticar.

sudo su

Este comando pede a senha do usuário atual em vez de root.

É essencialmente o mesmo que executar su no shell, exceto por uma diferença crucial: em vez de dizer ao sistema para "trocar de usuário" diretamente, você está dizendo para ele executar o su comando com privilégios de superusuário. Quando sudo su for executado, ".profile," ".bashrc" e "/etc/profile" serão iniciados, assim como executar su (ou su raiz). Se qualquer comando for executado com sudo na frente dele, ele receberá 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 um motivo importante: quando um usuário está executando su para obter acesso root em um sistema, eles devem saber a senha root. O root é fornecido com sudo su solicitando a senha do usuário atual, o que possibilita obter root sem a senha de root.

Isso é útil em situações em que você pode ter esquecido a senha root se ela for diferente da senha da sua conta de usuário. Embora você possa fazer isso enquanto isso, você ainda deve redefinir a senha root em algum momento.

Leia também: Como usar o comando Rm no Linux

sudo -eu

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.

Muito parecido com sudo su, o sinalizador -i permite que um usuário obtenha um ambiente root sem precisar saber a senha da conta root. sudo -i também é muito semelhante a usar sudo su: ele lê todos os arquivos ambientais (".profile", etc.) e define o ambiente dentro do concha.

A diferença 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 root setuid em segundo plano. Isto torna muito mais desafiador descobrir quais variáveis ambientais serão mantidas e quais serão alteradas (ao mudar para o ambiente raiz). Isso não é verdade com sudo -i. Por causa disso, a maioria das pessoas o vê como o método preferido para obter root sem fazer login diretamente.

Em linguagem mais simples: sudo -i fornecerá um login root "limpo" na sua pasta "/root", que é a pasta "home" do usuário root.

Leia também: Como usar o comando dd no Linux

sudo -s

Este comando invoca um shell com sua variável $SHELL.

A opção -s para o comando sudo lê a variável $SHELL do usuário atual que está executando comandos. Este comando funciona como se o usuário estivesse executando sudo /bin/bash, se o shell de onde o usuário vem for bash.

No nosso caso, sudo -s nos deu o shell interativo fish, já que instalamos fish anteriormente como nosso shell padrão, então seria como se executássemos sudo /usr/bin/fish.

Sudo -s é um shell de estilo "sem login". Ao contrário 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 ganha root, mas não altera o ambiente do usuário. Sua casa não será a casa raiz, etc.

Este comando é melhor usado quando o usuário deseja mudar para root, mas manter o mesmo ambiente 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 costuma obter na maioria das distros.

Outros comandos abordados acima obtêm acesso root, mas também fornecem o shell e as variáveis de ambiente que a distro possui para root. Talvez você queira apenas mudar para o usuário sem toda essa bagagem!

Leia também: Comandos Bash básicos para iniciantes em Linux

perguntas frequentes

Por que o shell com o qual estou executando importaria?

Se você usar um shell bash não modificado para sua conta de usuário, a diferença será principalmente filosófica. Na maioria dos casos, a elevação para root por meio de qualquer shell não resultará em nenhuma alteração perceptível. Mas se você executar qualquer outra coisa, notará imediatamente como as coisas podem ser diferentes!

Por exemplo, digamos que você esteja executando o shell fish para sua conta de usuário e mantenha o shell root no 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 pessoal do root. Se você não tiver tal coisa, ele apenas carregará a configuração padrão em vez da configuração pessoal. (No nosso caso, seria "~/.config/fish/config.fish".) Para todos os efeitos, é melhor deixar as coisas assim em vez de copiar a configuração do usuário para "/root".

Mudar para o shell da sua conta de usuário ao mudar para root só deve ser feito se você precisar executar um script que precise absolutamente desse shell específico.

O acesso ao 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 específica, geralmente é melhor apenas digitar sudo seguido de um comando, se quiser acessar o root para esse comando específico. Por exemplo, digitar sudo apt install vlc em qualquer versão do Linux baseada em Debian diria ao sistema operacional para acessar o root apenas para executar o gerenciador de pacotes APT para instalar o VLC.

Uma advertência muito importante para 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 o primeiro não registra seu histórico de comandos em "/var/log/auth.log". Se você errar, não poderá voltar atrás e verificar o que fez para poder corrigi-lo. Você terá que operar sem memória, pois as sessões root não são gravadas.

Quando digito “sudo” antes de um comando, qual variante de “sudo su” estou executando?

Ao digitar sudo para executar um comando (ou seja, você o digita na mesma linha do comando que deseja executar), você o executa essencialmente em um shell raiz interativo. Isso seria o que o comando autônomo sudo -s faria. Também é muito semelhante a executar o comando su -c.

Todas as capturas de tela de Miguel Leiva-Gomez.

Artigos relacionados