Resumo executivo: "raiz" é o nome real da conta do administrador. "sudo" é um comando que permite que usuários comuns executem tarefas administrativas. "Sudo" não é um usuário.
Resposta longa:
"root" (também conhecido como "superusuário") é o nome da conta de administrador do sistema. As origens do nome são um pouco arcaicas, mas isso não importa.
O usuário root tem o ID de usuário 0 e nominalmente possui privilégios ilimitados. O Root pode acessar qualquer arquivo, executar qualquer programa, executar qualquer chamada do sistema e modificar qualquer configuração. (Mas veja abaixo¹).
Antes da invenção do comando "sudo", se você desejava executar tarefas administrativas, era necessário efetuar login como root, obtendo um prompt de login² de alguma forma ou com o su
comando ("su" sendo a abreviação de usuário substituto.) ³
Isso é um pouco complicado, e também não permite que você conceda aos usuários poderes administrativos parciais. Portanto, o comando "sudo" (abreviação de "substitute user do") foi inventado.
O comando "sudo" permite executar comandos com privilégios de superusuário, desde que o seu ID de usuário esteja no arquivo sudoers, fornecendo a autorização necessária.
Portanto, por exemplo sudo vi /etc/hosts
, você poderá editar o arquivo hosts como se estivesse executando como root. Você nem precisa da senha de root, apenas sua própria senha de login.
E, é claro, sudo su
permitiria que você simplesmente se tornasse raiz. O resultado é o mesmo que se você tivesse feito login como root ou executado o su
comando, exceto que você não precisa saber a senha root, mas precisa estar no arquivo sudoers.
O arquivo sudoers determina quem pode usar o comando sudo e o que eles podem fazer com ele.
O arquivo sudoers é o que oferece vários administradores⁴. Efetivamente, seus administradores são root, além de todos os que estão listados no arquivo sudoers. Sem o arquivo sudoers, o único administrador é root.
De fato, nas organizações em que outra pessoa administra seu computador, é bastante comum não saber a senha raiz do seu próprio computador - desde que você esteja no arquivo sudoers, isso não importa.
Em uma empresa em que trabalhei, com um farm de servidores gigantesco, apenas um número muito, muito pequeno de pessoas conhecia as senhas raiz. Em vez disso, havia um banco de dados de quem tinha permissão para trabalhar em quais servidores. Um processo automatizado adiciona você aos arquivos sudoers dos servidores aos quais você está autorizado a acessar e o remove quando sua autorização expira.
¹ Mais uma coisa: as versões modernas do Unix agora podem restringir até o que o usuário root pode fazer.
No SELinux (Security Enhanced Linux), existe efetivamente uma lista de controle de acesso que determina qual programa pode fazer o que e até o root não consegue ultrapassar essas restrições.
No sistema SIP ( System Integrity Protection ) da Apple (também conhecido como "sem raiz"), determinados arquivos e diretórios são bloqueados para que somente aplicativos na lista de desbloqueio apropriada possam acessá-los.
Esses sistemas existem para proteger um sistema do caso em que um usuário mal-intencionado consegue obter acesso root. (Ou, em alguns casos, para impedir que os usuários violem seus dispositivos incorporados.) Por razões óbvias, é extremamente difícil ignorar essas restrições, mesmo com acesso root.
² O prompt "login:" é outra parte arcaica da história do Unix, que remonta a quando todos usamos terminais ASCII em linhas seriais, em vez de sistemas de janelas. Você ainda pode obter um prompt de "login:" digitando login
qualquer janela do terminal ou abrindo uma conexão ssh (ou telnet ou rsh) com o computador de outro lugar. Você pode efetuar login como outro usuário a partir daí, se desejar. (E se o seu computador tiver portas seriais, você ainda poderá configurá-lo para permitir logins nelas.)
³ Também é possível que programas individuais tenham acesso root. Esses programas podem fazer qualquer coisa que um usuário com acesso root possa fazer, mesmo quando executados por um usuário comum. Normalmente, eles são limitados a tarefas específicas. Por exemplo, o programa crontab possui privilégios de root para poder editar as tabelas cron. Obviamente, "sudo" tem privilégios de root para que ele possa fazer o que faz.
Cover Vou abordar mais um ponto sobre o qual falei anteriormente. Eu tenho usado "administrador" e "raiz" de forma intercambiável, mas existem outros tipos de administradores. Elas são freqüentemente chamadas de "contas de função", ou seja, essas contas não pertencem a humanos reais, mas existem para desempenhar uma função específica no sistema. Se você der uma olhada no /etc/passwd
arquivo em seu sistema, encontrará dezenas e dezenas dessas contas.
Por exemplo, se o mysql estivesse instalado no seu sistema, haveria um usuário "mysql" e todos os arquivos de banco de dados, arquivos de configuração etc. seriam de propriedade desse usuário. Somente esse usuário teria as permissões necessárias para acessar os arquivos e executar o servidor mysql. De certa forma, esse usuário seria uma conta de administrador, mas apenas para o mysql.
Se você precisasse executar tarefas administrativas do banco de dados, você se tornaria "mysql" com o su mysql
comando ou usaria sudo
onde o arquivo sudoers lhe daria privilégios de mysql para esses comandos específicos.