Carlos Cardoso 6 anos atrás
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!
---
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.