Ubuntu sudo
Instalar programas, mudar configurações do sistema, reiniciar serviços: tudo isso exige permissão de administrador. No Ubuntu, você ganha essa permissão comando por comando, colocando sudo na frente. Nesta aula você vai entender o que acontece quando faz isso e como evitar os erros mais comuns.
- Quem é o root e por que o Ubuntu não deixa você usá-lo direto.
- O que o
sudofaz, e por que a senha não aparece quando você digita. - As formas de usar:
sudo comando,sudo !!,sudo -i,sudo -u. - Por que
sudo echo … > arquivonão funciona, e o que usar no lugar.
Root, o administrador
Todo Linux tem um usuário especial chamado root ("raiz"). Ele pode tudo: ler qualquer arquivo, apagar o sistema inteiro, mudar a senha de qualquer pessoa. Os outros usuários, como a ana, só mexem no que é deles, principalmente em /home/ana.
Veja a diferença: a pasta pessoal do root é proibida para a ana.
$ whoami ana $ ls /root ls: não é possível abrir o diretório '/root': Permissão negada
No Ubuntu, ninguém faz login como root. A senha dele vem bloqueada. Em vez disso, o primeiro usuário criado na instalação entra no grupo sudo e pode pedir poderes de root quando precisar. As vantagens:
- Menos acidentes: você trabalha como usuário comum e só vira administrador para um comando específico.
- Registro: cada uso do sudo fica anotado nos logs, com o nome de quem rodou o quê.
- Nenhuma senha compartilhada: cada administrador usa a própria senha. Para tirar o acesso de alguém, basta tirá-lo do grupo
sudo.
Usando o sudo
sudo vem de superuser do: "superusuário, faça".
- sudo
- "Rode o que vem depois como root."
- ls
- O comando que você quer rodar.
- /root
- O argumento desse comando, como sempre.
$ sudo ls /root [sudo: authenticate] Senha: « digite a SUA senha snap
Três coisas importantes sobre o pedido de senha:
- É a sua senha, a mesma do login. O root não tem senha no Ubuntu.
- Nada aparece enquanto você digita: nem letras, nem asteriscos. O teclado está funcionando. Digite e aperte Enter.
- Ela fica "lembrada" por 15 minutos naquele terminal. Os próximos
sudonão pedem de novo.
$ sudo apt update [sudo: authenticate] Senha: Atingido:1 http://br.archive.ubuntu.com/ubuntu resolute InRelease Obter:2 http://security.ubuntu.com/ubuntu resolute-security InRelease [126 kB] … $ sudo apt upgrade Lendo listas de pacotes... Pronto « dessa vez não pediu senha
Desde o Ubuntu 25.10, o sudo padrão é o sudo-rs, uma versão reescrita em Rust por segurança. O uso é o mesmo. As diferenças que você vai notar são o pedido de senha [sudo: authenticate] Senha: e algumas mensagens em inglês. O sudo antigo continua disponível com o nome sudo.ws.
O que o comando devolve
O sudo devolve o código de saída do comando que ele rodou. Se o comando deu certo, 0:
$ sudo mkdir /opt/meuapp $ echo $? 0 $ ls -ld /opt/meuapp drwxr-xr-x 2 root root 4096 Oct 15 10:31 /opt/meuapp « dono: root
Repare: a pasta foi criada pelo root, então pertence ao root. Se depois você quiser trabalhar nela sem sudo, vai precisar mudar o dono (veja chown).
Missão: tente criar a pasta /opt/meuapp sem sudo e veja o erro. Depois crie com sudo e confira o dono com ls -ld /opt/meuapp.
Formas diferentes de usar
Esqueceu o sudo? sudo !!
No bash, !! significa "o último comando". É o atalho mais usado com o sudo:
$ apt install htop Erro: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock-frontend - open (13: Permissão negada) Erro: Não é possível adquirir a trava da interface do dpkg (/var/lib/dpkg/lock-frontend), você é root? $ sudo !! sudo apt install htop « o bash mostra o comando completo antes [sudo: authenticate] Senha:
Um terminal inteiro como root: sudo -i
Para fazer várias tarefas de administrador seguidas, sudo -i (de interactive, "interativo") abre um shell de root. O prompt muda de $ para #, um aviso visual de que você pode tudo:
$ sudo -i #> whoami root #> pwd /root #> exit sair « o bash em português escreve "sair" $ whoami ana
No shell de root não existe "Permissão negada" para te proteger. Um rm errado apaga arquivos do sistema. Faça só o necessário e digite exit.
Como outro usuário: sudo -u
- sudo
- Executa como outro usuário…
- -u www-data
- …este (user). Sem
-u, o padrão é root. - ls /var/www
- O comando.
É útil para testar se um serviço, como o servidor web (usuário www-data), consegue ler os arquivos dele.
Ver o que você pode fazer: sudo -l
$ sudo -l
User ana may run the following commands on notebook:
(ALL : ALL) ALL
(ALL : ALL) ALL quer dizer: como qualquer usuário, de qualquer grupo, qualquer comando. Ou seja, administradora completa.
Esquecer a senha agora: sudo -k
Antes de sair de perto do computador, sudo -k (de kill, "invalidar") faz o próximo sudo pedir a senha de novo.
Qual forma usar?
| Forma | Exemplo | Melhor quando… |
|---|---|---|
| sudo comando | sudo apt update | Uma tarefa de administrador. É a forma padrão. |
| sudo !! | sudo !! | Você esqueceu o sudo no comando anterior. |
| sudo -i | sudo -i | Várias tarefas seguidas como root (com cuidado). |
| sudo -u | sudo -u www-data ls | Testar algo como outro usuário. |
| sudo tee | echo x | sudo tee arq | Gravar num arquivo do sistema (veja abaixo). |
Missão: entre num shell de root com sudo -i, confirme com whoami e pwd, liste /root e saia com exit. Repare como o prompt muda.
A armadilha do redirecionamento
Este comando parece certo, mas falha:
$ sudo echo "192.168.0.50 servidor" >> /etc/hosts bash: /etc/hosts: Permissão negada
O motivo: quem abre o arquivo para o >> é o seu shell, que roda como ana, antes do sudo entrar em ação. O sudo só vale para o echo, que não precisava dele.
A solução é o tee, um comando que grava num arquivo o que recebe. Como é ele quem abre o arquivo, o sudo vale na hora certa:
- echo "…"
- Gera o texto (como ana, sem problema).
- |
- Entrega o texto ao próximo comando.
- sudo tee
- Grava como root…
- -a
- …acrescentando no fim (append). Sem
-a, apaga o conteúdo antes. - /etc/hosts
- O arquivo.
$ echo "192.168.0.50 servidor" | sudo tee -a /etc/hosts 192.168.0.50 servidor
O tee também mostra na tela o que gravou. Para escondê-lo, acrescente > /dev/null no fim. Para editar arquivos maiores, use um editor: sudo nano /etc/hosts (veja nano e vim).
Quando não funciona
$ sudo apt update [sudo: authenticate] Senha: Authentication failed, try again. [sudo: authenticate] Senha:
O que aconteceu: a senha digitada não confere. Como nada aparece na tela, é fácil errar uma letra.
Como resolver: digite devagar; confira o Caps Lock e o layout do teclado. Lembre que é a sua senha de login.
$ sudo apt update [sudo: authenticate] Senha: sudo: I'm sorry joao. I'm afraid I can't do that
O que aconteceu: o usuário joao não está no grupo sudo. A mensagem é uma brincadeira dos programadores com o filme 2001: Uma Odisseia no Espaço.
Como resolver: um administrador precisa adicioná-lo: sudo usermod -aG sudo joao (veja Usuários e Grupos). O joao precisa sair e entrar de novo na sessão para valer.
O que aconteceu: quase sempre é a armadilha do redirecionamento (sudo echo … > arquivo), explicada acima.
Como resolver: use | sudo tee arquivo ou abra o arquivo num editor com sudo.
$ ls -l ~/notas.txt -rw-r--r-- 1 root root 120 Oct 15 10:40 /home/ana/notas.txt $ echo "mais uma" >> ~/notas.txt bash: /home/ana/notas.txt: Permissão negada
O que aconteceu: o arquivo foi criado com sudo (por exemplo, sudo nano ~/notas.txt), então o dono virou root.
Como resolver: devolva para você: sudo chown ana:ana ~/notas.txt. E evite usar sudo dentro da sua pasta pessoal.
Referência de opções
| Opção | Descrição | Exemplo |
|---|---|---|
| (nenhuma) | Roda o comando como root | sudo apt update |
-i | Abre um shell de login como root | sudo -i |
-s | Abre um shell como root, mantendo a pasta atual | sudo -s |
-u usuário | Roda como outro usuário | sudo -u www-data ls |
-l | Lista o que você pode rodar | sudo -l |
-k | Esquece a senha lembrada | sudo -k |
-v | Renova os 15 minutos sem rodar nada | sudo -v |
-n | Nunca pede senha; falha se precisar | sudo -n true |
Para editar quem pode usar sudo, use sempre sudo visudo, que confere a sintaxe antes de salvar. Um erro em /etc/sudoers pode deixar todos sem sudo.
Exercícios
1. Repetir com sudo
Você rodou apt update e esqueceu o sudo. Complete com o atalho:
2. Gravar num arquivo do sistema
Complete para acrescentar a linha ao /etc/hosts:
3. Shell de root
Complete para abrir um terminal como root:
4. Que senha o sudo pede no Ubuntu?
5. Por que sudo echo "x" > /etc/teste dá "Permissão negada"?
Resumo
sudo comandoroda um comando como root, pedindo a sua senha, que não aparece ao digitar.- A senha fica lembrada por 15 minutos;
sudo -kesquece. sudo !!repete o último comando com sudo;sudo -iabre um shell de root (saia comexit).- Para gravar em arquivo do sistema:
… | sudo tee -a arquivo. - Use sudo só quando precisar, e nunca dentro da sua pasta pessoal.