Linux / Comando chmod: alterar e conferir permissões de arquivos
chmod altera os bits de permissão de arquivos e diretórios, usando números como 640 ou expressões como u+x. No Linux, confira o caminho e o modo atual antes da mudança: um x em arquivo significa execução, enquanto em diretório significa permissão de busca ou travessia. Alterar o proprietário é uma tarefa de chown, não de chmod.
Sintaxe e condições da prática
chmod [opções] modo arquivo...
A sintaxe é descritiva: substitua modo e arquivo pelos valores apropriados. Os exemplos usam o GNU chmod e a opção GNU stat -c. Consulte chmod --version, chmod --help e man chmod no sistema em que fará a tarefa.
Faça a prática em Linux, num sistema de arquivos que represente as permissões POSIX, usando apenas arquivos seus. É necessário ser proprietário do arquivo ou ter a autorização administrativa aplicável. O fato de conseguir gravar o conteúdo de um arquivo de outra pessoa não significa, por si só, poder alterar seu modo.
Na verificação de um arquivo de texto de teste com GNU chmod 8.32 no Bash do Git para Windows, a consulta stat continuou mostrando 644 depois de chmod 640 e chmod u+x, embora ambos retornassem 0. Esse resultado não confirmou a aplicação dos modos POSIX nem o controle de acesso Linux. Os modos esperados abaixo descrevem a prática em Linux; confira sempre o resultado no sistema de arquivos realmente usado.
Ler proprietário, grupo e outros
As três posições de um modo como 640 correspondem, nessa ordem, ao proprietário, ao grupo do arquivo e aos demais usuários. Em cada posição, some 4 para leitura, 2 para escrita e 1 para execução ou busca. Assim, 6 é leitura e escrita; 4 é somente leitura; 0 não concede nenhum desses três bits àquela categoria.
Em um arquivo comum, r permite ler o conteúdo e w permite modificá-lo. O bit x participa da autorização para executá-lo, mas não instala o interpretador necessário nem transforma qualquer texto em um programa válido.
Em um diretório, r permite listar nomes, x permite percorrer o caminho e acessar entradas, e w participa da criação e remoção de entradas. O acesso efetivo também depende do caminho e das permissões relevantes. Por isso, retirar x de um diretório pode impedir a abertura de um arquivo mesmo quando o próprio arquivo permite leitura.
Preparar os arquivos e acrescentar u+x
Abra uma pasta de trabalho gravável. O bloco cria uma nova subpasta de prática com mktemp, entra nela, cria script.sh e report.txt e define inicialmente 640 nos dois arquivos. Em seguida, conserva o comando u+x do exemplo para acrescentar execução apenas ao proprietário do script:
chmod_lab=$(mktemp -d ./chmod-demo.XXXXXX) &&
cd -- "$chmod_lab" &&
set -C &&
printf '%s\n' '#!/bin/sh' 'printf "ok\n"' > script.sh &&
printf 'relatorio\n' > report.txt &&
chmod 640 script.sh report.txt &&
printf 'Pasta de prática: %s\n' "$PWD" &&
chmod u+x script.sh
Continue os próximos exemplos nessa mesma pasta e execute-os na ordem apresentada. O encadeamento com && interrompe o bloco se uma etapa falhar. A opção de shell set -C impede que a redireção com > sobrescreva um arquivo regular já existente; ela não impede que chmod altere o modo de um arquivo existente.
Em Linux com suporte aos modos usados, script.sh passa de 640 para 740: apenas o x do proprietário é acrescentado, enquanto o r do grupo permanece. Confira com stat -c '%a %n' script.sh report.txt. Não interprete a ausência de texto na saída de chmod como uma falha: normalmente o comando bem-sucedido é silencioso.
Definir 644 e remover permissões de grupo e outros
No arquivo report.txt criado na prática, defina leitura e escrita para o proprietário e somente leitura para grupo e outros:
chmod 644 report.txt
O resultado esperado nessa prática Linux é 644, representado na parte de permissões de ls como rw-r--r--. Nenhuma das três categorias recebe execução. Essa escolha só é adequada se o conteúdo realmente puder ser lido por grupo e outros; o número não é uma recomendação universal para documentos.
Agora observe a mudança feita por uma expressão simbólica:
ls -l report.txt
chmod go-rwx report.txt
ls -l report.txt
Partindo de 644, o modo esperado é 600: go seleciona grupo e outros, e -rwx remove deles leitura, escrita e execução. O proprietário continua com leitura e escrita. Compare os caracteres de permissão; dono, grupo, tamanho e data mostrados por ls dependem do arquivo e do ambiente.
Uma expressão como chmod g+w report.txt acrescenta escrita ao grupo sem pedir mudança nos bits das demais categorias. Nos exemplos, as categorias são explícitas. Se omitir u, g, o ou a numa expressão simbólica, os bits bloqueados pela umask não são afetados como seriam numa seleção explícita de a.
Conferir o modo 640 com stat
Na mesma pasta de prática, crie demo.txt e consulte seu modo. Os && fazem a mudança e a consulta dependerem da criação bem-sucedida do arquivo:
printf 'demo\n' > demo.txt &&
chmod 640 demo.txt &&
stat -c '%a %n' demo.txt
Saída esperada em Linux com suporte às permissões POSIX; ela não foi obtida na verificação Windows descrita acima:
640 demo.txt
O formato %a de GNU stat apresenta o modo em octal, e %n apresenta o nome. Aqui, 640 significa proprietário com leitura e escrita, grupo com leitura e nenhum desses bits para outros. Não confunda um retorno 0 de chmod com a confirmação de que outro sistema de arquivos passou a aplicar exatamente esse modelo de permissões.
Se já executou esse bloco, set -C deve recusar a nova criação de demo.txt com >. Nesse caso, o encadeamento para antes de chmod. Não remova a proteção para repetir a prática sobre um arquivo que você não pretendia alterar; crie uma nova pasta de prática ou confira o arquivo existente.
Formatos e opções principais
| Formato ou opção | Significado |
|---|---|
u / g / o / a |
Proprietário, grupo do arquivo, outros ou todas essas categorias. |
+ / - / = |
Acrescenta, remove ou define os bits selecionados. |
r / w / x |
Leitura, escrita e execução; para diretórios, x corresponde a busca ou travessia. |
-R |
Altera recursivamente arquivos e diretórios no conjunto percorrido. |
--reference=arquivo |
Usa o modo do arquivo de referência, não seu conteúdo nem seu proprietário. |
Os exemplos numéricos tratam dos três conjuntos rwx. Há também bits especiais, como setuid, setgid e sticky. No GNU chmod, bits setuid e setgid de diretórios podem ser preservados se você não os tratar explicitamente; não use a simplificação “um número sempre apaga todos os outros bits” para administrá-los.
Limitar mudanças e conferir o acesso
Antes de usar -R, confira o caminho, os arquivos, os diretórios e os links envolvidos, por exemplo com ls -ld -- caminho e com uma consulta de find adequada ao conjunto. As regras para links simbólicos e travessia dependem das opções e da versão. Não aplique 777 recursivamente como tentativa genérica de corrigir um erro: isso concede leitura, escrita e execução a todas as categorias sem explicar a causa.
As permissões adequadas de arquivo e diretório podem ser diferentes. Além dos bits rwx, listas de controle de acesso, chamadas ACL, e políticas de segurança como SELinux podem influenciar o acesso. Este exercício não verifica ACL, políticas de segurança nem acesso por contas distintas.
Para repor os modos iniciais dos dois arquivos desta prática, use chmod 640 script.sh report.txt e confira novamente com stat. Isso só restaura o estado inicial conhecido desses arquivos de teste. Em arquivos existentes, registre o modo anterior antes da mudança; não adivinhe um número de “restauração”, e não use chmod como substituto para corrigir proprietário, grupo ou uma política diferente.
Pergunta frequente
O que significa chmod 755?
Os bits rwx ficam ativos para o proprietário, enquanto grupo e outros recebem r e x. Num arquivo, x é execução; num diretório, é busca ou travessia. Por isso, 755 não deve ser aplicado automaticamente a todos os arquivos e diretórios de um conjunto.
Documentação
Consulte a documentação oficial do GNU chmod e a explicação da estrutura dos bits de modo no GNU Coreutils. A página de chmod publicada pelo Debian detalha também a umask, os bits especiais e as regras de links e recursão.




