Introdução
Atualmente é muito comum trabalharmos o dia todo com computadores e, consequentemente, aprender a lidar com os diferentes Sistemas Operacionais disponíveis, com todas as suas vantagens ou desvantagens. Em sistemas linux (ou outros sistemas baseados em Unix) a questão de permissionamento é especialmente importante e complexa.
No Linux você pode definir quem controla cada arquivo ou diretório através de um conjunto de permissões. Com elas podemos permitir ou impedir que um arquivo (ou diretório) seja lido, modificado ou se for um script, ser executado. Vamos entender como isso funciona?
Entendendo o permissionamento
Em nosso sistema há o comando ls -l
, que lista os arquivos de um diretório e permite verificar a permissão dos arquivos. Ele vai mostrar algo parecido com o resultado abaixo.
$ ls -l total 100
-rw-r--r-- 1 henrique henrique 2053 Mar 19 18:32 um_arquivo
-rw-r--r-- 1 henrique henrique 5537 Mar 19 18:32 outro_arquivo
-rw-r--r-- 1 henrique henrique 374 Mar 16 15:06 README.md
drwxr-xr-x 10 henrique henrique 4096 Dec 25 15:06 advent-of-code
Cada linha identifica o tipo daquela entrada (-
se for um arquivo e d
se for um diretório) e representa a permissão.
Vamos começar pelo primeiro caractere. Apesar de no exemplo apresentarmos somente o -
e o d
, temos outros tipos como:
Caractere | Significado |
---|---|
- | arquivo comum |
b | dispositivo de bloco |
c | dispositivo de caracteres |
d | diretório |
l | link simbólico |
p | arquivos pipe (FIFO) |
s | arquivo de socket |
Os próximos nove caracteres representam a parte que queremos descrever em detalhes nesse texto, o permissionamento da entrada, ou seja, o diretório ou arquivo descrito na linha.
Os primeiros três caracteres mostram a permissão de quem é dono do arquivo: permissão do usuário (*user).
Os próximos três mostram a permissão para membros do grupo ao qual aquele arquivo pertence: permissão do grupo (group).
Os últimos três mostram a permissão para qualquer um que não é membro das duas permissões anteriores: outras permissões.
Grupos são uma forma de organizar usuários e definir as permissões de acesso para esse conjunto de pessoas.
As letras representam cada permissão indicada por uma presença (ou ausência). Elas podem ser um r
, w
, x
ou -
e apresentam respectivamente:
Caractere | Significado |
---|---|
r | permissão de leitura (read) |
w | permissão de alteração ou escrita (write) |
x | permissão de execução (execution) |
- | ausência de permissão (desabilitada) |
Pegando uma linha como exemplo, podemos interpretá-la como:
-rw-r--r-- 1 henrique henrique 2053 Mar 19 18:32 um_arquivo
- É um arquivo (-)
- O dono do arquivo pode ler e alterá-lo (
rw
) mas não executá-lo (rw-
) - O grupo pode somente lê-lo (
r--
) - Os demais usuários também só podem lê-lo (
r--
)
Um arquivo com permissão total (para servir de exemplo) seria algo como:
-rwxrwxrwx 1 henrique henrique 2053 Mar 19 18:32 um_arquivo
Vendo assim, fica mais legível a ausência de permissões, indicada pelo caractere -
, que no caso é não existente, e as três permissões possíveis estão disponíveis para todos os acessos rwx
.
Outra permissão comum de encontrarmos é ---
, que representaria o caso em que nenhuma permissão foi dada, como:
-rwx------ 1 henrique henrique 2053 Mar 19 18:32 um_arquivo
Nesse caso, somente o dono do arquivo tem permissão para ler, alterá-lo ou executá-lo. Nenhum outro usuário teria esse acesso.
Responsável pelo arquivo (File Ownership)
A próxima opção interessante é saber quem é o responsável pelo arquivo e a qual grupo ele pertence. Como vocês podem ver nos exemplos acima, até agora o responsável e grupo sempre eram a mesma pessoa no caso henrique
.
Mas podemos ter um responsável pelo arquivo e grupo diferentes como:
-rw-rw---- 1 henrique usuarios 2053 Mar 19 18:32 um_arquivo
No caso acima, usuários do grupo usuarios
podem manipular esse arquivo, mas o responsável continua sendo o usuário henrique
.
Lembrando que tudo isso vale para usuários “normais”, administradores tem acesso a mudar o grupo da maioria dos arquivos.
Outras informações
Voltando ao nosso exemplo, vamos repassar as informações que faltaram somente por mera curiosidade, já que estamos por aqui.
-rw-rw---- 1 henrique usuarios 2053 Mar 19 18:32 um_arquivo
O número 1
é a quantidade de links, 2053
é o tamanho do arquivo em bytes e Mar 19 18:32
é a data da última modificação.
Conclusão
Agora que entendemos todas as opções para permissionamento de arquivos e diretórios no Linux, podemos começar a tratar sobre como comandos como chmod
e chown
funcionam (em breve em outros artigos por aqui).
Até lá!