Gerenciamento de Permissões de Arquivo e Propriedade no Linux [Guia Básico]

Como o Linux é um sistema operacional multiusuário, as permissões de acesso a arquivos, diretório e outros dispositivos são necessárias para garantir que os usuários tenham acesso somente aos recursos para os quais eles podem utilizar. 

O Gerenciamento de Permissões de Arquivo e Propriedade no Linux é bem fácil, ao contrário do que parece.

Estes recursos podem ser desde um simples arquivo até uma impressora ou um gravador de CD-ROM. 

Cada arquivo no Linux tem definido o seu controle de acesso. Este controle é definido por três classes:

  • Permissões de usuário: Definem a permissão para o usuário que é o “dono” do arquivo, quem o criou e o mantém;
  • Permissões de grupo: Definem a permissão para o grupo de usuários ao qual o arquivo pertence;
  • Permissões para outros usuários: Definem a permissão para todos os outros usuários (não dono e não faz parte do grupo). 
permissoes_pt Gerenciamento de Permissões de Arquivo e Propriedade no Linux [Guia Básico]Classes de Permissões

E para cada classe podemos definir três tipos de acesso: leitura (r), escrita (w) e execução (x). Quando não há o acesso para aquele determinado tipo, o sistema sinaliza com um traço “-“.

As três primeiras posições da esquerda representam as permissões para o usuário dono do arquivo. Quem cria o arquivo é seu dono.

As três outras representam as permissões relativas a um grupo (pode ser que o usuário dono pertença ao grupo ou não).

As três últimas permissões representam os outros (que não é o usuário dono do recurso e não pertence ao grupo).

Então, ao tentar acessar um recurso, ou você é o dono do arquivo, ou faz parte do grupo a qual o arquivo pertence, ou você é “os outros”.

Como no Linux tudo é um arquivo, isto facilita muito trabalhar com as permissões, já que o esquema é o mesmo para tudo. Não importa se você está falando de um arquivo, diretório, ou recurso de hardware.

Esta divisão cobre praticamente todas as necessidades em termos de segurança.  

A opção “-l” do comando ls mostra as permissões dos arquivos:

tipoarquivo_pt Gerenciamento de Permissões de Arquivo e Propriedade no Linux [Guia Básico]Como ler a saída do comando ls

Os arquivos podem ser classificados pelo seu tipo:

  • (-) Arquivo comum
  • (d) Diretório
  • (b) Dispositivo de Bloco
  • (c) Dispositivo de Caractere
  • (s) Socket
  • (p) Pipe (condutores)
  • (l) Link Simbólico

A primeira letra que aparece na esquerda do “ls -l” indica o tipo de arquivo. Quando não há letra, mas um traço, o arquivo é comum.

As definições de leitura, escrita e execução têm nuances diferentes para arquivos e diretórios. Veja o quadro a seguir:

ObjetoLeitura (r)Escrita (w)Execução (x)
ArquivoPermite ler o conteúdo do arquivo.Permite alterar o conteúdo do arquivo.Permite executar o arquivo como um programa
DiretórioPermite listar o conteúdo do diretório. Permite criar, mover, renomear e apagar arquivos no diretório.Permite ler e gravar arquivos no diretório, bem como mudar o diretório corrente para o diretório com “cd”.

As permissões são gravadas em forma binária, com 12 bits para cada arquivo no sistema, e esses bits podem ser representados na forma octal, conforme a figura a seguir:

bits_pt Gerenciamento de Permissões de Arquivo e Propriedade no Linux [Guia Básico]Bits de Permissões

Bits de permissões especiais no Linux

Os três primeiros bits da esquerda para a direita são bits de atributos especiais, a saber:

SUID (Set User ID): O bit de SUID afeta somente os arquivos executáveis. Normalmente os programas são executados com a permissão do usuário que os executou. O SUID muda esta condição, fazendo com que o programa seja executado sob as permissões do usuário Dono do arquivo, não importando quem o chamou. O SUID geralmente é utilizado para dar a um programa permissões de root. É preciso que o administrador tenha muito cuidado ao utilizar o SUID, pois um programa mal-intencionado pode ter acesso elevado ao sistema;

SGID (Set Group ID): O bit de SGID funciona como o bit SUID. Ele faz com que os programas executem sob a permissão de grupo do dono do arquivo. Se aplicado em um diretório, o SGID vai fazer com que todos os arquivos criados debaixo deste diretório tenham o mesmo grupo do diretório;

Sticky (Colado na memória): O bit especial chamado de sticky ou bit de colado na memória originalmente fazia com que os programas permaneçam na memória mesmo depois de terminados. Isto fazia com que os programas executem mais rapidamente da próxima vez que forem chamados. Este bit quando aplicado em diretórios faz com que somente o dono do diretório, o dono do arquivo ou o root possam renomear ou apagar arquivos neste diretório.

Nas implementações recentes no Linux e Unix este bit já não é mais usado para “colar na memória”, mas para evitar que arquivos que o tenham habilitado de serem apagados por usuários que não sejam seu dono. Se habilitado em um diretório este bit confere que seu conteúdo possa somente ser apagado pelos respectivos donos dos arquivos nele contidos, o próprio dono do diretório ou o root.

Logicamente, o administrador não precisa escrever as permissões em 12 bits. Desta forma, as permissões podem ser representadas por letras ou em octetos conforme a tabela a seguir:

OctalBinárioLetrasDescrição
0000Sem acesso
1001—xSomente Execução
2010-w-Somente Escrita
3011-wrSomente Escrita e Execução
4100r—Somente Leitura
5101r-xSomente Leitura e Execução
6110rw-Somente Leitura e Escrita
7111rwxLeitura, Escrita e Execução

Esta representação pode ser utilizada para cada classe (Dono, Grupo e Outros), bem como para os bits especiais (SUID, SGID, Sticky).

Exemplo:

rwxr-x---	root	users	Script.sh

No exemplo, o arquivo Script.sh tem permissões de leitura, gravação e execução (rwx) para o usuário root, permissões de leitura e execução (r-x) para o grupo users e nenhuma (—) permissão para outros usuários que não sejam do grupo users. 

As permissões do arquivo Script.sh podem ser representadas pelos octetos 750, sendo 7 (4+2+1) para as permissões do dono do arquivo (rwx), 5 (4+1) para as permissões do Grupo (r-x) e 0 (—) para as permissões de Outros.

Desta forma, leitura (r) terá o valor de 4, gravação (w) terá valor 2, e execução terá valor (1). Então, para cada classe de permissão – dono, grupo, ou outros – soma-se os valores da permissão, da forma que rwxr-x—, quando somados por grupo, terão a permissão 750 (4+2+1, 4+0+1, 0+0+0).

Como os bits de permissão especiais são utilizados com pouca frequência, e sob condições especiais, eles são representados pela letra (s) no lugar do (x) de execução para os bits SUID e SGID nas classes de Dono do arquivo e Grupo, e (t) no lugar do (x) para o bit sticky na classe de Outros.

Veja o Exemplo:

rwsr-x--- root users Firewall

O arquivo Firewall tem permissão de leitura, escrita e execução (rws) para o usuário root, leitura e execução (r-x) para usuários do grupo users e nenhuma permissão (—) como Outros.

E ainda possui o bit de SUID habilitado (o “s” no lugar de “x” para o Dono do arquivo).

Desta forma, o programa Firewall tem poderes de superusuário quando executado, já que o seu dono é o root. As permissões dele também podem ser representadas pelo octeto 4750.

Conheça o Curso Online de Pfsense da Certificação Linux!

Você não precisa decorar a tabela de permissões

Basta decorar que as permissões de Leitura têm sempre o valor 4.

As permissões de Gravação têm sempre o valor 2 e as permissões de execução sempre o valor 1.

As três classes de permissões (Dono, Grupo e Outros) são representadas por 3 números.

Se você decompuser cada número, vai encontrar as permissões de cada classe. Veja a figura a seguir:

permissoes2_pt Gerenciamento de Permissões de Arquivo e Propriedade no Linux [Guia Básico]Permissões em Octetos

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe