Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006
Índice
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.
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!
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).
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