Permissões de arquivos no Linux |
Hugo Cisneiros, hugo.cisneiros@aracaju.se.gov.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 |