Setuid
Setuid e Setgid são termos Unix , abreviação de "Set User ID" e "Set Group ID", respectivamente. Setuid, também às vezes chamado de "suid" e "setgid" são permissões de acesso que podem ser atribuídas a arquivos ou diretórios em um sistema operacional baseado em Unix . Eles são usados principalmente para permitir que usuários do sistema executem binários com privilégios elevados temporariamente para executar uma tarefa específica.
Se um arquivo tem o bit "Setuid" ativado, ele é identificado com um “s” em uma lista da seguinte forma:
-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd
Essa propriedade é necessária para que usuários normais possam executar tarefas que requerem privilégios mais altos do que os disponíveis para um usuário normal. Algumas tarefas que exigem privilégios elevados podem não ser óbvias (por exemplo, o comando ping , que deve enviar e escutar pacotes de controle em uma interface de rede).
Setuid em executáveis
Normalmente este bit é definido em executáveis. Quando um executável binário recebe o atributo setuid, os usuários normais do sistema podem executar esse arquivo e obter privilégios do usuário que possui esse arquivo (geralmente root ) no processo criado . Quando o processo obtém privilégios de administrador, o aplicativo pode executar tarefas no sistema que usuários normais normalmente não seriam capazes de fazer. O sistema impedirá que o usuário que invocou o executável altere o novo processo de qualquer forma, como usar ptrace, LD_LIBRARY_PATH ou enviar sinais para ele (sinais do próprio terminal serão aceitos).
Por exemplo, o bit setuid é usado no arquivo /usr/bin/passwd para que todos possam alterar sua senha de forma controlada. Ser capaz de executar este programa permite que um usuário grave no arquivo de senha (/etc/shadow, não confundir com /etc/passwd), mas sem ter que conceder permissões de gravação ao arquivo, o que seria uma grande falha de segurança.
Embora o recurso setuid seja muito útil em muitos casos, ele pode representar um risco de segurança se o atributo setuid for atribuído a programas executáveis que não foram cuidadosamente projetados. Os usuários podem explorar vulnerabilidades em programas com bugs para obter privilégios elevados permanentemente ou executar involuntariamente um cavalo de Tróia .
O atributo setgid permitirá que privilégios baseados em grupo sejam alterados em um processo, da mesma forma que setuid faz para privilégios baseados em usuário.
Setuid em diretórios
O sinalizador setgid em um diretório tem um significado completamente diferente de sua aplicação em arquivos. Diretórios com permissão setgid forçam todos os arquivos e subdiretórios neles criados a pertencerem ao grupo do proprietário do diretório e não ao grupo do usuário que cria o arquivo ou subdiretório.
O sinalizador setuid, por outro lado, não tem efeito se for aplicado a um diretório. A razão é que se você propagasse o proprietário do diretório para objetos criados dentro desse diretório, o usuário que criasse um arquivo perderia imediatamente suas permissões de proprietário no arquivo, talvez impedindo-o de poder usá-lo ou modificá-lo novamente .
Exemplos
Adicionar permissões SUID a um binário de exemplo (usuário)
# chmod u+s /home/user/executable
Remover permissões SUID para um binário (usuário)
# chmod us /bin/ping
Adicionar permissões GUID a um binário de exemplo (grupo)
# chmod g+s /home/usuário/executável
Remover permissões GUID para um binário de exemplo (grupo)
# chmod gs /home/usuário/executável
Visualizando as permissões de um binário com atributos SUID
# ls -al /bin/ping
-rwsr-xr-x 1 root root 35712 2011 -05-03 12 :43 /bin/ping
Encontre todos os arquivos com permissões SUID ou SGID
# find / -path /proc -prune -o -type f -perm +6000 -ls
Encontre todos os arquivos com permissões apenas SUID
# find / -path /proc -prune -o -type f -perm +4000 -ls
Encontre todos os arquivos com permissões apenas SGID
# find / -path /proc -prune -o -type f -perm +2000 -ls
Exemplos de uso
SUID
4711 permissões em um arquivo executável de propriedade do root .
Um usuário chamado fulano de tal tenta executar o arquivo. As permissões para o arquivo executável são definidas para todos os usuários com permissão de execução (471 1 ), portanto, fulano de tal pode executar o arquivo. O proprietário do arquivo é root e a permissão SUID está definida ( 4 711), então o arquivo é executado como root .
Dessa forma, o arquivo é executado como root , o que significa que fulano de tal pode modificar outros arquivos que normalmente não pode sem conceder privilégios completos a fulano de tal. Isso é usado no arquivo binário /usr/bin/passwd. passwdvocê precisa modificar o arquivo /etc/passwdy /etc/shadowque armazena informações de conta de usuário e hashes de senha, respectivamente, mas esses arquivos só podem ser modificados pelo root .
[ fulano de tal @ host ~ ] $ stat -c "%a %U:%G %n" /usr/bin/passwd
4701 root:root /usr/bin/passwd
[ fulano de tal @ host ~ ] $ passwd
Alterando a senha para fulano de tal.
GUIA
2071 um diretório chamado "plants" que tem "sultan" como grupo proprietário e "root" como usuário proprietário.
Um usuário chamado "fulano de tal" pertence principalmente ao grupo "fulano de tal" e secundariamente ao grupo "sultão". "fulano de tal" cria um novo diretório chamado "mango" dentro do diretório "plantas". O grupo que possui o novo diretório chamado "mango" herda "sultano".
Sem GUID, o grupo proprietário teria sido "fulano de tal".
[ fulano de tal @ host ~ ] $ grupos fulano
de tal fulano : fulano de tal sultão
[ fulano de tal @ host ~ ] $ stat -c "%a %U:%G %n" ~/plants/
2770 fulano de tal:sultão /home/fulano/plants/
[ fulano de tal @ host ~ ] $ mkdir ~/plants/mango
[ fulano de tal @ host ~ ] $ touch ~/plants/.mango
[ fulano @ host ~ ] $ stat -c "%U:%G %n" ~/plants/mango/
fulano :sultan /home/fulano/plants/mango/
[ fulano de tal @ host ~ ] $ stat -c "%U:%G %n" ~/plants/.mango
fulano de tal:sultão /home/fulano/plantas/.mango
[ fulano de tal @ host ~ ] $ teste de toque
[ fulano de tal @ host ~ ] $ stat -c "%U:%G %n" ~/test
fulano de tal:fulano de tal /home/fulano/teste