Sunday, July 15, 2007

Permissões de directorias e ficheiros em Linux

Hugo Cisneiros, hugo@devin.com.br
Última atualização em 06/02/2003

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 ou escrito. Estas permissões que vão definir o que um usuário pode fazer. Para saber se um programa é executável ou não, execute um 'ls -l' e veja no lado esquerdo se o arquivo tem X nos seus argumentos, como no exemplo abaixo:

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.doc

No exemplo acima todos os arquivos tem como dono root e como grupo também 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 (numero 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.doc
||\-----> 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 as 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 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!

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 à 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 os FLAGS serão ativados ou desativados! Outros exemplos:

$ chmod a+r arquivo2.txt

(Todos usuários (a=all) podem ler o 'arquivo2.txt')>

$ chmod o+w arquivo3.txt

(Outros usuários (o=others) sem ser o dono e o grupo dono do arquivo, podem gravar no 'arquivo3.txt')

$ chmod g+x netscape

(O grupo-dono do arquivo (g=group) pode executar o arquivo 'netscape')

O comando chmod pode também ser usado com números, em vez dos 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

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 (numero 6 na segunda coluna), e informou que pode ser lido por todos os outros usuários do sistema (numero 4 na ultima coluna).

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
Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br

Tirado de: http://www.devin.com.br/eitch/permissoes/

No comments: