Em sistemas operacionais do tipo Unix, o chmod (abreviação de change mode, em português: alterar modo) é o comando e a chamada de sistema que pode alterar permissões de acesso de objetos do sistema (arquivos e diretórios) e sinalizações (flags) de modo especial. A requisição é filtrada pelo umask.[1]
História
Um comando chmod apareceu pela primeira vez na versão 1 do Unix da AT&T.
À medida que os sistemas cresciam em número e tipos de usuários, listas de controle de acesso eram adicionadas a muitos sistemas de arquivos, além desses modos mais básicos para aumentar a flexibilidade.
Sintaxe do comando
$ chmod [opções] modo[,modo] arquivo1 [arquivo2 ...]
Opções implementadas frequentemente incluem:
- -R recursive, isto é, inclui objetos e subdiretórios
- -f force, segue em frente com todos os objetos, mesmo que ocorram erros
- -v verbose, exibe todos os objetos processados
Se uma ligação simbólica for especificada, o objeto alvo é afetado. Os modos de arquivo diretamente associados às ligações simbólicas em si normalmente nunca são usados.
Para visualizar o modo do arquivo, os comandos ls ou stat podem ser usados:
$ ls -l encontrarNumerosDeTelefone.sh
-rwxr-xr-- 1 tneves equipe 823 Dec 16 15:03 encontrarNumerosDeTelefone.sh
$ stat -c %a encontrarNumerosDeTelefone.sh
754
O r, w e x especificam o acesso de leitura, gravação e execução, respectivamente. O primeiro caractere da exibição do ls indica o tipo de objeto. Um hífen representa um arquivo simples. Esse script pode ser lido, gravado e executado pelo proprietário, lido e executado por outros membros do grupo da equipe e também pode ser lido por outras pessoas.
Modo octal
Predefinição:VT Um octal é um número escrito sob a base 8, ou seja, usa 8 símbolos diferentes para ser representado, geralmente, os algarismos arábicos de 0 a 7. O chmod usa um número octal de 3 algarismos como parâmetro para realizar sua função.
Por meio do exemplo a seguir, pode-se identificar as partes principais das permissões chmod.
Exemplo: drwxrwx---
À direita do "d":
- Os três caracteres da esquerda rwx definem permissões do PROPRIETÁRIO.
- Os três caracteres do meio rwx definem permissões do GRUPO.
- Os três caracteres da direita --- definem permissões de TODOS OS OUTROS. Neste exemplo, TODOS OS OUTROS não possuem permissões.
Permissões numéricas
O formato numérico do chmod aceita até quatro dígitos octais. Os três dígitos mais à esquerda referem-se às permissões para o proprietário, grupo e outros usuários do arquivo, respectivamente. O primeiro dígito opcional, quando são fornecidos 4 dígitos, especifica os sinalizadores (flags) especiais setuid, setgid e sticky.
Cada dígito dos três dígitos mais à direita representa um valor binário, cujos bits controlam a leitura, gravação e execução, respectivamente, onde 1 significa permitir e 0 significa não. Isso é semelhante à notação octal, mas representada em números decimais.
# | Permissão | rwx | Binário |
---|---|---|---|
7 | leitura, escrita e execução | rwx | 111 |
6 | leitura e escrita | rw- | 110 |
5 | leitura e execução | r-x | 101 |
4 | apenas leitura | r-- | 100 |
3 | escrita e execução | -wx | 011 |
2 | apenas escrita | -w- | 010 |
1 | apenas execução | --x | 001 |
0 | nenhum | --- | 000 |
Cada grupo de 3 algarismos binários representa um dos níveis entre usuário (u), grupo (g) e outros (o), e cada um dos 3 algarismos ou bits de cada grupo representa um tipo de permissão entre leitura (r), do Inglês 'read', gravação (w), do Inglês 'write' e execução (x), do Inglês 'execute', onde um '1' indica permissão cedida e um '0', permissão negada.
Por exemplo, 754 permitiria:
- ler, escrever e executar para o PROPRIETÁRIO, uma vez que o valor binário de 7 é 111, significando que todos os bits estão ativados;
- ler e executar para o GRUPO, uma vez que o valor binário de 5 é 101, significando que leitura e execução estão ativados, porém escrita está desativado;
- apenas ler para TODOS OS OUTROS, uma vez que o valor binário de 4 é 100, significando que apenas o bit de leitura está ativado.
Exemplos de permissões numéricas
$ chmod 750 arquivo.txt
No exemplo o número 750 está escrito na forma octal. Sua forma binária seria 111101000. O 7 é a forma octal do binário '111' e representa todas as permissões (leitura, escrita e execução) para o proprietário (user) do arquivo 'arquivo.txt'. O 5 é a forma octal do binário 101 e representa as permissões de leitura e execução para o grupo, e por fim, 0 representa a negação de todas as permissões para outros.
Nível u g o Permissão rwx r-x --- Binário 111 101 000 Octal 7 5 0
Para arquivos (-)
rwx
000 0 (zero) permissão negada
001 1 permissão de execução
010 2 permissão de gravação
011 3 permissão de gravação e execução
100 4 permissão de leitura
101 5 permissão de leitura e execução
110 6 permissão de leitura e gravação
111 7 soma de todas as permissões
Para diretórios (d)
rwx
000 0 (zero) permissão negada
001 1 permissão para entrar no diretório
010 2 permissão para gravar dentro do diretório
011 3 permissão de entrar e gravar no diretório
100 4 permissão para listar o conteúdo do diretório
101 5 permissão de listar e entrar no diretório
110 6 permissão de listar e gravar no diretório
111 7 soma de todas as permissões
Há uma maneira prática de converter números binários para octais. Basta somar os valores relativos dos algarismos. Exemplo: sabendo que os valores absolutos de cada algarismo em 111 são respectivamente 4, 2 e 1, somados dão o resultado 7. Já em 000, dão o resultado 0.
Modos simbólicos
É possível e mais humano prescindir do modo octal. Quando a modificação se fizer sobre o grupo, por exemplo, faremos assim para adicionar a permissão de escrita:
$ chmod g+w arquivo.txt
Dessa forma o grupo a que pertence este arquivo passa a ter permissão de gravação no mesmo. É possível mudar várias permissões para o mesmo ficheiro. Por exemplo:
$ chmod o+rw envel.ficheiro
Atribui a outros, de uma vez, as permissões de leitura e escrita sobre o ficheiro envel.ficheiro. De forma semelhante é possível mudar permissões de uma só vez para diversas classes de utilizador:
$ chmod ugo-rwx envel.ficheiro
Retira todas as permissões, a todas as classes de utilizador, relativamente ao ficheiro envel.ficheiro.
Modos especiais
Predefinição:VT O comando chmod também é capaz de alterar as permissões adicionais ou modos especiais de um arquivo ou diretório. Os modos simbólicos usam 's' para representar os modos setuid e setgid, e 't' para representar o modo sticky. Os modos são aplicados apenas às classes apropriadas, independentemente se outras classes são ou não especificadas.
A maioria dos sistemas operacionais suportam a especificação de modos especiais usando modos octais, mas alguns não. Nesses sistemas, apenas os modos simbólicos podem ser usados.
Opções
Algumas opções extras estão disponíveis para o chmod se adicionarmos os seguintes parâmetros
-c, --changes igual verbose, mas reporta apenas quando uma mudança é feita --no-preserve-root não trata '/' especialmente (padrão) --preserve-root falha ao operar recursivamente em '/' -f, --silent, --quiet suprimir a maior parte das mensagens de erro -v, --verbose mostrar um diagnóstico para cada arquivo processado --reference=ARQR usa modo do arquivo ARQR em vez dos valores de MODO -R, --recursive muda arquivos e diretórios recursivamente --help exibe esta ajuda e sai --version mostra informação de versão e sai
As permissões em vigor podem ser conhecidas com o comando ls. Ex:
$ ls -l
Outros comandos relacionados com o chmod são chown, que muda o dono de arquivos e pastas (ficheiros), e chgrp, que muda o grupo a que pertence o ficheiro.
Referências
- ↑ «Quick Reference: Unix Commands» (em English). University of Washington. Consultado em 15 de Setembro de 2018
Ligações externas
- «Linux: Chmod + dicas» (em português). - Viva o Linux
- «chmod invocation» (em English). - GNU Coreutils
- «chmod» (em English). - FreeBSD Man Pages
- «Tutorial for chmod» (em English)