setuid e setgid (abreviações de "set user ID upon execution" e "set group ID upon execution", que significam, respectivamente, "definir ID de usuário sob execução" e "definir ID de grupo sob execução") são sinalizadores de direitos de acesso do Unix que permitem que usuários rodem um executável com as permissões do dono ou grupo do executável,[1] respectivamente, e alterem o comportamento em diretórios.[2]

Eles são frequentemente utilizados para permitir que usuários, em um sistema de computador, executem programas com privilégios elevados temporariamente a fim de realizar uma tarefa específica. Enquanto que os privilégios assumidos de id de usuário ou id de grupo fornecidos não são sempre elevados, no mínimo eles são específicos.

setuid e setgid são necessários para tarefas que requerem privilégios mais elevados que aqueles os quais usuários comuns, tais como mudança de sua senha de login.[3] Algumas das tarefas que exigem privilégios elevados podem não ser imediatamente óbvias, entretanto - tais como o comando ping, que tem que enviar e escutar pacotes de controle em uma interface de rede.

Efeitos do setuid e do setgid editar

Os sinalizadores setuid e o setgid possuem um significado inteiramente diferente dependendo se eles são definidos para um arquivo ou para um diretório.

Quando definir um arquivo executável editar

Quando os atributos setuid e setgid são definidos em um arquivo executável, então quaisquer usuários capazes de executar o arquivo executarão automaticamente o arquivo com os privilégios do proprietário do arquivo (normalmente o root) e/ou do grupo do arquivo, dependendo dos sinalizadores definidos.[3] Isso permite que o designer do sistema permita que programas confiáveis ​​sejam executados, o que, de outra forma, o usuário não teria permissão para executar. Isto pode nem sempre ser óbvio. Por exemplo, o comando ping pode precisar de acesso a privilégios de rede que um usuário normal não pode acessar, portanto, pode receber o sinalizador setuid para garantir que um usuário que precise fazer ping em outro sistema possa fazê-lo, mesmo que sua própria conta não tenha o privilégio necessário para enviar pacotes.

Por motivos de segurança, o usuário invocador é geralmente proibido pelo sistema de alterar o novo processo por quaisquer meios, como por meio do uso do ptrace, LD_LIBRARY_PATH ou enviando sinais para ele, para explorar o privilégio elevado, embora os sinais do terminal ainda sejam aceitos.

Os bits setuid e setgid são normalmente configurados com o comando chmod definindo o dígito octal de alta ordem para 4 para setuid ou 2 para setgid. "chmod 6711 arquivo" definirá os bits setuid e setgid (4 + 2 = 6), tornando o arquivo com permissões de leitura / gravação / execução para o proprietário (7), e executável pelo grupo (primeiro 1) e outros (segundo 1 ). Quando um usuário diferente do proprietário executa o arquivo, o processo será executado com permissões de usuário e grupo definidos pelo seu proprietário. Por exemplo, se o arquivo pertencer ao usuário root e ao grupo wheel, ele será executado como root:wheel, independentemente de quem executar o arquivo.

A maioria das implementações do comando chmod também suporta argumentos simbólicos mais refinados para definir esses bits. A maneira numérica de definir essas permissões como usadas acima "chmod 6711 arquivo" não permite retirar essas mesmas permissões como seria de esperar com "chmod 0711 arquivo". O modo de granulação mais fina é mostrado na demonstração abaixo como "chmod ug + s".

Referências

  1. «Arquivos setuid e setgid». Dicas-L. 19 de abril de 1997. Consultado em 28 de agosto de 2018 
  2. «How to use special permissions: the setuid, setgid and sticky bits». Linux Config. 20 de novembro de 2017. Consultado em 28 de agosto de 2018 
  3. a b Frisch, Æleen (9 de fevereiro de 2009). Essential system administration. [S.l.]: O'Reilly. p. 351. ISBN 9780596550493 
  Este artigo sobre Unix é um esboço. Você pode ajudar a Wikipédia expandindo-o.