Como o Setuid Permite que Usuários Executem Arquivos com Privilégios Elevados

Bg Setuid

Quando você executa um arquivo executável no Linux, ele geralmente é executado com o ID de usuário e grupo atuais. No entanto, há momentos em que você precisa executar esse arquivo como outro usuário (como root). Em vez de trocar sua conta de usuário, você pode usar o setuid para executar o executável como o proprietário do arquivo e não como o usuário atual. Aqui explicaremos como o setuid funciona e como permite que os usuários executem executáveis/binários com privilégios elevados.

Como o setuid Funciona?

Setuid significa SET User ID on execution. Vamos supor que temos um executável chamado “identity” criado pelo usuário root. Quando você o executa, ele será executado com seu ID de usuário, ID de grupo e privilégios de usuário. Se o bit setuid estiver definido no arquivo “identity”, quando você o executar, ele será executado como o usuário root e seus privilégios de usuário.

Como ilustração, podemos verificar a propriedade do arquivo “identity” primeiro e verificar se ele é de propriedade do usuário root. A string de permissão também mostra os bits executáveis (x) definidos para o usuário, grupo e outros.

O usuário “john1” executa o arquivo “identity”, que se torna um processo na execução. Como mostrado na lista de processos, o processo é criado e executado sob o nome de usuário e ID de usuário “john1”.

Setuid John Id Owner

Em seguida, como usuário root, definimos o bit setuid do arquivo “identity”:

chmod u+s /usr/bin/identity

“u” denota que o bit setuid (+s) deve ser definido apenas para o usuário.

Para o proprietário, na parte executável da string de permissão, podemos ver que “x” foi substituído por “s.” Sempre que você encontrar “s” para um executável, isso significa que o bit setuid foi definido nele.

A variante numérica do comando chmod também pode ser usada, como mostrado abaixo.

chmod4755/usr/bin/identity

A adição de 4 na string de permissão numérica denota a inclusão do bit setuid.

O que acontece quando “john1” executa o arquivo “identity” novamente. Olhando para a lista de processos em execução, agora podemos ver que o processo é criado e executado pelo usuário “root” em vez de “john1.”

Setuid John Ids Ownder

Uso Importante do Bit Setuid

Na maioria das vezes, você ouvirá de especialistas que não deve executar aplicativos como usuário root. No entanto, há instâncias em que certos arquivos precisam ser executados com permissão de root. Por exemplo, o utilitário passwd que vem instalado por padrão em sistemas Linux tem o bit setuid definido nele.

A razão é simples: as informações de senha para um usuário são armazenadas nos arquivos “/etc/passwd” e “/etc/shadow”, que só podem ser modificados por “root.” Quando “john1” tenta mudar a senha para si mesmo, ele precisará ter a permissão para modificar informações nos dois arquivos mencionados. Ter o bit setuid definido no passwd permite que “john1” tenha temporariamente permissões de root para mudar a senha do usuário e também atualizar informações nos dois arquivos.

Risco de Segurança do Setuid

Se você não tiver cuidado, um atacante pode explorar binários setuid para controlar seu sistema. Os usuários normalmente não devem ter programas setuid instalados, especialmente setuid para usuários que não sejam eles mesmos. Mais importante ainda, você não deve ter nenhum binário habilitado setuid para o usuário root na sua pasta Home. Estes são geralmente Cavalos de Tróia ou malware.

Conclusão

Setuid só pode ser definido em arquivos executáveis. Da mesma forma, o bit setgid também pode ser definido, o que permite que todos os membros de um grupo executem um executável com permissões de proprietário.

Observe que os bits setuid e setgid são sensíveis à segurança e devem ser usados apenas por administradores de sistema qualificados.

Leia a seguir:

  • Como Usar o Bit Sticky para Gerenciar Arquivos em Diretórios Compartilhados no Linux
  • Como Fazer Verificações de Ortografia no Terminal Linux
  • Usando os Comandos find, locate, which e whereis para Pesquisar Arquivos no Linux