sudo é o chamado "SetUID binário", como você pode ver na saída de ls -l :
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 159016 Mar 21 20:40 /usr/bin/sudo
O s na quarta coluna (onde você normalmente encontra um x nos arquivos executáveis) informa que o bit SetUID está definido. Esse bit tem um significado significativo: quando um binário com o conjunto de bits SetUID é executado, ele não é executado com o ID do usuário chamado, mas com o ID do usuário do binário (neste caso, root ).
E essa é a pista. sudo é sempre executado com privilégios de superusuário (como root ). Portanto, sudo tem a capacidade de executar algumas tarefas privilegiadas, como chamar funções do sistema, somente permitidas para root . Uma dessas chamadas de sistema (a essencial) são setuid(2) e amigos. Ao chamar setuid() , um processo pode alterar seu UID para qualquer UID desejado (representando-se, assim, outro usuário).
O que o sudo faz é:
- leia e analise
/etc/sudoers, procure o usuário solicitante e suas permissões, - solicite uma senha ao usuário solicitante (geralmente, essa é a senha do usuário, mas também pode ser a senha do usuário de destino ou ignorada como com
NOPASSWD) - crie um processo filho no qual ele chama
setuid()para alterar para o usuário de destino - executa um shell ou o comando dado como arguemnts neste filho