Ninguém ainda tem ✓, então eu montei uma resposta que tem tudo o que eu conseguia pensar.
1 Quando você executa um executável, às vezes o sistema operacional nega sua permissão. Por exemplo, executar make install com o prefixo como caminho do sistema precisará do sudo, enquanto que com o prefixo como caminho do sistema não será solicitado o sudo. Como o sistema operacional decide que a execução de um executável exigiria mais privilégios do que um usuário, mesmo antes de o programa fazer alguma coisa?
Não, isso não é feito quando um executável é iniciado. Isso é feito quando o executável tenta fazer alguma coisa.
O sistema operacional irá verificar as permissões e os recursos do sistema de arquivos (eles não são cobertos pelas permissões do sistema de arquivos e incluem reduzir o nível agradável, mknode, algumas coisas de rede de baixo nível, interromper os processos de outros, reiniciar, definir o horário etc.). Se você não tiver as permissões, não poderá fazê-lo. A raiz possui um conjunto completo de recursos, incluindo CAP_DAC_OVERRIDE (ignorar permissão de arquivo).
2 Às vezes, a execução de um programa não terá permissão negada, mas o programa poderá fazer mais coisas se for executado com o sudo. Por exemplo, ao executar o du em algum diretório do sistema, somente com o sudo ele poderá acessar algum diretório. Por que o sistema operacional não nega a permissão para executar um programa desse tipo ou prefere notificar mais privilégios antes que o programa possa ser executado?
O sistema operacional não pode saber o que o programa fará. Portanto, cabe ao programa verificar as permissões antes de iniciar e decidir o que fazer. Porém, ele não precisa fazer isso.
Nota: no Android, há um manifesto. Nesse aplicativo, o aplicativo declara quais privilégios ele pode usar. O sistema operacional eliminará qualquer aplicativo que tente usar um privilégio que não declara e nem sempre garante que um privilégio possa ser respeitado. por exemplo, o acesso à rede pode não estar disponível.
2 É verdade que sempre que o sudo funciona, o su também funciona, e sempre que o su funciona, o sudo também funciona? ou com su, um usuário pode fazer mais do que com sudo? Como o sistema operacional decide quando o sudo funciona e quando o su é necessário?
sudoe sufaça aproximadamente a mesma coisa. Algumas diferenças são o tratamento de variáveis de ambiente e outras formas de evitar problemas de segurança. No entanto, são as duas ferramentas para permitir que você se torne outro usuário e ambos têm um usuário root padrão.
su era a ferramenta original, requer que você digite a senha do usuário / grupo para o qual está mudando.
sudoé mais recente e requer, por padrão, que você digite sua própria senha, mas pode ser configurado para aceitar a senha do usuário / grupo para o qual você está alternando ou nenhuma senha. Ele também permite muita configuração, de quais comandos ele trabalhará, para quem e como ele será autenticado neste programa para este usuário nesta máquina. Também sudoedithá parte disso sudoe pode ser usado para permitir a edição como um usuário diferente e evitar o problema de segurança de descascar um editor (chamar o exec do editor para executar um processo arbitrário com privilégios escalados).