SUID e SGID no Linux Explained With Examples
On Outubro 1, 2021 by adminImagine uma situação em que você tem um script ou arquivo executável que sempre precisa ser executado por um determinado usuário, simplesmente porque esse usuário tem direitos de acesso adequados para as ações tomadas pelo script. Você também está disposto a que outros usuários sejam capazes de executar esse script, mas em última instância isso precisa ser executado como o usuário original do script (pois esse usuário só tem as permissões necessárias para as ações tomadas).
Por padrão, aplicações e programas Linux rodam com as mesmas permissões exatas do usuário que o executa. Devido a esta razão, precisamos de uma boa solução para a situação acima mencionada (ou seja: Todos os usuários devem ser capazes de executar um programa de propriedade de um determinado usuário como se o próprio proprietário o executasse).
É aqui que o SUID entra em cena. SUID não é nada mais que um bit de permissão especial disponível no Linux, que consegue isso com muita facilidade.
Se você é o dono de um arquivo executável, com a ajuda da permissão definida pelo SUID, outros usuários estarão executando o executável com sua permissão e não com a deles.
SUID é normalmente usado no Linux, para fornecer privilégios elevados temporariamente durante a execução. Esta elevação de privilégios não é de todo permanente. É uma elevação temporária apenas quando o programa/script está sendo executado.
Exemplos de Arquivos Executáveis no Linux com permissão SUID bit definida
Vamos entender isto considerando um exemplo. Da lista acima de executáveis,/usr/bin/passwd é algo que deve ser executável por todos os usuários no sistema(isto é porque todos os usuários devem ser capazes de mudar sua própria senha). Se você não sabe como as senhas funcionam no linux, eu recomendo a leitura do artigo abaixo.
Ler: Como as senhas funcionam no Linux
Atualizar a senha de um usuário requer que o usuário edite o arquivo /etc/passwd, /etc/shadow no linux. Entretanto, isto só é permitido para o usuário root. Esta é a razão pela qual o bit SUID é aplicado no arquivo /usr/bin/passwd. Como root é o dono desse arquivo, e sendo SUID definido nesse arquivo, qualquer usuário executando o comando /usr/bin/passwd irá executá-lo como usuário root. Vamos ver isto praticamente.
Below mostrado é o comando passwd disparado pelo usuário chamado sarath. Vamos ver se o processo de comando passwd está sendo executado como usuário root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Vamos abrir outro terminal, e acionar o ps aux commad e ver se o processo de comando passwd está sendo executado com o usuário root. Isto pode ser feito como mostrado abaixo.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Você pode ver claramente que o processo de comando passwd está rodando com o usuário root(visível a partir do primeiro campo da saída acima). Similar ao comando passwd, qualquer comando da lista de arquivos aplicados SUID mostrada anteriormente, será sempre executado com a permissão do dono do arquivo, independentemente do usuário que o estiver executando.
Notem também que mesmo o comando ping é SUID(Veja a lista inicial dada acima), isto é porque a execução do PING requer várias operações de rede, que só podem ser executadas pelo root.
Como configurar SUID no Linux?
Configurar SUID nos seus ficheiros/script requeridos está a um único comando CHMOD.
$ chmod u+s /path/to/file/or/executable
Substituir “/caminho/para/arquivo/ou/executável”, no comando acima, com o caminho absoluto do script em que precisa do bit SUID. Isto pode ser conseguido usando o método numérico do chmod também.
$ chmod 4755 /path/to/file/or/executable
O primeiro “4” em “4755” indica o SUID. Outro exemplo de método numérico é mostrado abaixo.
$ chmod 4750 /path/to/file/or/executable
Basicamente, no método numérico, simplesmente prefira 4 aos outros conjuntos de permissão que são necessários naquele ficheiro.
Como verificar se SUID é ou não aplicado num ficheiro?
Pode verificar se SUID bit é ou não aplicado num ficheiro usando o comando ls como mostrado abaixo.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
ls -l comando deve mostrar-lhe se o SUID é aplicado ou não. Basta olhar para o primeiro campo da saída ls -l. O s em -rwsr-xr-x indica o bit SUID. Em alguns casos você verá um S maiúsculo ao invés de um pequeno s que vimos acima. O Captal S indica que não há permissão executável aplicada a esse arquivo/ou script.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Você pode ver claramente na saída acima que, removendo a permissão do executável do arquivo /usr/bin/passwd transformou a saída de ls -l em S maiúsculo.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Como encontrar todos os ficheiros, que tem o bit SUID activado no linux?
Pode usar o comando find abaixo para procurar todos os ficheiros no sistema que tem o bit SUID activado. Se você é novo no comando find, eu recomendaria a leitura do artigo abaixo.
Ler: Procurar comando no Linux com exemplos
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Substitua o primeiro / no comando acima com a localização requerida para encontrar todos os arquivos SUID nessa localização. Por exemplo, para encontrar todos os arquivos com SUID dentro do /usr/bin, execute o comando abaixo.
Por favor lembre-se que o bit SUID é ignorado nos diretórios do Linux.
SGID é muito similar ao SUID. A única diferença é que o script/arquivo tendo o SGID configurado, será executado com a mesma permissão do dono do grupo.
Se você configurar o SGID em diretórios, todos os arquivos ou diretórios criados dentro desse diretório serão propriedade do mesmo grupo comum(dono do grupo do diretório onde o SGID está configurado).
Exemplos de arquivos SGID em linux
Como configurar o SGID no Linux?
Similiar ao SUID, o SGID pode ser configurado usando o comando chmod como mostrado abaixo.
root@localhost:~# chmod g+s /path/to/file
Substituir “/caminho/para/arquivo”, no comando acima, com o caminho absoluto do script em que você precisa do bit SGID. Isto pode ser conseguido usando o método numérico do chmod também(mostrado abaixo).
root@localhost:~# chmod 2755 /path/to/file
Como verificar se o SGID é aplicado num ficheiro ou script?
Similiar ao SUID, pode facilmente executar o comando ls -l num ficheiro/directório para encontrar se o SGID está ou não activado. O exemplo mostrado abaixo mostra o mesmo.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
A pequena parte s do primeiro campo no output about (-rwxr-sr-x) indica o bit SGID. Similar ao SUID, se você não tiver permissão executável aplicada no grupo, será S maiúsculo em vez de pequeno como mostrado abaixo.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
E habilitar permissão executável no grupo, fará com que seja pequeno s (mostrado abaixo.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Deixe uma resposta