Lembra quando criamos os arquivos permissao1 a permissao6? Eles foram criados com as mesmas permissões, assim como qualquer arquivo que você criar, isso é um fato. Vamos analisá-lo?
Navegue em qualquer diretório, melhor, crie um novo diretório, pode ser como root, como usuário normal, tanto faz. Feito isso crie mais seis arquivos lá dentro.
Ex:
# cd /tmp
# mkdir arquivos
# cd arquivos
# touch teste{1,2,3,4,5,6}
Ok, vamos ver como ficou isto:
# ls -l test*
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste1
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste2
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste3
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste4
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste5
-rw-r--r-- 1 maran maran 0 2008-08-31 16:02 teste6
Hummm, igualzinho não é? Isso acontece pelo fato de já estar definido em seu sistema como seriam as permissões para novos arquivos e diretórios. Mas como? Não defini nada, pois é, mas já definiram isso para você.
O sistema automaticamente já vem configurado assim, por mero motivo de segurança, afim de evitar que outros usuário excluam seu arquivos e vice-versa, porém isto pode ser alterado e definido como você queira.
Rodem em um terminal o comando:
# umask
0022 -----> Permissão para novos arquivos de todo sistema
Viram, ele definiu uma permissão de leitura para grupo e outros.
Isso pode ser uma questão de segurança, para que não ocorra de alguém excluir/modificar ou sei lá, fazer o que quiser com um arquivo, por apenas participar do grupo. Essa é a permissão padrão de todas distribuições
Linux.
Legal, aí você me pergunta, e se eu precisar mudar isso, para que assim não tenha que sempre mudar? Esta é uma grande decisão, pois você pode alterar isto de duas maneiras:
- Uma permanente e outra apenas provisória.
Mas como assim?
Vamos lá, digamos que eu queira que no diretório /home/maran/aulas sempre sejam criados com -rw-rw----. Eu viria como root e digitaria:
# umask 0227 /home/maran/aulas
Porém como cheguei a esta conclusão de que teria que ser 0227? Vamos entrar em outro assunto, chamado
contagem de umask.
Para que você saiba qual umask definir, não é algo muito complexo, existem pessoas que até criam seu próprio mecanismo ou programas (scripts) que tenham esta função.
Você pega a permissão máxima que existe no Linux, que é rwxrwxrwx, ou em valor octal 777. Feito isso você subtrai pela permissão desejada:
777 ---> Permissão máxima
550
Resultado:
0227
Simples né, porém você tem que ficar atento em algo, a umask para arquivos e diretórios tem "valores" diferentes. Como assim? Eu defini que teriam permissão rw rw --- no diretório aulas, mas será que funcionou?
# umask 0227 /home/maran/aulas
Certo, agora criamos um arquivo:
# touch aula1.txt
# ls -l /home/maran/aulas
-rw-r--r-- 1 maran maran 0 2008-08-31 16:08 aula1.txt
Não saiu como desejado não é? Mas e se eu der um:
# mkdir /home/maran/aulas/permissao
# ls -ld /home/ubuntu/aulas/permissao
drwxr-xr-x 2 maran maran 60 2008-08-31 16:09 /home/maran/aulas/permissao
Não foi como queríamos né? Então vamos analisar isto:
E se tratássemos as permissões na hora da subtração da umask para:
Arquivos ---> 777
Diretórios ---> 666
Vamos fazer um teste baseando-se em nível de diretórios, porém vale lembrar que para se acessar o diretório, você deve definir uma permissão de execução (x).
666
660
006
# umask 0006 /home/maran/aula/*
Vamos fazer um teste então:
# cd /home/maran/aula
# mkdir permissao2
# ls -ld permissao2
drwxrwx--x 2 maran maran 60 2008-08-31 16:22 permissao2
Hummm, como queríamos não, é? E se eu criar um arquivo agora, será que o mesmo ficará com a permissão desejada?
# touch teste.txt
# ls -l
-rw-rw---- 1 maran maran 0 2008-08-31 16:27 teste.txt
Humm, acho que chegamos a uma conclusão, veja:
Se eu quero que um diretório ou tudo que estiver dentro daquele diretório seja criado com uma permissão especifica, eu faço a umask no diretório e não a nível de arquivos. ;)
Agora se você quiser definir permanentemente este tipo de permissão, você pode editar o arquivo /etc/profile. Se eu der um cat neste arquivo, veja o que me é retornado:
# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
umask 022
É só alterar a linha umask para desejada, porém eu faço um esquema diferente. Alguns arquivos são carregados quando fazemos logon no sistema, seguindo a ordem, eles são carregados assim:
/etc/profile
~/.bash_profile
/root/.bashrc
/etc/bash.bashrc
O que eu faço, como a administração do sistema eu deixo para o usuário root, eu edito o arquivo /root/.bashrc, e insiro no final deste arquivo:
umask desejada
Assim todo arquivo/diretório que o root criar virá com esta permissão, aí o que eu faço, quando eu defino uma hierarquia de diretório para novos usuários, eu tenho que deixar o grupo sendo daqueles usuários, aí eu mudo o grupo dono do arquivo/diretório e insiro um SGUID nele, vocês verão mais pra frente o que é isso, aí eu resolvo todo meu problema.
É isso aí, assim terá esta umask permanentemente, porém tome cuidado e tenha certeza do que está fazendo. Se você tiver uma boa administração de seu sistema, é ate aconselhável fazer isto, pelo menos em meu ponto de vista, pois quebra um galhão.
:)