Permissões de acesso no Linux O GNU/Linux, como todo sistema operacional robusto e estável, tem na permissão de acesso a arquivos e diretórios a principal proteção do sistema de arquivos. Essas permissões impedem o acesso indevido de programas e usuários a lugares não autorizados. Vamos identificar o tipo de arquivo, quem é o seu dono, a que grupo ele pertence, os tipos de permissão de arquivos/diretórios, permissões especiais, os comandos de manipulação de permissões e por fim falaremos dos comandos que usamos para mudar a propriedade e grupo de arquivos/diretórios. Tipo de arquivo São definidos 7 tipos de arquivos no Linux. Mesmo havendo a inclusão de algo novo no sistema de arquivos, ele ainda deve ser incluso de forma a se enquadrar em um desses tipos. Antes de iniciarmos, vamos criar um diretório base para nossos testes/exemplos. Daremos o nome de "Documentos" a este diretório e dentro dele iremos criar um outro diretório de nome "Documentos", além de um arquivo chamado "bugiganga.txt". # mkdir /documentos # chmod 777 /documentos # cd /documentos/ # mkdir Documentos drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos # touch bugiganga.txt drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos Agora vamos identificar o tipo de arquivo estamos trabalhando. De acordo com saída do comando "ls -l" temos: drwxr-xr-x 2 root root 4096 2010-05-04 14:32 Documentos
Da esquerda para direita temos uma sequência de 10 bits (caracteres). Nesse primeiro momento iremos nos ater apenas ao bit mais significativo, que é o primeiro bit da esquerda para direita. Ele equivale ao "tipo" de arquivo que estamos trabalhando. Na saída de nosso exemplo, iremos destacar apenas os 10 bits, de 1 de tipo e 9 de permissão, e daremos uma atenção especial ao bit de "tipo", com isso teremos condição de compreender melhor e saber como identificar cada um dos 7 tipos de arquivos Linux. A seguir os tipos de arquivos: - arquivo regular d diretório c arquivos de dispositivo de caracter (terminais) b arquivos de dispositivos de blocos (dispositivos físicos) s socket local p pipe l link simbólico Os 7 "tipos" de arquivos Linux são: Arquivo regular - São arquivos texto, arquivos de dados, executáveis, bibliotecas etc. Diretórios - São arquivos que possuem referências com nomes para outros arquivos. Arquivos de dispositivos de caracteres e de dispositivos de blocos - São os arquivos utilizados por programas, que permitem a comunicação com o hardware e periféricos do sistema. Sockets Local - Comunicação entre processos. Exemplo: sistema de impressão e o syslog. Pipes - Assim como os sockets, os pipes também permitem a comunicação entre dois processos executados no mesmo host. Links simbólicos - Também conhecidos como soft link é basicamente um arquivo que aponta para outro arquivo, podemos enxergar de forma mais clara se pensarmos nele como sendo um atalho. Conjunto de permissões Dono, grupo e outros A definição de acesso aos arquivos e diretórios é feita seguindo 3 conjuntos de permissão que equivalem ao "dono", ao "grupo dono" dos arquivos e diretórios e "outros". Dono (u): É o usuário que criou o arquivo ou diretório. Somente ele ou o "root" podem modificar as permissões de acesso ao arquivo ou diretório criado por ele. Temos como
identificação do dono do arquivos o user id (UID). A identificação do usuário fica armazenado no arquivo /etc/passwd. Grupo (g): É o grupo dono do arquivo ou diretório. É através desse conjunto de permissões que vários usuários podem ter acesso a arquivos e/ou diretórios onde eles não são os criadores. Um usuário pode pertencer a vários grupos, com isso o administrador do sistema tem como planejar uma boa política de segurança. Temos como identificação de grupo o group id (GID). Quando um usuário é criado e não especificamos que este usuário deve pertencer a um grupo já existente no sistema, é criado por padrão um grupo com o mesmo nome do usuário. O armazenamento das informações referentes aos grupos do sistemas e os usuários que fazem parte desses grupos, estão armazenados no arquivo /etc/group. Outros (o): São aqueles usuários que não são os criadores e nem pertencem ao grupo dono do arquivo ou diretório. Tipos de permissão de acesso Temos 3 tipos básicos de permissão que são aplicáveis para o usuário proprietário do arquivo/diretório (dono), os grupos proprietários do arquivo/diretório (grupo) e outros são as permissões de leitura, escrita e execução. São destinados 3 bits (caracteres) para cada um dos agentes (dono, grupo e outros) sendo um bit de leitura, um bit de escrita e um bit de execução. É importante deixar bem claro que a criação e a remoção de um arquivo/diretório depende da permissão de escrita estar setada no diretório "PAI", pois é nele que o mapeamento de nome para o espaço de dados é armazenado. Podemos ainda usar a representação numérica octal (base 8), onde cada dígito equivale aos 3 bits de cada grupo de bits.
Comandos de permissões Comando chmod Usado para modificar as permissões de acesso de um arquivo ou diretório. Quando criamos um arquivo, seu dono (proprietário) é o usuário que o criou, seu o grupo é o grupo padrão do seu proprietário. Como vimos anteriormente existe uma exceção a essa regra. Caso o diretório onde esse arquivo/diretório esteja sendo criado possua o bit especial "setgid" ativado. Nesse caso o grupo passa a ser o mesmo grupo do diretório "pai". Sintaxe: chmod [opções] [permissões] [arquivo/diretório] Ex.1: Vamos dar direito de escrita para o grupo dono do arquivo bugiganga.txt. drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos # chmod g+w bugiganga.txt -rw-rw-r-- 1 root root 0 2010-05-04 14:33 bugiganga.txt drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos Ex.2: Iremos agora remover direito de escrita para o grupo dono do arquivo bugiganga.txt. # chmod g-w bugiganga.txt drwxr-xr-x 2 root root 4096 2010-05-04 17:31 Documentos Ex.3: Vamos incluir o direito de escrita para os "outros" no diretório "Documentos" de forma recursiva, isso significa que arquivos/diretórios abaixo do diretório Documentos irão receber direito de escrita para os "outros".
# chmod -R o+w Documentos drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos Documentos/ -rw-r--rw- 1 root root 0 2010-05-04 17:31 contas_pagar.odc -rw-r--rw- 1 root root 0 2010-05-04 17:31 credores.xls Ex.4: Usaremos um exemplo de notação octal. Faremos com que o arquivo organograma só tenha direto de leitura e escrita para o dono do arquivo, nesse caso o "root". # chmod 600 organograma.odc drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos -rw------- 1 root root 0 2010-05-04 17:30 organograma.odc Comando chgrp Comando nativo do Unix é usado para modificar o grupo dono do arquivo/diretório. Hoje em dia não é muito mais utilizado, pois o comando chown além de mudar a propriedade do arquivo/diretório, também muda o grupo. Como iremos mostrar como um pouco mais adiante. Sintaxe: chgrp [opções] [grupo] [arquivo/diretório] Daremos alguns exemplos do uso do comando "chgrp". Continuaremos a usar a estrutura de arquivos/diretórios que foram criados anteriormente. Apenas iremos acrescentar dois grupos um chamado administracao e outro chamado contabilidade. # groupadd administracao # groupadd contabilidade Agora vamos para dentro do diretório "/documentos" e vamos listar o conteúdo.
drwxr-xrwx 2 root root 4096 2010-05-04 17:31 Documentos -rw------- 1 root root 0 2010-05-04 17:30 organograma.odc Ex.1: Vamos trocar o grupo (root) dono do arquivo bugiganga.txt para contabilidade. Estamos utilizando a opção "-v" para mostrar o arquivo que esta sendo modificado. # chgrp -v contabilidade bugiganga.txt changed group of `bugiganga.txt' to contabilidade Ex2.: Agora iremos trocar o grupo (contabilidade) do arquivo bugiganga.txt para o grupo (administracao). # chgrp administracao bugiganga.txt drwxr-xrwx 2 root root 4096 2010-05-03 13:13 administracao -rw------- 1 root root Ex3.: E por fim modificaremos o grupo administração para ser dono do diretório administracao. # chgrp administracao administracao/ -rw------- 1 root root Comando chown Usado para modificar a propriedade de um arquivo/diretório.o interessante é que como mencionado anteriormente, ele tem a opção de modificar também o grupo proprietário da arquivo/diretório, conforme mostraremos mais adiante. Sintaxe: chown [opções] [dono:grupo] [arquivo/diretório]
Usando ainda a mesma árvore de diretórios criada para exemplos iremos demonstrar alguns exemplos do comando "chown". Antes de mais nada criaremos dois usuários (castro e pamela). # useradd castro # useradd pamela Inicialmente vamos listar o conteúdo, para podermos ver como esta atualmente o diretório. -rw------- 1 root root Ex1: Vamos passar a propriedade do arquivo organograma.odc para o usuário castro. # chown castro organograma.odc -rw------- 1 castro root Ex2: Agora vamos além de mudar a propriedade do arquivo organograma.odc do usuário castro para o usuário pamela, passaremos o grupo contabilidade para o grupo dono do arquivo. # chown pamela:contabilidade organograma.odc -rw------- 1 pamela contabilidade