'sudo' permite que você inicie qualquer programa como qualquer usuário. É 'setuid root', já que o próprio programa requer permissões de root para fazer isso. O poder do sudo é que você pode facilmente configurar quem pode fazer o quê. Você pode permitir que um usuário execute nmap (e somente nmap) usando o sudo.
'su' permite que você ative um shell como qualquer usuário. Quando você inicia um shell, você pode obviamente iniciar qualquer outro programa. Portanto, é mais perigoso; em sistemas bem administrados, su
access está geralmente desativado, mas sudo
pode estar disponível para programas distintos.
A razão pela qual os dois programas acima são usados é a responsabilidade. Sudo registra todas as solicitações feitas. Portanto, é muito fácil para um administrador controlar o que um usuário fez usando privilégios de root. Se você concede acesso a um shell, o usuário pode fazer o que quiser (é um 'buraco negro'). (Obviamente, o log avançado no nível do kernel frustra isso).
Naturalmente, esses programas também podem ser marcados com setuid
. Isso altera as permissões para o proprietário do binário ao executá-lo. Se você conseguir ativar o setuid
em, por exemplo, /bin/bash
e defina o proprietário de /bin/bash
para root
, você será root toda vez que executar /bin/bash
.
Por fim, o acesso físico à máquina permitirá que você faça o que quiser. Você pode inicializar a partir de uma unidade flash e acessar o sistema de arquivos local. Você pode configurar seu gerenciador de inicialização para usar um processo init
diferente que inicia imediatamente um shell no modo de usuário único (sem solicitar uma senha).