Perguntas Frequentes

O que é SUDO?
Última atualização 2 ano(s) atrás

O comando sudo significa "substitute user do" e indica ao sistema que queremos executar um determinado comando com elevação administrativa. Essa elevação permite que o usuário execute comandos como superusuário (root) - "Grandes poderes requerem grandes responsabilidades". Para o Linux esse é o usuário administrativo com maior elevação e domínio no sistema, por isso, tenha cuidado ao executar comandos de exclusão principalmente, o sistema permite que você execute esse comando por exemplo: sudo rm -rf / e ele apaga toda a raiz do sistema e, se o usuário tiver permissão, será executado sem confirmação! Seria o mesmo que apagar o C:\ do Windows com ele em uso - Nunca o faça isso!
Seu uso aumenta o nível de segurança, permite diversificar as permissões dos usuários e não utilizar o usuário root para todas as execuções. A senha digitada para execução do comando é a do usuário logado e não a do root. Os comandos executados com sudo são altamente auditáveis pois são gravados por padrão em logs. Alguns sistemas bloqueiam o usuário root por padrão para execução de comandos ou login, principalmente remoto.
Exemplos de comandos com sudo:
$ sudo yum update (Red Hat, CentOS, Fedora)
$ sudo apt update (Debian, Ubuntu, Mint)
Esses comandos simplesmente atualizam a base de repositórios com as últimas atualizações de programas, tanto do sistema quanto de terceiros, mas não são aplicadas.

Diferenças na elevação
Quando usamos o sudo antes de outro comando indicamos ao sistema que ele seja executado elevação e não necessariamente que esse usuário tenha permissões de root, pois será checado pelo sistema se o usuário possui permissões para execução do comando em si, essa permissão é cadastrada no sudoers, um arquivo de texto que somente usuários root possuem permissão de edição. Esse arquivo pode ser editado manualmente o que não é recomendado, mas também por segurança há sistemas que podem dificultar ou mesmo bloquear essa ação, o ideal é utilizar o comando visudo para isso, as boas praticas de administração de sistema sugerem que o gerenciamento seja efetuado por grupos de usuários. Não trataremos a fundo essas configurações por se tratarem de segurança e podem variar muito entre ambientes, cabe aqui somente a ilustração de como funciona o permissionamento para que faça sentido o uso de comandos pelos usuários e identificar quando não se possui um determinado.


De maneira geral como funciona: você pode cadastrar o usuário mickey para somente executar comandos de montar e desmontar unidades de disco com uso do mount - mickey ALL=(root) /bin/mount, /bin/umount (linha adicionada no sudoers). Esse usuário precisará colocar o sudo para executar o comando mount/umount, informar a senha também para a primeira execução e há uma contagem de tempo para não precisar digitá-la de novo. Vamos imaginar outro usuário, donald, sem as mesmas permissões e sem permissões de sudo. Contudo, o utilizador do usuário donald tem a senha do usuário mickey, ele não conseguirá executar o comando mount com sudo, mas poderá logar como mickey e para utilizará o su (switch user):

donald@host$ su mickey
password:
mickey@host:/home/donald$ sudo -t ext 4 /dev/sdb1 /disk
mickey@host:/home/donald$ df -h /disk
Sist.Arq. Tam. Usado Disp. Uso% Montado em
/dev/sdb1 489G 261G 229G 54% /disk

Percebemos nesse exemplo que o usuário donald apesar de não ter permissão pode executar com outro usuário que possua, desde que tenha a senha para utilizar desse usuário.

Agora temos outra situação, o usuário mickey possui permissão para executar qualquer comando como root: mickey ALL=(root) ALL (linha no sudoers) e com isso consegue inclusive se logar como root usando sudo, ou seja, com sua senha, logo:
mickey@host$ sudo su
password:
root@host:/home/mickey#
Esse usuário possui privilégios para se tornar root, ele não tem a senha do usuário root e por isso não pode se tornar root simplesmente com su (switch user).

Sobre isso ainda cabe um esclarecimento, su sem usuário é root por padrão, assim como sudo su.

Uma observação é a forma de identificar pelo terminal: o sinal $ identifica um usuário comum e # o usuário root.

Onde estou?
Quando logamos no sistema, o diretório é o raiz do usuário, por padrão costuma ser: /home/usuario. Mas se trocarmos o usuário, podemos entrar em diferentes lugares, seguem exemplos.

Comando sudo su troca o usuário e mantém o diretório em que se encontrava:
mickey@host$ pwd
mickey@host$ /home/mickey
mickey@host$ sudo su
password:
root@host:/home/mickey#

Comando sudo su - troca o usuário e muda para o diretório raiz do usuário destino:
mickey@host$ pwd
mickey@host$ /home/mickey
mickey@host$ sudo su -
password:
root@host# pwd
root@host# /root

OBS: o mesmo vale para a troca (su) sem sudo. O traço indica para onde seguir após o login. Há situações nas quais o usuário destino não tem permissão no diretório origem e nesse caso ele será redirecionado ao diretório padrão do usuário destino.

- Caso precise executar um comando com outro usuário executa-se:
mickey@host$ sudo -u jboss /opt/jboss/bin/standalone.sh

- Caso precise descobrir quais comandos o usuário logado possui permissão (ou não) utilize:
mickey@host$ sudo -l

Por favor, aguarde!

Por favor aguarde... vai levar um segundo!