terça-feira, 18 de outubro de 2011

Entendendo as permissões de arquivos no GNU/Linux

Uma das características que torna os sistemas baseados em GNU/Linux mais seguros do que os baseados em Windows é o seu forte sistema de permissão de arquivos. Embora sólido e rígido, ele é bem simples de entender. Neste post, vamos desmistificá-lo e auxiliar você a gerenciar melhor seus arquivos e pastas.



 As permissões de arquivos no GNU/Linux são divididas em três níveis: o usuário dono do arquivo (u), o grupo deste usuário (g) e os outros (o). Em condições normais, o usuário dono do arquivo é aquele que o cria, embora possa ser posteriormente alterado. O geupo é aquele no qual o criador do arquivo está inserido e os outros são todos os demais usuários que não estão nesse grupo. Cada um desses níveis pode ter permissão de escrita (w), de leitura (r) e de execução (x).


Para visualizarmos as permissões de um arquivo, basta utilizarmos o comando ls -l. A saída deste comando é similar à exibida abaixo:


 

$ ls -l
drwxr--r-- 1 fred editors 4096 drafts
-rw-r--r-- 1 fred editors 30405 edition-32
-r-xr-xr-x 1 fred fred 8460 edit


 

É importante que saibamos interpretar as informações exibidas pelo comando. Como podemos ver, a primeira parte de cada linha é uma sequência de dez caracteres. O primeiro caractere mostra qual é o tipo de arquivo, podendo ser d para diretórios, l para links simbólicos, c para dispositivos de caracteresp para canais fifo, s para soquetes e - para arquivos comuns. Na listagem de exemplo acima, temos que o primeiro item é um diretório e os outros dois são arquivos comuns.


Os nove caracteres restantes mostram as permissões do respectivo arquivo ou pasta. Se você prestar atenção, verá que elas são divididas em três grupos de três caracteres cada, representando as permissões de, respectivamente, leitura, escrita e execução para, respectivamente, o dono do arquivo, o grupo do dono e os outros. Caso o arquivo ou diretório tenha uma determinada permissão, sua letra aparecerá, caso contrário será exibido um traço. No exemplo, o arquivo edition-32 tem permissão de leitura e de escrita para seu dono e apenas de leitura para os demais membros do grupo e para os outros usuários.


As permissões trabalham de formas distintas em arquivos e em pastas. Em arquivos, a permissão de escrita permitirá que seu conteúdo possa ser visualizado; a permissão de escrita permitirá modificações e, caso o arquivo seja um script ou programa, a permissão de execução permitirá executá-lo. Já para as pastas, a permissão de leitura vai permitir que  conteúdo do diretório seja listado (por exemplo: pelo comando ls); a permissão de escritá habilitará a criação, a exclusão e a modificação de arquivos naquela pasta e a permissão de execução permitirá acessar aquele diretório através do comando cd e acessar seus arquivos diretamente pelo nome.


Para alterar as permissões de um arquivo ou pasta, utilizamos o comando chmod. O chmod pode ser utilizado de duas formas: literal e octal.


No formato literal, utilizamos as letras u, g e o para representar, respectivamente, o dono, o grupo e os outros usuários do arquivo e as letras r, w e x para representar as permissões de leitura, de escrita e de execução. Se quisermos atribuir uma permissão utilizamos o sinal + e se quisermos revogá-la utilizamos o sinal -. Podemos ainda utilizar a para atribuir uma permissão a todos os usuários.


Por exemplo: para que o grupo do dono do arquivo texto tenha permissão de escrita, digitamos




chmod g+w texto


Outra forma de atribuir permissões literais é através do sinal de igualdade. Para que o dono do arquivo script.sh possa lê-lo, modificá-lo e executá-lo, os membros do grupo possam apenas lê-lo e executá-lo e os outros usuários possam apenas lê-lo, digitamos

chmod u=rwx,g=rx,o=r script.sh


A forma octal oferece uma maneira mais simples e rápida de se atribuir permissões a arquivos através de um conjunto de três números octais ( de 0 a 7) para, respectivamente, o dono, o grupo e os outros usuários. O significado de cada dígito remonta aos números binários, onde 0 significa falso e 1, verdadeiro:

























































DígitoLeituraEscritaExecução
00 (F)0 (F)0 (F)
10 (F)0 (F)1 (V)
20 (F)1 (V)0 (F)
30 (F)1 (V)1 (V)
41 (V)0 (F)0 (F)
51 (V)0 (F)1 (V)
61 (V)1 (V)0 (F)
71 (V)1 (V)1 (V)

Assim, uma forma equivalente de dar o último comando mostrado seria




chmod 754 script.sh


Compreender corretamente as permissões de arquivos no GNU/Linux é de fundamental importância não apenas para administradores de sistema como também para os usuários domésticos e webmasters que trabalham com sistemas (geralmente em PHP) que rodam em servidores Linux. Uma permissão dada de forma incorreta pode por em risco toda a segurança de seu sistema. Em especial, alertamos para que você evite ao máximo atribuir a famosa permissão 777 a seus arquivos ou pastas, pois ela dá acesso total e irrestrito a qualquer usuário do sistema - inclusive um invasor.


 

Nenhum comentário:

Postar um comentário