Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006

The Linux Manual

3.6. Permissões de arquivos

Índice

3.6.1. Visualizando e entendendo as permissões
3.6.2. Mudando as permissões com o chmod
3.6.3. Mudando o dono dos arquivos com o chown

Um clássico tutorial sobre permissões de arquivos! No Linux, como em outros sitemas Unix, cada arquivo tem uma permissão. As permissões são atributos dos arquivos que especificarão se ele pode ser lido, executado e/ou escrito. Estas permissões vão definir o que um usuário pode fazer ou não.

3.6.1. Visualizando e entendendo as permissões

Para saber se um programa é executável ou não, execute um ls -l e veja no lado esquerdo se o arquivo tem um x nos seus argumentos, como no exemplo abaixo:

# ls -l

drwxr-xr-x   2 root     root         1024 Dec 23 15:22 bin
drwxr-xr-x   2 root     root         1024 Dec 31 05:48 boot
drwxr-xr-x   2 root     root         1024 Dec  6 15:51 cdrom
drwxr-xr-x   3 root     root         8192 Mar 11 10:17 dev
drwxrwxr-x   2 root     root         1024 Feb 27 13:52 dosa
dr-xr-xr-x  11 root     root         2048 Mar 11 10:19 etc
drwxr-xr-x  11 root     root         2048 Feb 23 19:08 home
drwxr-xr-x   3 root     root         1024 Feb 23 19:13 lib
drwxr-xr-x   2 root     root        12288 Nov  2 11:25 lost+found
-rwxr--r--   1 root     root           57 Mar 10 03:44 make-backup
-rw-rw-r--   1 killer   users        2342 Mar 10 03:12 teste.txt
-rw-rw-rw-   1 hugo     visits      23412 Mar 09 22:22 teste2.txt

No exemplo acima todos os arquivos tem como dono o root e como grupo-dono também o root, com exceção do teste.txt que o dono é killer e o grupo é users e também teste2.doc, no qual hugo é o dono e o grupo visits também é dono. Como você pode ver do lado esquerdo de cada arquivo/diretório existe um série de letras r, w, x ou d! Vamos ver o que representa cada uma delas:


drwxrwxrwx
0111222333

No caso acima, a primeira coluna significa (número 0) se o nome listado é um diretório ou não, caso não seja um diretório ele será exibido da seguinte maneira:


-rwxr--r--   1 root     root           57 Mar 10 03:44 make-backup
\--------> Não contém a letra 'd', não é diretório e sim arquivo

O exemplo abaixo mostra o que seria um diretório:


drwxr--r--   1 root     root            1 Mar 10 01:12 bin
\----------> Contém a letra 'd' na primeira coluna, é um diretório

Também há casos em que no lugar do d, aparecem outras letras que indicam outros tipos de arquivos. A letra l significa que é um link simbólico, as letras c e b correspondem à dispositivos (/dev). Veja alguns exemplos abaixo:


crw-rw----   1 hugo     audio     14,   4 Dec  2  1999 audio
brw-rw----   2 hugo     cdrom     22,  64 May  5  1998 hdd
lrwxrwxrwx   1 root     root            8 Oct 17 22:53 cdrom -> /dev/hdd

Continuando, na segunda coluna (números 1 de acordo com o exemplo mais acima) temos as definições para o dono do arquivo, como mostra o exemplo:


-rwxr--r--   1 killer   users        1231 Mar 09 12:12 teste.txt
 ||\--------> O dono do arquivo (killer) pode executar o arquivo, x=executable!
 |\---------> O dono do arquivo (killer) pode gravar no arquivo, w=writable!
 \----------> O dono do arquivo (killer) pode ler o arquivo, r=readable!

Seguindo, na terceira coluna (números 2 de acordo com o exemplo lá em cima) temos as definições para o grupo que é dono do arquivo, como mostra o exemplo:


-r--rwxr--   1 fernando visits        212 Mar 01 12:42 exemplo.sxi
    ||\-----> O grupo dono do arquivo (visits) pode executar o arquivo!
    |\------> O grupo dono do arquivo (visits) pode gravar no arquivo!
    \-------> O grupo dono do arquivo (visits) pode ler o arquivo!

Finalmente, temos a quarta coluna (composto pelos números 3), essa coluna se refere às permissões para todos os outros usuários do sistema, sem ser os donos e grupos-donos dos mesmos, exemplo:


-r--r--rwx   1 fernando visits       1231 Mar 03 12:42 exemplo2.doc
       ||\--> Todos os usuários (exceto fernando e usuários do grupo visits)
       ||                        tem permissão para acessar o arquivo!
       |\---> Todos os usuários (exceto fernando e usuários do grupo visits)
       |                         tem permissão para gravar no arquivo!
       \----> Todos os usuários (exceto fernando e usuários do grupo visits)
                                 tem permissão para ler o arquivo!

Quando nos referimos a diretório ao invés de arquivos, o flag x (executável) diz se o diretório é ou não acessível, já que não podemos executar diretórios... Exemplo:


drwxr--r-- 1 root       root         2134 Mar 01 12:54 exemplo3
|||||  \----> Todos os usuários podem ler o interior do diretório, mas não
|||||         podem usar o comando 'cd' para entrar nele, pois não existe
|||||         o FLAG 'x' para a quarta coluna!
||||\-------> Usuários do grupo 'root' podem ler o interior do diretório,
||||          mas também não podem usar 'cd' para entrar no diretório!
|||\--------> O usuário 'root' pode usar 'cd' para entrar no diretório!
||\---------> O usuário 'root' pode gravar arquivos nesse diretório!
|\----------> O usuário 'root' pode ler o interior desse diretório!
\-----------> Indica que o nome listado é um diretório!

3.6.2. Mudando as permissões com o chmod

O comando chmod pode ser usado para mudar os flags rwx dos arquivos e/ou diretórios, a sintaxe básica do comando é:

chmod [ugoa]{-+}[rwx] <nome_do_arquivo_ou_diretório>

Então vamos a um exemplo. Se eu quero mudar a permissão para o dono do arquivo (u=user) poder ler e gravar (rw) no arquivo1.txt, faço o seguinte:

$ chmod u+rw arquivo1.txt

Caso você queira desfazer o comando, você faria: chmod u-rw arquivo1.txt. Como se vê, o + ou - define se as flags serão ativadas ou desativadas! Outros exemplos:

$ chmod a+r arquivo2.txt

Acima, todos os usuários (a=all) podem ler o arquivo2.txt. Outro exemplo:

$ chmod o+w arquivo3.txt

Neste caso outros usuários (o=others) sem ser o dono e o grupo dono do arquivo, podem gravar no arquivo3.txt. Outro exemplo:

$ chmod g+x netscape

Acima, o grupo-dono do arquivo (g=group) pode executar o arquivo netscape.

O comando chmod também pode ser usado com números, em vez das flags. Este método é chamado de octal, veja o exemplo abaixo:

$ chmod 664 arquivo.txt

O que quer dizer cada um desses números? Veja abaixo:

Número Significado
0 Nenhuma permissão
1 Permissão para executar
2 Permissão para gravar
3 Permissão para gravar e executar
4 Permissão para ler
5 Permissão para ler e executar
6 Permissão para ler e gravar
7 Permissão para ler, gravar e executar

Tabela 3.12. Permissões em Octal

No exemplo o comando informou que o arquivo.txt pode ser lido e gravado pelo seu dono (numero 6 na primeira coluna), informou que pode também ser lido e gravado pelos usuários que compõem o grupo-dono (número 6 na segunda coluna) e informou que pode ser lido por todos os outros usuários do sistema (número 4 na última coluna).

3.6.3. Mudando o dono dos arquivos com o chown

O comando chown é simples e pode ser usado para mudar o dono e o grupo dono de um arquivo/diretório. E é usado da seguinte maneira:

chown <usuario.grupo> <arquivo_ou_diretorio>

Como exemplo, vamos definir que um arquivo teste4.txt terá como dono killer e como grupo users:

$ chown killer.users teste4.txt

Outros exemplos:

$ chown mrdvs.visits teste5.txt
$ chown hugo.users teste6.txt