Ninguém tem um ✓ ainda, então eu coloquei uma resposta que tem tudo que eu conseguia pensar.
1 Quando você executa um executável, às vezes o sistema operacional negará sua permissão para. Por exemplo, executar make install com o prefixo sendo um caminho do sistema precisará de sudo, enquanto que com o prefixo sendo um caminho que não seja do sistema, não será solicitado 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 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 um bom nível, mknode, alguns itens de rede de baixo nível, processos de outros, reinicialização, horário etc. ). Se você não tem as permissões, então você não pode fazê-lo. Raiz tem um conjunto completo de recursos, incluindo CAP_DAC_OVERRIDE (ignorar permissão de arquivo).
2 Às vezes, não será negada a execução de um programa, mas o programa poderá fazer mais coisas se for executado com o sudo. Por exemplo, quando rodando 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 de executar um programa desse tipo, ou é mais recomendável notificar o privilégio, antes que o programa possa ser executado?
O SO não pode saber o que o programa fará. Portanto, cabe ao programa verificar as permissões antes de começar e decidir o que fazer. Não tem que fazer isso embora.
Nota: no android há um manifesto, neste aplicativo o aplicativo declara quais privilégios ele pode usar. O sistema operacional matará qualquer aplicativo que tente usar um privilégio que ele não declare e o sistema operacional nem sempre garante que um privilégio possa ser honrado. 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 o sudo? Como o SO decide quando o sudo funciona e quando o su é necessário?
sudo
e su
fazem aproximadamente o mesmo. Algumas diferenças são o manuseio de variáveis de ambiente e outras evitações de segurança. No entanto, ambas são ferramentas para permitir que você se torne outro usuário, e ambos têm um usuário padrão de root.
su
foi a ferramenta original, exige que você digite a senha do usuário / grupo para o qual está mudando.
sudo
é mais recente e exige, por padrão, que você insira sua própria senha, mas pode ser configurado para aceitar a senha do usuário / grupo para o qual está mudando ou nenhuma senha. Ele também permite muita configuração, de quais comandos ele irá trabalhar, para quem e como ele será autenticado com este programa para este usuário nesta máquina. Há também sudoedit
que faz parte de sudo
e pode ser usado para permitir a edição como um usuário diferente e evitar o problema de segurança de sub-descarte de um editor (chamando exec do editor para executar um processo arbitrário com escalada privilégios).