Setuid e setgid (e setcap onde existe) são as únicas maneiras de elevar privilégios. Além de através deste mecanismo, um processo pode renunciar a privilégios, mas nunca obtê-los. Portanto, você não poderá fazer nada que requeira privilégios adicionais.
Por exemplo, os programas su
e sudo
precisam ser capazes de executar comandos como qualquer usuário. Portanto, eles precisam ser executados como root, independentemente de qual usuário os chamou.
Outro exemplo é ping
. Os soquetes TCP e UDP são acessíveis para qualquer usuário, porque esses protocolos possuem uma noção de portas e um processo pode assumir o controle de uma porta (o que é chamado de ligação), portanto o kernel sabe para onde enviar os pacotes. O ICMP não possui essa noção, portanto, somente programas em execução como raiz (ou com o recurso apropriado) podem solicitar que os pacotes ICMP sejam despachados para eles. Para que qualquer usuário possa executar ping
, o programa ping
precisa ter um privilégio adicional, então é root setuid (ou setcap).
Para um exemplo de privilégios de grupo, considere um jogo que armazena altas pontuações locais em um arquivo. Uma vez que apenas altas pontuações reais alcançadas pelos usuários devem ser armazenadas no arquivo de pontuação, o arquivo de pontuação não deve ser gravável pelos jogadores. Apenas o programa do jogo deve ter permissão para escrever no arquivo de pontuação. Assim, o programa do jogo é setgid games
, e o arquivo de pontuação é gravável pelo grupo games
, mas não pelos jogadores.
Há uma abordagem alternativa para elevar permissões, que é iniciar programas que exigem privilégios adicionais de um programa de iniciador privilegiado. Quando um usuário deseja executar uma tarefa que requer privilégios adicionais, ele executa um programa front-end que usa alguma forma de comunicação entre processos para executar a ação privilegiada. Isso funciona bem para alguns casos de uso, como ping
(um programa ping
para analisar opções e relatar progresso, e um serviço ping-backend
que envia e recebe pacotes), mas não para outros casos de uso, como a pontuação alta do jogo. arquivo.