Domine o `chmod` no Linux: Controle Total de Permissões de Arquivos

Gerencie quem tem acesso a arquivos, pesquisa em diretórios e execução de scripts com o comando `chmod` no Linux. Este comando ajusta as permissões de arquivos no Linux, que podem parecer complexas inicialmente, mas tornam-se bastante claras ao entender seu funcionamento.

`chmod`: Alterando as permissões de arquivos

No Linux, o controle sobre quem pode realizar quais ações em um arquivo ou diretório é definido por meio de conjuntos de permissões. Há três desses conjuntos: um para o proprietário do arquivo, outro para os membros do grupo ao qual o arquivo pertence e um terceiro para todos os demais usuários.

As permissões regulam as operações que podem ser efetuadas em arquivos ou diretórios. Elas podem autorizar ou impedir que um arquivo seja lido, alterado ou, no caso de scripts ou programas, executado. Em diretórios, as permissões definem quem pode navegar (usar `cd`) para dentro do diretório e quem pode criar ou modificar arquivos ali.

O comando `chmod` é utilizado para estabelecer cada uma dessas permissões. Para visualizar as permissões configuradas em um arquivo ou diretório, o comando `ls` é empregado.

Visualizando e Interpretando Permissões de Arquivos

Ao utilizar a opção `-l` (formato longo) com o comando `ls`, as permissões de arquivos e diretórios são exibidas.

ls -l

Em cada linha da saída, o primeiro caractere indica o tipo do item listado. Um hífen (`-`) sinaliza que é um arquivo, enquanto a letra `d` indica um diretório.

Os nove caracteres seguintes mostram as configurações para os três conjuntos de permissões.

Os três primeiros caracteres especificam as permissões do proprietário do arquivo (permissões do usuário). Os três caracteres seguintes indicam as permissões dos membros do grupo do arquivo (permissões de grupo). E os três últimos caracteres mostram as permissões para todos os outros usuários (outras permissões).

Dentro de cada conjunto de permissões, existem três caracteres que indicam a presença ou ausência de uma permissão. Eles podem ser um hífen (`-`) ou uma letra. O hífen indica que a permissão não foi concedida, enquanto `r`, `w` ou `x` indicam que a permissão foi concedida.

Essas letras representam:

`r`: Permissão de leitura, que permite abrir e visualizar o conteúdo do arquivo.
`w`: Permissão de escrita, que permite editar, modificar e excluir o arquivo.
`x`: Permissão de execução, que permite executar o arquivo caso ele seja um script ou programa.

Por exemplo:

`—` significa que nenhuma permissão foi concedida.
`rwx` significa que todas as permissões foram concedidas. As permissões de leitura, escrita e execução estão presentes.

Na captura de tela apresentada, a primeira linha começa com a letra `d`, indicando um diretório chamado “arquivo”. O proprietário deste diretório é o usuário “dave”, e o grupo ao qual ele pertence também se chama “dave”.

Os três caracteres seguintes (`rwx`) são as permissões do usuário para este diretório. Isso mostra que o proprietário tem permissões totais: leitura, escrita e execução.

O segundo conjunto de três caracteres (`rx`) indica as permissões do grupo. Membros do grupo “dave” têm permissão de leitura e execução, permitindo listar os arquivos e seus conteúdos no diretório e navegar para ele. Eles não têm permissão de escrita, portanto, não podem criar, editar ou apagar arquivos.

O último conjunto de três caracteres (`rx`) se refere às permissões para usuários que não se encaixam nas categorias anteriores (os “outros”). Eles também têm permissões de leitura e execução neste diretório.

Em resumo, membros do grupo e outros usuários podem ler e executar arquivos no diretório, enquanto o proprietário “dave” também pode escrever nele.

Para outros arquivos (exceto o script `mh.sh`), “dave” e os membros do grupo “dave” têm permissão de leitura e escrita, enquanto os demais usuários têm apenas permissão de leitura.

No caso específico do script `mh.sh`, “dave” e os membros do grupo têm permissão de leitura, escrita e execução, enquanto os outros têm permissões de leitura e execução.

Entendendo a Sintaxe de Permissão

Para usar `chmod` na definição de permissões, é necessário especificar:

Quem: Para quem as permissões estão sendo definidas.
O quê: Qual mudança está sendo feita: adicionando ou removendo permissões?
Quais: Quais permissões estão sendo estabelecidas?

Utilizamos indicadores para representar esses valores e criar “declarações de permissão” concisas, como `u+x`. Aqui, `u` significa “usuário” (quem), `+` indica adição (o quê) e `x` se refere à permissão de execução (quais).

Os valores que representam “quem” são:

`u`: Usuário, ou seja, o proprietário do arquivo.
`g`: Grupo, ou seja, os membros do grupo ao qual o arquivo pertence.
`o`: Outros, ou seja, usuários que não se enquadram em `u` ou `g`.
`a`: Todos, abrangendo todos os itens anteriores.

Se nenhum desses valores for especificado, `chmod` se comporta como se `a` tivesse sido usado.

Os valores que representam “o quê” são:

`-`: Sinal de menos, indicando a remoção da permissão.
`+`: Sinal de mais, indicando a concessão da permissão, adicionando-a às permissões existentes. Para definir apenas uma permissão específica, o operador `=` deve ser usado.
`=`: Sinal de igual, indicando a definição de uma permissão e a remoção de outras.

Os valores que representam “quais” permissões são:

`r`: Permissão de leitura.
`w`: Permissão de escrita.
`x`: Permissão de execução.

Definindo e Modificando Permissões

Suponha que haja um arquivo no qual todos os usuários tenham permissões totais.

ls -l new_ file.txt

O objetivo é que o usuário “dave” tenha permissões de leitura e escrita, enquanto os membros do grupo e outros usuários tenham apenas permissão de leitura. Isso pode ser feito com o seguinte comando:

chmod u=rw,og=r new_file.txt

O uso do operador `=` elimina todas as permissões existentes e define as permissões especificadas.

Verificando a nova permissão deste arquivo:

ls -l new_file.txt

As permissões anteriores foram removidas e as novas permissões foram estabelecidas conforme o esperado.

E se fosse necessário adicionar uma permissão sem remover as configurações existentes? Isso também é simples.

Imagine um arquivo de script que acabou de ser editado e precisa ser tornado executável para todos os usuários. As permissões atuais do arquivo são as seguintes:

ls -l new_script.sh

A permissão de execução pode ser adicionada para todos com o seguinte comando:

chmod a+x new_script.sh

Analisando as permissões, percebe-se que a permissão de execução foi concedida a todos, mantendo as permissões preexistentes.

ls -l new_script.sh

Poderia-se obter o mesmo resultado sem o `a` na declaração `a+x`. O seguinte comando também funcionaria:

chmod +x new_script.sh

Definindo Permissões para Vários Arquivos

As permissões podem ser aplicadas a vários arquivos simultaneamente.

Os arquivos no diretório atual são:

ls -l

Para remover a permissão de escrita para usuários “outros” em arquivos com extensão `.page`, o seguinte comando pode ser usado:

chmod o-r *.page

Verificando o efeito:

ls -l

A permissão de leitura foi removida dos arquivos `.page` para a categoria de usuários “outros”. Nenhum outro arquivo foi afetado.

Para incluir arquivos em subdiretórios, a opção `-R` (recursiva) pode ser usada:

chmod -R o-r *.page

Notação Numérica

Outra forma de usar `chmod` é especificar as permissões desejadas para o proprietário, grupo e outros como um número de três dígitos. O dígito mais à esquerda representa as permissões do proprietário, o dígito central as permissões do grupo e o dígito mais à direita as permissões dos outros usuários.

Os dígitos e seus significados são:

`0`: (000) Sem permissão.
`1`: (001) Permissão de execução.
`2`: (010) Permissão de escrita.
`3`: (011) Permissões de escrita e execução.
`4`: (100) Permissão de leitura.
`5`: (101) Permissões de leitura e execução.
`6`: (110) Permissões de leitura e escrita.
`7`: (111) Permissões de leitura, escrita e execução.

Cada permissão é representada por um bit no equivalente binário do número decimal. Por exemplo, 5 (101 em binário) significa permissões de leitura e execução. 2 (010 em binário) representaria apenas a permissão de escrita.

Este método define as permissões desejadas, não as adiciona às permissões existentes. Assim, se já existissem permissões de leitura e escrita, o número 7 (111) teria que ser usado para adicionar também a permissão de execução. Utilizar o número 1 (001) removeria as permissões de leitura e escrita, adicionando apenas a de execução.

Para adicionar a permissão de leitura aos arquivos `.page` de volta para os outros usuários, as permissões de usuário e grupo também devem ser redefinidas como estavam. Supondo que já possuam permissões de leitura e escrita, que correspondem ao número 6 (110), e os outros usuários devem ter permissão de leitura, que é o número 4 (100), o seguinte comando pode ser usado:

chmod 664 *.page

Isso define as permissões necessárias para o usuário, os membros do grupo e os outros. As permissões do usuário e membros do grupo são redefinidas para o que eram antes, e os outros recuperam a permissão de leitura.

ls -l

Opções Avançadas

Consultando a página de manual do comando `chmod`, você notará opções avançadas como os bits SETUID e SETGID, e o bit “sticky” ou de exclusão restrita.

No entanto, para a grande maioria dos casos em que o comando `chmod` for necessário, as opções apresentadas aqui serão suficientes.