Meio Bit » Arquivo » Software » O brilhantemente simples sistema de permissões do Linux

O brilhantemente simples sistema de permissões do Linux

Qual a lógica por trás do sistema de permissões de arquivos do Linux? Como funciona um CHMOD, o que são aqueles números? Em vez de decorar, vamos entender o significado. Você vai admirar a simplicidade e elegância da solução.

7 anos atrás

nmap-trinity

Assim como seu avô, o Unix, o Linux é de nascença um sistema multiusuário. Você pode ter vários níveis hierárquicos, vários usuários inclusive simultaneamente na mesma máquina. Não como naquele clássico vídeo Dois Idiotas, Um Teclado, claro. Mas como o Linux faz para decidir quem tem direito a cada arquivo?

Ele usa o mesmo modelo de permissões herdado do UNIX, onde cada arquivo pode ter três permissões:

r — leitura;

w — escrita;

x — execução.

Pode parecer ilógico ter um arquivo com permissão de leitura e escrita separadas, mas isso tem suas utilidades. Um conhecido meu dono de provedor deixava um servidor FTP aberto, com direitos de escrita E leitura de diretórios para usuários anônimos, mas os arquivos não tinham permissão de leitura. Os script kiddies achavam o servidor, subiam um arquivo de teste, davam um DIR, ele aparecia, começaram a encher de arquivos 0-day. Todo dia de manhã esse sujeito separava o resultado da pescaria.

Essas permissões são repetidas em três blocos:

Dono

Grupo

O Resto

Digamos que eu tenha o arquivo Sandy_pelada.exe e quero que ele tenha total acesso para mim, que o grupo de usuários do qual meu login faz parte possa ler mas não apagar, e que mais ninguém tenha acesso.

A primeira parte é simples: eu quero acesso r de leitura, w de escrita e como não é um executável, - no lugar do x.

rw-

O acesso do grupo será r de leitura, mas sem gravação, -  e sem execução, também menos.

r--

Os outros usuários não têm direito a nada, NADA!

---

screenshot_20170714_182438

 

 

Como mudar as permissões?

chmod rw-r----- Sandy_pelada.exe

Só que isso não me parece muito eficiente, digitar NOVE caracteres para definir uma permissão. Tem como melhorar? Sim! E é brilhantemente simples. Peguemos de novo as três permissões:

r w x

Vamos atribui valores numéricos:

r - 4

w - 2

x - 1

Se eu quero que as permissões sejam rwx, eu somo 4 + 2 + 1 e obtenho 7.

Se eu quero permissões somente r-x eu somo 4 + 1 e obtenho 5.

repetimos para cada bloco. No nosso caso:

Bloco1: rw- => 4 + 2 => 6

Bloco2: r-- => 4 + 0 + 4

Bloco3: --- => 0 + 0 + 0

O comando para atribuir essas permissões será:

chmod 640 Sandy_pelada.exe

Mais fácil, e a maioria pára aí, mas de onde vêm esses números mágicos?

Vem de um passado distante, onde programadores extraíam o máximo de suas máquinas, e não desperdiçavam recursos. Esses números fazem muito mais sentido em binário:

dec r w x
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

Ou seja: cada permissão ocupa UM bit de um número binário entre 000 e 111. No total os três blocos de permissões se resumem a nove bits.

Agora imagine a velocidade com que a CPU processa essa informação ínfima. O nome disso é eficiência e elegância, do tempo em que software tinha engenheiros e arquitetos, não hoje onde só temos decoradores.

relacionados


Comentários