Calculo de umask definitivo.
-->
Estava eu aprendendo a calcular umask e vi uma séria de informações desencontradas, alguns dizendo por exemplo para diminuir de 777, 666 e assim vai. Mas nada funcionava efetivamente dependendo do umask que você quer aplicar.
Foi então que lendo a wiki do Archwiki e vendo uma afirmação me veio uma maneira simples de fazer o calculo:
Antes de ler isso na wiki eu estava fazendo a relação abaixo que vi em alguns sites:
0 - 7 - rwx
1 - 6 - rw
2 - 5 - r-x
3 - 4 - r--
4 - 3 - -wx
5 - 2 - -w-
6 - 1 - --x
7 - 0 - ---
Que mostra a relação entre o valor de umask e o valor octal normal de permissão (rwx).
Vamos ao exemplo, se o umask é 007, qual será o valor final para diretórios e arquivos?
Relembre da afirmação tirada da wiki do Arch, o máximo que se pode chegar em permissão para diretórios no linux usando umask é 777 já para arquivos é 666, isso faz sentido porque por padrão o linux não dá permissão de execução para arquivos, agora vem a mágica de como calcular.
Dado o umask 007 a permissão para o diretório será:
777 - 007 = 770
Já para novos arquivos a nova permissão será:
660.
Veja abaixo:
dd:teste3 tux$ umask 007
dd:teste3 tux $ touch umaskfile007
dd:teste3 tux $ mkdir umaskdir007
dd:teste3 tux $ ls -ltra
-rw-rw---- 1 edipo wheel 0 16 Set 09:44 umaskfile007
drwxrwx--- 2 edipo wheel 68 16 Set 09:44 umaskdir007
Como cheguei no 660? Simples, eu so removi o valor que da execução no arquivo, lembra que o máximo que se pode chegar em permissão para arquivo é 666 e não 777 como diretórios? Ai está o segredo, sempre que quiser saber qual permissão os arquivos vão ter para um dado umask, faça o calculo para diretório, que é bem simples e para arquivo simplesmente remova a permissão de execução. Faça o teste, isso vale para qualquer valor de umask.
Vamos a outro exemplo para mostrar que funciona.
umask 135, para diretório temos:
777 - 135 = 642 -> rw-r---w-
Perceba que acima não temos nenhuma permissão de execução, logo a permissão dos arquivos será a mesma dos diretórios:
dd:teste3 edipo$ umask 135
dd:teste3 edipo$ touch umask135file
dd:teste3 edipo$ mkdir umask135dir
dd:teste3 edipo$ ls -ltra
-rw-r---w- 1 edipo wheel 0 16 Set 09:50 umask135file
drw-r---w- 2 edipo wheel 68 16 Set 09:50 umask135dir
Vamos testar agora com algum outro umask que dê execução para os diretórios, 242
777 - 242 = 535 -> r-x-wx-r-x
Para arquivo teremos:
r--w--r-- = 424
Repare que apenas removi a permissão de execução para chegar ao novo valor para arquivos:
dd:teste3 edipo$ umask 242
dd:teste3 edipo$ touch umask242file
dd:teste3 edipo$ mkdir umask242dir
dd:teste3 edipo$ ls -ltra
-r---w-r-- 1 edipo wheel 0 16 Set 09:54 umask242file
dr-x-wxr-x 2 edipo wheel 68 16 Set 09:54 umask242dir
Espero muito ter ajudado, eu busquei uma maneira fácil de fazer isso porque na hora de fazer uma prova, como a LPI por exemplo, é bem mais simples de fazer de cabeça do que ficar fazendo calculo com bits.
UPDATE
Enquanto estava fazendo um exercício notei que para calcular o inverso você deve fazer assim.
Você quer as permissões dos arquivos criados como rw-r----- (640) por padrão.
Para saber o qual umask utilizar é simples, primeiro, seguindo a lógica do post, sempre calcule como seria a permissão para o diretório que contem os arquivos, aqui vem o segredo, adicione a permissão de execução somente para os grupos que já possuem permissão de leitura ou escrita, nesse caso temos:
arquivo - rw-r-----
pasta - rwxr-x---
Sendo assim a permissão da pasta que contem o arquivo com o umask setado seria 750, então temos:
777 - 750 = 027
Está ai o valor do umask que você tem que utilizar.
Pode parecer complicado no início mas praticando vai ver que é bem mais fácil calcular do que usando bits.
Antes de ler isso na wiki eu estava fazendo a relação abaixo que vi em alguns sites:
0 - 7 - rwx
1 - 6 - rw
2 - 5 - r-x
3 - 4 - r--
4 - 3 - -wx
5 - 2 - -w-
6 - 1 - --x
7 - 0 - ---
Que mostra a relação entre o valor de umask e o valor octal normal de permissão (rwx).
Vamos ao exemplo, se o umask é 007, qual será o valor final para diretórios e arquivos?
Relembre da afirmação tirada da wiki do Arch, o máximo que se pode chegar em permissão para diretórios no linux usando umask é 777 já para arquivos é 666, isso faz sentido porque por padrão o linux não dá permissão de execução para arquivos, agora vem a mágica de como calcular.
Dado o umask 007 a permissão para o diretório será:
777 - 007 = 770
Já para novos arquivos a nova permissão será:
660.
Veja abaixo:
dd:teste3 tux$ umask 007
dd:teste3 tux $ touch umaskfile007
dd:teste3 tux $ mkdir umaskdir007
dd:teste3 tux $ ls -ltra
-rw-rw---- 1 edipo wheel 0 16 Set 09:44 umaskfile007
drwxrwx--- 2 edipo wheel 68 16 Set 09:44 umaskdir007
Como cheguei no 660? Simples, eu so removi o valor que da execução no arquivo, lembra que o máximo que se pode chegar em permissão para arquivo é 666 e não 777 como diretórios? Ai está o segredo, sempre que quiser saber qual permissão os arquivos vão ter para um dado umask, faça o calculo para diretório, que é bem simples e para arquivo simplesmente remova a permissão de execução. Faça o teste, isso vale para qualquer valor de umask.
Vamos a outro exemplo para mostrar que funciona.
umask 135, para diretório temos:
777 - 135 = 642 -> rw-r---w-
Perceba que acima não temos nenhuma permissão de execução, logo a permissão dos arquivos será a mesma dos diretórios:
dd:teste3 edipo$ umask 135
dd:teste3 edipo$ touch umask135file
dd:teste3 edipo$ mkdir umask135dir
dd:teste3 edipo$ ls -ltra
-rw-r---w- 1 edipo wheel 0 16 Set 09:50 umask135file
drw-r---w- 2 edipo wheel 68 16 Set 09:50 umask135dir
Vamos testar agora com algum outro umask que dê execução para os diretórios, 242
777 - 242 = 535 -> r-x-wx-r-x
Para arquivo teremos:
r--w--r-- = 424
Repare que apenas removi a permissão de execução para chegar ao novo valor para arquivos:
dd:teste3 edipo$ umask 242
dd:teste3 edipo$ touch umask242file
dd:teste3 edipo$ mkdir umask242dir
dd:teste3 edipo$ ls -ltra
-r---w-r-- 1 edipo wheel 0 16 Set 09:54 umask242file
dr-x-wxr-x 2 edipo wheel 68 16 Set 09:54 umask242dir
Espero muito ter ajudado, eu busquei uma maneira fácil de fazer isso porque na hora de fazer uma prova, como a LPI por exemplo, é bem mais simples de fazer de cabeça do que ficar fazendo calculo com bits.
UPDATE
Enquanto estava fazendo um exercício notei que para calcular o inverso você deve fazer assim.
Você quer as permissões dos arquivos criados como rw-r----- (640) por padrão.
Para saber o qual umask utilizar é simples, primeiro, seguindo a lógica do post, sempre calcule como seria a permissão para o diretório que contem os arquivos, aqui vem o segredo, adicione a permissão de execução somente para os grupos que já possuem permissão de leitura ou escrita, nesse caso temos:
arquivo - rw-r-----
pasta - rwxr-x---
Sendo assim a permissão da pasta que contem o arquivo com o umask setado seria 750, então temos:
777 - 750 = 027
Está ai o valor do umask que você tem que utilizar.
Pode parecer complicado no início mas praticando vai ver que é bem mais fácil calcular do que usando bits.
Comentários
Postar um comentário