Permissões de acesso

De LinuxPédia
Revisão de 14h16min de 20 de fevereiro de 2015 por Nimaisam (Discussão | contribs)

Ir para: navegação, pesquisa

As permissões são usadas para definir quem pode acessar determinados arquivos ou diretórios, assim mantendo segurança e organização em seu sistema e sua rede. O objetivo desse texto é explicar como funcionam as permissões em um sistema Linux.

Tipos de permissões

As permissões estão divididas em três Tipos: permissões para o dono do arquivo, permissões para o grupo ao qual pertence o dono do arquivo e permissões para os outros usuários. Cada arquivo ou diretório possui então 3 permissões.

É por esse motivo que quando usamos o formato de permissões octal utilizamos 3 números, e quando usamos o formato comum são mostrados 3 grupos de letras. Por exemplo:

rwxr-xr-x → Permissão rwxr para o dono, xr para o grupo e x para outros.


Permissões:

As permissões básicas nos sistemas Linux são:

  • r → Leitura
  • w → Escrita
  • x → Execução

Agora que conhecemos as permissões é necessário esclarecer o efeito dessas permissões nos arquivos e diretórios.

Arquivos

  • Escrita → O poder de modificar o conteúdo do arquivo.
  • Leitura → Poder de ler o conteúdo do arquivo.
  • Execução → Permite a execução de um arquivo como um programa ou script.

Diretórios

  • Escrita → Permite criação, remoção de arquivos existentes na pasta e modificação das permissões dos arquivos contidos na pasta.
  • Leitura → Permite ler ou listar o conteúdo do diretório.
  • Execução → Poder de entrar no diretório por meio do comando cd ou acessando via navegador.

Permissões especiais

suid

A propriedade SUID é somente para arquivos executáveis e não tem efeito em diretórios.

Nas permissões básicas, o usuário que executou o programa é dono do processo. Mas em arquivo executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do arquivo, não com o ID do usuário que executou o programa.

Em octal é 4000 e em simbólico é +s em arquivos.

SGID (Set Group ID)

A propriedade SGID tem a mesma função que o SUID para arquivos executáveis. Mas a propriedade SGID tem um efeito especial para os diretórios.

Quando SGID é aplicado em um diretório, os novos arquivos que são criados dentro do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID aplicado.

A permissão de acesso especial SGID pode aparecer somente no campo Grupo.

Exemplo: Se no diretório /home/roberto tem o grupo casa e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/roberto serão criados com o grupo casa.

Em octal é 2000 e em simbólico é +s em diretórios

Sticky (Sticky bit)

Em arquivos executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar. Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória e da próxima vez que ele for executado, será carregado mais rápido.

Em diretórios, a propriedade Sticky impede que outros usuários deletem ou renomeam arquivos dos quais não são donos. Isso normalmente é utilizado para aumentar a segurança, pois o diretório estará em modo append-only (somente incremente). Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou renomear os arquivos dentro de um diretório com a propriedade Sticky aplicada.

Em octal é 1000 e em simbólico é +t.

Permissões em Octal

Funciona da mesma maneira que com as permissões por letras, a diferença é que a permissão octal faz referencia ao conjunto de 3 bits que compõem a permissão. Vamos comparar com as permissões por letras:

  • 4 → Leitura
  • 2 → Escrita
  • 1 → Execução
  • 0 → Nenhuma permissão

Dessa maneira as outras permissões derivam destas:

7 = 4 + 2 +1  ou permissão de rwx
6 = 4 + 2 ou permissão de rw

Mapeando pelos 3 bits em binário:

rwx
000 = --- = 0 = nenhuma permissão
001 = --x = 1 = somente permissão de execução
010 = -w- = 2 = somente permissão de escrita
011 = -wx = 3 = somente permissões de escrita e execução
100 = r-- = 4 = somente permissão de leitura
101 = r-x = 5 = somente permissões de leitura e execução
110 = rw- = 6 = somente permissões de leitura e escrita
111 = rwx = 7 = permissões de leitura, escrita e execução (acesso total)


Permissões de acesso especiais em octal (quarto dígito a esquerda das permissões padrão):

     1000 = Salva imagem do texto no dispositivo de troca (faz com que a chamada do programa de novo seja mais rápida)

     2000 = Ajusta o bit setgid na execução (Faz o mesmo que o setuid para executáveis e para pastas faz com que todos os arquivos criados em uma pasta determinada sejam do grupo do diretório)
 
     4000 = Ajusta o bit setuid na execução (Faz com que o programa seja executado sempre como o dono do arquivo)

Por exemplo um arquivo com permissão 410 significa que o arquivo tem permissão 4(leitura) para o dono, 1(Execução) para o grupo e 0(nenhuma) para outros.

Listando as permissões

Para listar as permissões do conteúdo de uma pasta o comando é ls -l e o retorno dele se parece com esse:

drwxr-xr-x  2 root root  4096 Nov 26  2013 bin
-rw-r--r--  1 root root 10984 Nov 24  2013 ChangeLog
-rw-r--r--  1 root root 32521 Nov 24  2013 COPYING
drwxr-xr-x 15 root root  4096 Nov 26  2013 data
-rw-r--r--  1 root root  2110 Nov 24  2013 README
-rwxr-xr-x  1 root root    41 Abr  9  2010 run_game.sh

As propriedades dos elementos da pasta são mostrados em 9 campos. Usaremos como exemplo o diretório bin:

drwxr-xr-x  2 root root  4096 Nov 26  2013 bin

1 – O primeiro campo é formado de um só caractere e nesse exemplo é a letra d indicando que bin é um diretório. Os valores possíveis são:

l → indica que se trata de um link

- → O hífen indica que se trata de um arquivo

c → indica dispositivo de caracter (dispositivo que é representado por arquivo e se comunica com o Kernel por meio de caracteres como por exemplo interface serial /dev/ttys0)

b → Indica dispositivo de bloco (dispositivo que é representado por arquivo e se comunica com o Kernel por meio de blocos como por exemplo um HD /dev/sda)

s → Sockets Criam pontos de comunicação entre processos cliente-servidor

p → pipes realizam comunicação entre processos na mesma máquina.


2 – O segundo campo indica as permissões. Nesse exemplo são rwx para o dono rx para o grupo e x para outros.


3 – O terceiro campo é um número nesse exemplo é 2 e indica a quantidade de links que o diretório bin tem no sistema.


4 – Usuário dono do diretório, nesse caso o root


5 – Grupo ao qual pertence o dono do diretório, nesse caso o grupo é root.


6 – tamanho do arquivo ou diretório (para ver o tamanho de forma mais legível usamos o comando -lh)


7 – Data da criação do diretório. Nesse exemplo Nov 26


8 – hora da criação. Nesse caso 2013 ou 20:13.


9 – nome do arquivo, link ou diretório. Nesse caso bin


Cuidado com as permissões

As Permissões são essenciais para a segurança do sistema, por isso o ideal é que cada arquivo tenha o mínimo de permissões necessárias para cumprir o seu determinado objetivo. É muito comum ver na internet dicas tipo, “ah não tem permissão dá permissão 777”, mas isso pode ser uma grande vulnerabilidade no sistema e deve ser considerada.


Modificando permissões

Para modificar as permissões de um arquivo ou diretório utilizamos o aplicativo chmod que faz parte do pacote Coreutils.

Para modificar o usuário dono do arquivo utilizamos o comando chown.

Para mudar o grupo associado a um arquivo o comando chgrp

Para mudar o padrão para criação de arquivos o comando que utilizamos é o umask. Porém no caso do umask as permissões se subtraem a permissão 777, funcionam assim:

UMASK CHMOD
0 – ler, escrever e executar 7-0= 7
1 – ler e escrever 7-1=6
2 – ler e executar 7-2=5
3 – somente ler 7-3=4
4 – escrever e executar 7-4=3
5 – somente escrever 7-5=2
6 – somente executar 7-6=1
7 – sem permissões 7-7=0