Em detalhes, funciona da seguinte maneira:
-
O arquivo executável
-
/usr/bin/sudo
tem o setuid bit definido, portanto, mesmo quando executado por outro usuário, ele é executado com o ID do usuário do proprietário do arquivo (root, nesse caso). -
sudo
verifica no arquivo/etc/sudoers
quais privilégios você possui e se você tem permissão para executar o comando que está invocando. Simplesmente,/etc/sudoers
é um arquivo que define quais usuários podem executar quais comandos usando o mecanismosudo
.É assim que o arquivo aparece no meu Ubuntu:
# User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
A terceira linha é o que presumivelmente lhe interessa. Permite que qualquer pessoa no grupo "sudo" execute qualquer comando como qualquer usuário.
Quando o Ubuntu configura a primeira conta durante a instalação, adicione essa conta ao grupo "sudo". Você pode verificar a quais grupos os usuários pertencem com o comando
group
. -
sudo
pede uma senha. Quanto ao fato de que ele precisa da senha do usuário, não da senha, isso é um trecho do manual do sudoers :Authentication and logging
The sudoers security policy requires that most users authenticate themselves before they can use sudo. A password is not required if the invoking user is root, if the target user is the same as the invoking user, or if the policy has disabled authentication for the user or command. Unlike su(1), when sudoers requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. This can be changed via the rootpw, targetpw and runaspw flags, described later.
No entanto, na verdade,
sudo
não precisa da sua senha de usuário para nada. Ele pede apenas para garantir que você é realmente você e para lhe fornecer algum tipo de aviso (ou chance de parar) antes de invocar algum comando potencialmente perigoso. Se você quiser desativar a senha, altere a entrada do sudo para:%sudo ALL=(ALL:ALL) NOPASSWD: ALL
-
Após a autenticação
sudo
gera o processo filho que executa o comando invocado. O filho herda o ID do usuário root de seu pai - o processosudo
.
Então, respondendo suas perguntas com precisão:
I thought I was switching over to the root user for a command.
Você estava certo. Cada comando precedido por sudo
é executado com o ID do usuário root.
Is there a root user?
Sim, existe uma conta de usuário root, separada da conta de usuário criada durante a instalação do sistema. No entanto, por padrão, no Ubuntu, você não tem permissão para efetuar login no terminal interativo como usuário root.
Am I root?
Não, você não é uma raiz. Você só tem privilégio para executar comandos individuais como uma raiz , usando o mecanismo sudo
descrito acima.
So why am I allowed to run root commands with my user's password?
Você só precisa inserir a senha do usuário devido ao mecanismo de segurança interno sudo
. Pode ser facilmente desligado. Você ganha seus poderes de root por causa do bit setuid de /usr/bin/sudo
, não por causa de qualquer senha que você digita.