Todo processo em um sistema semelhante ao UNIX, assim como todo arquivo, tem um proprietário (o usuário, real ou um "pseudo-usuário" do sistema, como daemon
, bin
, man
, etc ) e um dono de grupo. O proprietário do grupo para os arquivos de um usuário é geralmente o grupo principal desse usuário e, de maneira semelhante, todos os processos que você inicia normalmente pertencem ao seu ID de usuário e ao seu ID de grupo principal.
Às vezes, porém, é necessário ter privilégios elevados para executar determinados comandos, mas não é desejável conceder direitos administrativos completos. Por exemplo, o comando passwd
precisa acessar o arquivo de senha de sombra do sistema para poder atualizar sua senha. Obviamente, você não quer dar privilégios de root a todos os usuários, apenas para que eles possam redefinir sua senha - o que, sem dúvida, levaria ao caos! Em vez disso, é preciso haver outra maneira de conceder temporariamente privilégios elevados aos usuários para executar determinadas tarefas. É para isso que servem os bits SETUID e SETGID. É uma maneira de dizer ao kernel para elevar temporariamente os privilégios do usuário, pela duração da execução do comando marcado. Um binário SETUID será executado com os privilégios do proprietário do arquivo executável (geralmente root
), e um binário SETGID será executado com os privilégios de grupo do proprietário do grupo do arquivo executável. No caso do comando passwd
, que pertence a root
e é SETUID, permite que usuários normais afetem diretamente o conteúdo do arquivo de senha, de maneira controlada e previsível, executando com privilégios de root. Existem vários outros comandos SETUID
em sistemas semelhantes ao UNIX ( chsh
, screen
, ping
, su
, etc), todos os quais requerem privilégios elevados para funcionar corretamente. Existem também alguns programas SETGID
, onde o kernel altera temporariamente o GID do processo, para permitir o acesso a arquivos de log, etc. sendmail
é um utilitário desse tipo.
O sticky bit
serve um propósito ligeiramente diferente. Seu uso mais comum é garantir que apenas a conta de usuário que criou um arquivo possa excluí-lo. Pense no diretório /tmp
. Tem permissões muito liberais, que permitem que qualquer pessoa crie arquivos lá. Isso é bom e permite que os processos dos usuários criem arquivos temporários ( screen
, ssh
, etc, mantêm informações de estado em /tmp
). Para proteger os arquivos temporários de um usuário, /tmp
tem o bit fixo definido, de modo que somente eu possa excluir meus arquivos e somente você pode excluir o seu. Claro, o root pode fazer qualquer coisa, mas temos que esperar que o administrador de sistemas não seja perturbado!
Para arquivos normais (isto é, para arquivos não executáveis), não há muito sentido em configurar os bits SETUID / SETGID. O SETGID nos diretórios de alguns sistemas controla o proprietário do grupo padrão para novos arquivos criados nesse diretório.