Definição e exemplos de uso do comando chmod

A pedidos de amigos na internet que estão se preparando para concursos em todo o Brasil, preparei este pequeno mas esclarecedor conteúdo a respeito deste comando que tem dado o que falar nas provas da área de tecnologia.

As permissões são um dos aspectos mais importantes  do Linux. Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários. Manipular permissões é uma atividade interessante, mas complexa ao mesmo tempo. Mas tal complexidade não deve ser interpretada como dificuldade e sim como possibilidade de lidar com uma grande variedade de configurações, o que permite criar vários tipos de proteção a arquivos e diretórios.

Como sabemos, somente o  root tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração, administração e manutenção do Linux. Cabe a ele, por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc. Naturalmente, a forma usada para especificar o que cada usuário do sistema pode fazer é a determinação de permissões. Sendo assim, neste artigo você verá como configurar permissões de arquivos e diretórios, assim como modificá-las.

Com o comando chmod (de change mode) você pode configurar permissões de duas maneiras: simbolicamente e numericamente. Primeiramente veremos o método simbólico.

Para ter uma visão mais clara da forma simbólica com o chmod, imagine que tais símbolos se encontram em duas listas, e a combinação deles gera a permissão:

Lista 1
Símbolo
u => usuário
g => grupo
O (letra ‘o’ maiúscula) => outro
a => todos

Lista 2
Símbolo
r => leitura
w => gravação
x => execução

Para poder combinar os símbolos destas duas listas, usam-se os operadores:

+ (sinal de adição) => adicionar permissão
– (sinal de subtração) => remover permissão
= (sinal de igualdade) => definir permissão

Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo “arquivo” para um usuário. O comando a ser digitado é: (neste caso estamos levando em consideração que estamos na localização /home/usuario e que este usuário é o dono do diretório)

$ chmod u+w arquivo (lembrando que no Linux pouco importa a questão das extensões, salvo alguns casos)

O “u” indica que a permissão será dada a um usuário, o sinal de adição (+) indica que está sendo adicionada uma permissão e “w” indica que a permissão que está sendo dada é de gravação.

Caso você queira dar permissões de leitura e gravação ao seu grupo, o comando será:

$ chmod g+rw arquivo

Agora, vamos supor que o arquivo arquivo deverá estar com todas as permissões disponíveis para o grupo. Podemos usar então:

$ chmod g=rwx arquivo

Dica: crie arquivos e diretórios. Em seguida, teste a combinação de permissões com chmod. Isso lhe ajudará muito no entendimento.

Usando chmod com o método numérico

Usar o chmod com valores numéricos é uma tarefa bastante prática. Em vez de usar letras como símbolos para cada permissão, usam-se números. Se determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se o valor 0. Sendo assim, a string de permissões r-xr—– na forma numérica fica sendo 101100000. Essa combinação de 1 e 0 é um número binário. Mas temos ainda que acrescentar a forma decimal (ou seja, números de 0 a 9)

Como sabemos, os programadores clássicos (aqueles que programam em linguagem de baixo nível) são muito bons e matemática e como não poderia deixar de ser, usaram um método numérico para dar mais esta opção ao chmod de agregar e alterar permissões em arquivos e diretórios:

Permissão Binário Decimal
000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Viu aí? código binário em ação! daí podemos tirar as conclusões:

1º É muito mais fácil dar e alterar permissões em método numérico;

2º A visualização (entendimento) das permissões separadas ou reunidas também se torna mais simples;

Vamos deixar de blá blá blá e dar um exemplo prático? pois bem:

Antes de mais nada iremos destrinchar a tabela acima para compreendermos facilmente o exemplo:

Sempre da esquerda para a direita temos as permissões:

Ex: 421

4 = para o dono

2 = pra o grupo

1 = para todos os outros

(read) r = 4

(write) w = 2

(execution) x = 1

Certo?

E na combinação podemos ter:

(read + execution) rx = 5 –> 4+1

(read + write) rw = 6 –> 4 + 2

(read + write + execution) rwx –> 4 + 2 + 1

E finalmente 0 (zero) significa que não há permissão alguma

sendo assim:

$ chmod 600 arquivo

Qual é a permissão?

6 = o dono pode ler e escrever (4 + 2)

0 = o grupo não tem permissão

0 = o restante também não possui permissão

A complexidade explica o porquê da eficiência e da segurança que é assegurada aos sistemas baseados em Unix, por isso temos realmente de treinar bastante para compreender e dominar este assunto que em muitos casos já chegou a discussões ferrenhas em canais de IRC e nos fóruns espalhados pela rede. Espero ter sido claro e caso hajam dúvidas postem no fórum. Não esqueçam de comentar.