
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.
Lembre que somente quem tem permissão no arquivo ou diretório poderá alterar as permissões, quando ocorrer erros, verifique seus direitos sobre o arquivo ou diretório com o comando “ls -l” ou faça com poderes de root.
Vamos aprender de modo simples a usar as permissões que muitas vezes é bastante complicado.
Tendo em mente que o conceito de binário significa 0 = desligado e 1 = ligado, vejamos como fica na tabela abaixo:
rwx | |
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Onde “rwx” são as permissões de um arquivo, ou seja:
- r=read (leitura)
- w=write (gravação, alteração, deleção)
- x=execute (execução)
Feito isso, sabemos que um arquivo ou diretório possui 3 modos de permissão. Uma permissão para o DONO do arquivo ou seja, quem o criou, uma outra permissão para o GRUPO do usuário dono do arquivo, e outra permissão para QUALQUER outro usuário ou grupo.
Sabendo disso, temos a tabela final abaixo:
dono | grupo | outros | |
rwx | rwx | rwx | |
0 | 000 | 000 | 000 |
1 | 001 | 001 | 001 |
2 | 010 | 010 | 010 |
3 | 011 | 011 | 011 |
4 | 100 | 100 | 100 |
5 | 101 | 101 | 101 |
6 | 110 | 110 | 110 |
7 | 111 | 111 | 111 |
Exemplo: Temos um diretório qualquer chamado mp3 que eu quero permissão total para o dono [eu], permissão de apenas leitura para o meu grupo e nenhuma permissão para o resto do mundo. O comando para executar essa ação é o CHMOD (em minúsculo mesmo).
$ chmod 740 /mp3
(acompanhem na tabela acima, que o 7=rwx, 4=r e 0=nada)
Os modos de permissão no Unix
Quando executamos o comando “ls -l /” nos são mostrados todos diretórios e arquivos na raiz do sistema, é fácil identificar nessas listagens o nome, tamanho, data e dono dos diretórios e arquivos, mas temos que observar estes 10 caracteres do inicio das linhas que aparecem assim:
# ls -l /
3 drwxr-xr-x 2 root root 3072 2008-01-29 10:13 bin
0 lrwxrwxrwx 1 root root 1024 2008-01-28 08:54 cdrom->media/cdrom
Observando, temos 3 classes de usuários que podem ter acesso aos arquivos:
- o dono (a pessoa que criou o arquivo),
- o grupo (usuários que são agrupados pelo administrador do sistema),
- e os outros (todos os usuários conectados a rede).
Os 10 primeiros caracteres das linhas listadas acimas pelo “ls -l” definem precisamente o que os usuários de cada classe podem fazer com seus arquivos. Esses caracteres são chamados de modos de permissão dos arquivos e se dividem em 4 grupos com 1, 3, 3 e 3 caracteres:
[1] | [r][w][x] | [r][w][x] | [r][w][x] |
| | | | | | | |
tipo | dono | grupo | outros |
O primeiro caracter define o tipo de arquivo que pode ser:
- “-” : significa um arquivo normal.
- “d” : significa um diretório.
- “l” : significa um ‘link’ simbólico.
Há outras possibilidades raramente utilizadas que são “b”, “c”, “p” ou “s”.
Os outros 9 caracteres devem ser separados em 3 grupos de 3 caracteres como o exemplo acima, sendo:
- o primeiro as permissões do dono do arquivo.
- o segundo as permissões do grupo de usuários.
- o terceiro as permissões de todos os outros usuários.
Em cada grupo, as permissões sempre aparecem na ordem:
- r = leitura.
- w = escrita-execução-deleção.
- x = execução.
OBS: A permissão de leitura é sempre indicada com um “r”. A permissão de escrita é sempre indicada com um “w”. A permissão de execução é sempre indicada com um “x”. Permissão negada é indicada com um “-“.
Exemplo:
# ls -l /
3 drwxr-xr-x 2 root root 3072 2008-01-29 10:13 bin
0 lrwxrwxrwx 1 root root 1024 2008-01-28 08:54 cdrom->media/cdrom
Observando o diretório “bin” temos as permissões drwxr-xr-x , que podemos interpretar como:
- tipo = d (diretório)
- dono = rwx (permissão total)
- grupo = r-x (permissão de leitura e execução, não pode gravar nem deletar)
- outros = r-x (permissão de leitura e execução, não pode gravar nem deletar)
OBS: Caso o tipo seja igual á “-” significa que é um arquivo comum.
Alterando as permissões de acesso a um arquivo
Usando o comando ‘chmod’ para alterar as permissões de um arquivo, observando que ele somente muda a permissão não muda o tipo de arquivo.
Este comando pode ser usado de duas maneiras:
1º (primeiro):
chmod <atribuição> arquivo ou diretório
Onde “atribuição” é uma seqüência de caracteres formada por:
- “u” = usuário, dono do arquivo ou documento.
- “g” = grupo
- “o” = outros
Devemos indicar as classes que terão as permissão alterada, usando os sinais: “+”, “-” ou “=” => indica se a permissão sera adicionada (+), retirada (-) ou definida (=), indicada por um dos caracteres “r” (leitura), “w” (escrita) ou “x” (execução) indicando as permissões.
Exemplo:
# chmod joão=+rw /mp3
Este comando determina que o dono, o grupo e todos os outros usuários tenham permissão de leitura e escrita no diretório /mp3. Outro exemplo é dar permissão á um grupo e outros para escrever na diretório. Fica assim:
# chmod go-r /mp3
Desta forma o grupo e outros terão permissão somente de leitura as músicas que estão dentro da pasta.
-rw-r–r– 1 root root 1200 2008-01–25 20:09 /mp3
2º (segundo):
Outra forma de usar o ‘chmod’ é usar números para definir as permissões. Exemplo:
chmod número arquivo
Onde “número” é formado por 3 algarismos,todos no intervalo de 0 a 7, de tal forma que a representação binaria com 9 dígitos deste número esteja relacionada aos modos de permissão como na tabela no inicio ou da seguinte forma:
- 0 = corresponda a permissão negada “-“.
- 1 = corresponda a permissão concedida, pode ser de leitura, escrita ou execução.
Exemplo:
# chmod 640 /mp3
Onde 640 é corresponde a:
- 6 = dono ( é a soma do leitura(r) + escrita(w) ).
- 4 = grupo( é somente leitura(r) ).
- 0 = outro( não permissão de acesso a pasta(-) ).
Essa conversão octal <—> permissões é feita facilmente se você observar a seguinte tabela:
número | binário equivalente | permissões |
0 | 000 | — |
1 | 001 | –x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r– |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
Exemplos diversos
Permissões | Comando | Descrição |
-r——– | chmod 400 arquivo | Somente o dono pode ler o arquivo, ninguém pode escrever. |
-r–r–r– | chmod 444 arquivo | Todos podem ler o arquivo, ninguém pode escrever. |
-rw-rw-rw- | chmod 666 arquivo | Todos podem ler e escrever no arquivo. |
drwxrwxrwx | chmod 777 diretório | Todos podem ler, escrever, criar ou apagar arquivos do diretório. |
drwx—— | chmod 700 diretório | Somente o dono pode ler, escrever, criar ou apagar arquivos. Ninguém mais pode ter acesso a este diretório. |
drwx-wx-wx | chmod 733 diretório | O dono tem acesso total ao diretório. Todos os outros usuários podem apenas escrever. |