Skip to content

chmod 4755

chmod 4755 define rwsr-xr-x: qualquer um executa o programa, e o bit setuid (o s) faz ele rodar com o ID do dono do arquivo, então um binário 4755 do root roda como root não importa quem o inicie.

Matriz de permissões

Quais bits de permissão cada classe tem
QuemLeitura (4)Escrita (2)Execução (1)Dígito
Dono (u)SimSimSim7
Grupo (g)SimNãoSim5
Outros (o)SimNãoSim5

Execução muda de sentido conforme o tipo. Num arquivo, deixa o kernel rodá-lo como programa. Num diretório, é a permissão de busca: entrar (cd) e alcançar os arquivos de dentro pelo nome. Leitura num diretório só lista os nomes.

O que cada classe pode fazer com um arquivo e com um diretório
QuemNum arquivoNum diretório
Dono (u)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens
Grupo (g)Ler e executarListar, entrar e abrir itens
Outros (o)Ler e executarListar, entrar e abrir itens

Bits especiais deste modo

  • setuid (4000): o programa roda com o ID do dono do arquivo, não de quem o iniciou. O Linux não dá significado a ele em diretórios e o ignora em scripts.

Dados

Representações deste modo
Octal4755
Simbólicorwsr-xr-x
ls -l, arquivo-rwsr-xr-x
ls -l, diretóriodrwsr-xr-x
Comando simbólico equivalentechmod u=rwxs,go=rx
umask padrão que gera esse modoNenhum dos umasks comuns; defina explicitamente com chmod
Como o Git registra um arquivo assim100755 (executável)
Bits especiaissetuid

Quando usar

  • Programas do sistema que precisam fazer uma única coisa privilegiada para qualquer usuário: o passwd é -rwsr-xr-x root para poder atualizar o /etc/shadow quando você troca a própria senha; su e mount são setuid root por motivos parecidos.
  • Só em programas compilados, escritos e auditados para isso, que abrem mão do privilégio assim que possível.

Quando não usar

  • Scripts: o Linux ignora setuid em scripts interpretados (veja execve(2)), então o bit simplesmente não faz nada.
  • Dar acesso root a um único comando: uma regra no sudoers gera log, pode ser limitada a argumentos específicos e não altera o arquivo.
  • Sistemas de arquivos montados com nosuid, que muitas distribuições usam em /tmp, /dev/shm e mídias removíveis: lá o bit é ignorado.
  • Qualquer programa que abra um shell, grave arquivos arbitrários ou carregue plugins: torná-lo setuid root entrega o root a todo usuário local.

Auditando arquivos setuid e setgid

Arquivos setuid inesperados são um sinal clássico de invasão ou de instalação mal configurada. Liste de tempos em tempos e compare com o que a sua distribuição instala.

sudo find / -xdev -type f -perm -4000 -exec ls -l {} + 2>/dev/null   # setuid
sudo find / -xdev -type f -perm -2000 -exec ls -l {} + 2>/dev/null   # setgid
sudo chmod u-s /usr/local/bin/tool                                  # remove o setuid

Comandos

Aplicar em um arquivo ou diretório
sudo chmod 4755 /usr/local/bin/tool
sudo chmod u=rwxs,go=rx /usr/local/bin/tool   # mesmo resultado
Conferir o resultado
stat -c '%a %A %n' /usr/local/bin/tool     # Linux (stat do GNU): 4755 -rwsr-xr-x
stat -f '%Mp%Lp %Sp %N' /usr/local/bin/tool   # macOS e BSD

Aplicando numa árvore inteira

Nunca aplique 4755 de forma recursiva. O setuid vai em binários específicos e auditados; numa árvore, cada arquivo virava um programa que roda como o dono, e o Linux não dá significado nenhum ao setuid em diretórios.

Perguntas frequentes

O que significa o s em rwsr-xr-x?
É o bit setuid (octal 4000), mostrado na posição de execução do dono. O s minúsculo indica que a execução também está ligada; o S maiúsculo (como em 4644, rwSr--r--) indica setuid sem execução, o que não serve para nada.
chmod 4755 é perigoso?
Num binário do root, é tão perigoso quanto o pior bug do programa, porque todo usuário local pode rodá-lo como root. Use só em programas do sistema bem auditados.
Setuid funciona em shell script?
Não. O kernel Linux ignora setuid e setgid em scripts que começam com #!. Use sudo com uma regra específica, ou um pequeno programa compilado como intermediário.
Por que o bit setuid sumiu depois que editei o arquivo?
O Linux zera setuid e setgid quando um processo sem privilégio grava no arquivo, e o chown também zera. Ligue de novo com chmod u+s depois da mudança.

Revisado em por Arielton Oberek.