Fundamentos do sistema Linux - Permissões

Sistemas operacionais multi-usuário têm de zelar pela segurança e privacidade dos dados individuais de cada usuário, bem como prezar pela integridade do sistema. Para isso existem as chamadas permissões de acesso, que atuam em dois aspectos fundamentais. O primeiro é a privacidade e o segundo, a segurança.

[ Hits: 89.021 ]

Por: Davidson Rodrigues Paulo em 20/11/2005 | Blog: http://davidsonpaulo.com/


Permissões no GNU/Linux



O GNU/Linux tem um método muito simples de lidar com permissões. Inicialmente, elas são divididas em duas categorias: as permissões simples e as permissões especiais.

As permissões simples atuam liberando ou bloqueando o acesso à leitura, escrita e execução nos arquivos. Existem diversas formas de se demonstrar as permissões de um arquivo. Nesse instante mostraremos de forma simplificada, detalhes serão mostrados mais adiante:

Permissão Literal Octal
Leitura r 4
Escrita w 2
Execução x 1
  • Leitura (r): A permissão de leitura é a que vai dizer se o usuário tem ou não direito de ver o conteúdo do arquivo ou do diretório;
  • Escrita (w): Essa permissão diz se o usuário terá ou não o direito de modificar o conteúdo do arquivo ou diretório;
  • Execução (x): Por fim, a permissão de execução especifica se o usuário pode ou não executar o arquivo, caso ele se trate de um binário ou de um script. No caso de um diretório, especifica se o usuário poderá ou não acessá-lo.

Somente a existência dessas permissões não é suficiente. Suponha que você crie um arquivo, e queira que o usuário joao tenha acesso a ele, mas nenhum outro usuário tenha.

Dessa forma, as permissões podem ser aplicadas a:
  • Dono: Chamamos de dono o usuário que criou o arquivo. O sistema de permissões no GNU/Linux permite que alteremos as permissões para nós próprios. Podemos, assim, evitar que, por exemplo, façamos alterações acidentais em arquivos importantes;
  • Grupo: Como você sabe, todo usuário do sistema GNU/Linux pertence a pelo menos um grupo. Assim, você pode definir as permissões em nível de grupo, de forma que, se você liberar o acesso de leitura para o grupo professores, todos os usuários que fizerem parte desse grupo terão permissão de leitura no seu arquivo;
  • Outros: Simplesmente, todos os usuários que não são você mesmo nem pertencem ao seu grupo primário.

USUÁRIO PERMISSÕES
Leitura Escrita Execução
Dono Sim/Não Sim/Não Sim/Não
Grupo Sim/Não Sim/Não Sim/Não
Outros Sim/Não Sim/Não Sim/Não


Obviamente, as permissões não são gravadas dessa forma complexa, mas de uma forma extremamente simples, que veremos mais adiante.

Visualizando as permissões dos arquivos


Podemos visualizar as permissões dos arquivos através do comando ls, utilizando o parâmetro -l. Veja no exemplo abaixo a lista dos arquivos do diretório /home/davidson/:

$ ls -l /home/davidson
total 99373
-rwxr--r--  1 davidson davidson     6654 2005-03-07 05:27 apt-list
-rwxr--r--  1 davidson users    68591963 2005-02-15 05:52 backup.tar.gz
drwxr-xr-x  2 davidson davidson      264 2005-02-24 14:02 Desktop
drwxrwxrwx  5 davidson users         560 2005-03-01 14:31 doc
drwxrwxrwx  9 davidson users         432 2005-03-05 09:48 img
drwxr-xr-x  2 davidson davidson      136 2005-03-07 16:22 iso
-rw-r--r--  1 davidson davidson  2344858 2005-03-07 19:03 xine-out.wav
As permissões, nesse caso, estão dispostas na primeira coluna. Vamos analisar detalhadamente as permissões do arquivo backup.tar.gz:

$ ls -l backup.tar.gz
-rwxr--r--  1 davidson users    68591963 2005-02-15 05:52 backup.tar.gz
Nessa seqüência de caracteres (-rwxr--r--), o primeiro deles indica qual o tipo do arquivo. Os caracteres exibidos podem ser:
  • -: Arquivo regular;
  • d: Diretório;
  • b: Dispositivo de bloco;
  • c: Dispositivo de caractere;
  • p: FIFO;
  • l: Link.

Os outros nove caracteres dividem-se em 3 grupos de 3 caracteres cada. No primeiro deles, temos as permissões do dono do arquivo, no segundo, as permissões dos usuários que pertencem ao grupo primário do dono, e no terceiro, as permissões dos demais usuários. Essas permissões estão dispostas da seguinte maneira:
  • r / -: Permissão de leitura;
  • w / -: Permissão de escrita;
  • x / -: Permissão de execução.

Sendo assim, rwx significa que existe permissão de leitura (r), escrita (w) e execução (x). Quando não há determinado tipo de permissão, o caracter correspondente é substituído por um - (hífen). Dessa forma, r-x significa que existe permissão de leitura (r), não existe permissão de escrita (-) e há permissão de execução (x).

Veja abaixo a saída do comando ls -l, mostrando as permissões do arquivo backup.tar.gz:

$ ls -l backup.tar.gz
-rwxr--r--  1 davidson users    312 2005-03-29 15:27 backup.tar.gz
Permissão Dono Grupo Arquivo
-rwxr--r-- davidson users backup


Através desse comando podemos ver as informações do arquivo tais como: permissões, dono, grupo, data de modificação e tamanho. Na tabela ao lado, temos destacadas as principais informações.

As permissões estão dividas em quatro grupos de caracteres, explicados logo abaixo:
  • -: O arquivo é um arquivo regular;
  • rwx: O dono do arquivo tem permissão de leitura (r), escrita (w) e execução (x);
  • r--: Os usuários que pertencem ao grupo do dono do arquivo têm permissão de leitura (r), não possuem permissões de escrita e execução (--);
  • r--: Os demais usuários têm permissão de leitura (r), mas não possuem permissões de escrita e execução (--).

Dessa forma, qualquer usuário pode visualizar o conteúdo do arquivo backup.tar.gz, mas somente o seu dono poderá fazer alterações em seu conteúdo.

Definindo Permissões dos Arquivos


As permissões de um arquivo só podem ser alteradas por dois usuários: o administrador (root) e o dono do arquivo. Para alterar as permissões, utilizaremos o comando chmod.

Sua sintaxe é a seguinte:

$ chmod [permissões] [arquivo]

Pode-se mudar as permissões de vários arquivos ao mesmo tempo, bastando listá-los separando-os por espaço.

As permissões podem ser definidas em dois formatos: literal e octal.

O Formato Literal

A sintaxe do formato literal é a seguinte:

[usuário][ação][permissão]

O usuário pode ser:
  • u: O dono do arquivo (user);
  • g: Os usuários que pertencem ao grupo do arquivo (group);
  • o: Os outros usuários (others);
  • a: Todos os usuários (all).

As ações podem ser:
  • +: Adiciona a permissão;
  • -: Remove a permissão;
  • =: Iguala as permissões às especificadas.

E, por fim, as permissões:
  • r: Permissão de leitura;
  • w: Permissão de escrita;
  • x: Permissão de execução.

Assim, consideremos novamente o arquivo backup.tar.gz:

$ ls -l backup.tar.gz
-rwxr--r--  1 davidson users 0 2005-03-09 10:58 backup.tar.gz
Podemos ver que os usuários que pertencem ao grupo users não possuem permissão de escrita, mas somente de leitura. Vamos, então, liberar a permissão de escrita para eles:

$ chmod g+w backup.tar.gz
$ ls -l backup.tar.gz
-rwxrw-r--  1 davidson users 0 2005-03-09 10:58 backup.tar.gz
Agora as permissões de grupo são de leitura e escrita (rw-).

Suponhamos que este seja um arquivo confidencial, cujo conteúdo deve ficar restrito ao dono do arquivo e aos usuários que pertencem ao grupo users. Nesse caso, precisamos remover a permissão de leitura dos outros usuários.

Fazemos isso da seguinte forma:

$ chmod o-r backup.tar.gz
$ ls -l backup.tar.gz
-rwxrw----  1 davidson users 0 2005-03-09 10:58 backup.tar.gz
Agora, os outros usuários não possuem nenhuma permissão (---) sobre o arquivo backup.tar.gz.

Como você pode ver, o uso do chmod no formato literal é bem simples. Mas há ainda dois pontos que podem ser destacados. Primeiro, é que você definir mais de uma permissão por vez, colocando os caracteres r, w ou x em seqüência. Dessa forma, se você quisesse liberar para todos os usuários as permissões de leitura e execução no arquivo script.sh, o comando seria:

$ chmod a+rx script.sh

Outro ponto é que você pode aplicar diferentes permissões em uma única linha de comando, bastando separar os argumentos com vírgula. Dessa forma, voltando ao exemplo anterior, para aplicar as permissões g+w e o-r em um único comando, bastaria fazer da seguinte forma:

$ chmod g+w,o-r backup.tar.gz

Por fim, além do + e do -, podemos utilizar o =. Quando usamos o =, precisamos informar todas as permissões. Assim, para atribuir permissões de leitura e escrita para o grupo, utilizamos g=rw-, para atribuir permissão de leitura e execução para todos os usuários, usamos a=r-x, e assim por diante.

Formato Octal

As permissões no formato octal são escritas sob a forma de 3 números. O primeiro número corresponde às permissões do dono do arquivo, o segundo número, às permissões do grupo, e o terceiro às permissões dos outros usuários. Esses números, variam de 0 a 7, e são obtidos através da soma de outros números, cada um correspondendo a uma determinada permissão, a saber:
  • 4: Permissão de leitura;
  • 2: Permissão de escrita;
  • 1: Permissão de execução.

Dessa forma, temos a seguinte lista de permissões no formato octal:
  • 0: Nenhuma permissão;
  • 1: Permissão de execução;
  • 2: Permissão de escrita;
  • 3: Permissão de execução e escrita;
  • 4: Permissão de leitura;
  • 5: Permissão de leitura e execução;
  • 6: Permissão de leitura e escrita;
  • 7: Permissão de leitura, escrita e execução.

Dessa forma, vamos considerar o arquivo script.sh, que acabamos de criar. Vamos definir suas permissões da seguinte forma:
  • O dono do arquivo terá permissão total, ou seja, leitura, escrita e execução;
  • O grupo do arquivo terá permissão de escrita e execução;
  • Outros usuários terão permissão de leitura.

Essas permissões, no formato octal, são escritas como 754:

$ chmod 754 script.sh
$ ls -l script.sh
-rwxr-xr--  1 davidson users 0 2005-03-09 11:45 script.sh

A umask


Você deve ter percebido que todo novo arquivo recebe sempre as mesmas permissões, ainda que você nunca especifique-as no momento da criação e cópia dos arquivos, pois essas permissões são pré-definidas, e o programa que gerencia essas permissões é o umask.

Basicamente, a umask (user mask ou máscara de usuário) é constituído por 3 números que definem as permissões iniciais do dono, grupo e outros usuários para os arquivos que são criados ou copiados. A umask tem efeitos diferentes para diretórios, arquivos binários e arquivos texto.

Para ver qual a umask definida no seu sistema, execute o comando umask:

$ umask
0022

O valor 0022 é o padrão, sendo o primeiro 0 apenas um indicador de que se trata de uma umask. Os últimos 3 números correspondem às permissões umask para o dono, grupo e outros usuários.

DIRETÓRIOS ARQUIVOS
Texto Binários
dono rwx rw- r-x
grupo r-x r-- r-x
outros r-x r-- r-x


Vejamos um exemplo prático. Suponha um diretório /tmp/teste/, contendo um diretório, um arquivo de texto e um arquivo binário, todos com permissão rwx para todos os usuários:

$ ls -l /tmp/teste
-rwxrwxrwx  1 root root 10088 2005-03-09 17:37 arquivo_binário
-rwxrwxrwx  1 root root  1506 2005-03-09 17:37 arquivo_texto
drwxrwxrwx  2 root root    48 2005-03-09 17:37 dir
Agora, vamos copiar o diretório /tmp/teste/ para o nosso diretório pessoal, e ver o que acontece com as permissões dos arquivos.

$ cp -r /tmp/teste /home/davidson
$ ls -l /home/davidson/teste
-rwxr-xr-x  1 davidson davidson 10088 2005-03-09 17:39 arquivo_binário
-rwxr-xr-x  1 davidson davidson  1506 2005-03-09 17:39 arquivo_texto
drwxr-xr-x  2 davidson davidson    48 2005-03-09 17:39 dir
Como podemos verificar, as permissões foram alteradas, e cada um dos arquivos recebeu permissões diferentes, de acordo com o tipo de cada um e obedecendo à umask 022.

Modificando a umask



Para modificar a umask do sistema, utilizamos o comando umask, segundo a sintaxe:

$ umask [modo]

Onde [modo] são os 3 números que definem as permissões de acordo com a tabela mostrada logo acima.

Como exemplo, vamos mudar o valor da umask para 247, depois recopiar o diretório /tmp/teste/ para /home/davidson/ e ver o que acontecem com as permissões:

$ umask 247
$ rm -rf /home/davidson/teste
$ cp -r /tmp/teste /home/davidson
$ ls -l /home/davidson/teste
-r-x-wx---  1 davidson davidson 10088 2005-03-09 17:46 arquivo_binário
-r-x-wx---  1 davidson davidson  1506 2005-03-09 17:46 arquivo_texto
dr-x-wx---  2 davidson davidson    48 2005-03-09 17:46 dir
Como você pode ver, as permissões agora estão diferentes de antes. Analise a tabela e procure entender porque as permissões ficam dessa forma quando se usa a umask 247.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Permissões no GNU/Linux
   3. Permissões especiais
Outros artigos deste autor

hdparm: Tire o máximo do seu HD

Usando o start-stop-daemon no Slackware

Fundamentos do sistema Linux - usuários e grupos

Aulas particulares: Ganhando dinheiro com Linux

Compilando o Squid e criando o pacote para Slackware

Leitura recomendada

Introdução ao Linux: O editor de texto Nano

Necessidade do profissional de informática

Wine: Como jogar/emular no Linux seus games ou softwares mais atuais sem pagar por isso

Passo-a-passo para instalar o CentOS Linux 5.2

Uma introdução ao shell (parte 1)

  
Comentários
[1] Comentário enviado por newba em 20/11/2005 - 21:58h

Muito Bom ..so uma coisinha..: o comando ta em ordem errada, ai você esta adicionando o usuario shutdown ao grupo davidson.

# addgroup shutdown davidson

o comando certo é :
# comando usuario grupo
#addgroup davidson shutdown

Não sei se isso muda de distro para distro mais no meu Debian é assim. vlw

[2] Comentário enviado por professordavid em 21/11/2005 - 09:31h

Cara.. eu estava com um artigo de permissões quase que engatilhado para publicar, mas depois do seu devo admitir que nada substitui o seu talento e capacidade... Parabéns pelo artigo!! Está genial... !!! Fico muito feliz por vc ter publicado primeiro!!!

[3] Comentário enviado por fzuchna em 21/11/2005 - 14:23h

Teste o comando do bit STICY e aconteceu o seguinte apareceu um T ao invés do t, o comando foi chmod 1770 diretorio, somente 0 para outros que acontece isso vc sabe por que??

[4] Comentário enviado por loammy em 21/11/2005 - 16:43h

Eu estava!!!!!!!!!!entende!!!!!!!Com duvidas sobre alguns tipos de permissoes especiais........e foi aqui que achei a minha luz!!!!!!

[5] Comentário enviado por cr1st1an0 em 22/11/2005 - 16:10h

No item "Definindo Permissões dos Arquivos" no qual existe um exemplo que pede para definir as permissões no formato octal com as seguintes características:
*O dono do arquivo terá permissão total, ou seja, leitura, escrita e execução;
*O grupo do arquivo terá permissão de escrita e execução;
*Outros usuários terão permissão de escrita.

O comando utilizado foi este: $ chmod 754 script.sh, mas não deveria ter sido este $ chmod 732 script.sh ???

Analisando a saída encontrada: "-rwxr-xr-- 1 davidson users 0 2005-03-09 11:45 script.sh" parece ter ocorrido uma troca de "escrita" para "leitura", ou seja, a saída equivale ao comando digitado, mas não ao enunciado do exemplo.


[6] Comentário enviado por davidsonpaulo em 22/11/2005 - 17:52h

É verdade, tá errado mesmo. Eu vivo confundindo "leitura" e "escrita", quando quero dizer um digo outro. Vou corrigir imediatamente. Obrigado pela observação, cr1st1ano.

Abraços

[7] Comentário enviado por cr1st1an0 em 24/11/2005 - 19:08h

Parabéns pelo seu artigo.Está muito bem escrito e didático. Erros sempre acontecem, mas o importante é que a mensagem seja passada de forma clara e eficiente e isso você conseguiu. Continue assim!!!

Um abraço

[8] Comentário enviado por vilmarbr em 09/04/2007 - 17:23h

Bom artigo.
Bem didático.

[]´s

Vilmar

[9] Comentário enviado por kabalido em 17/01/2008 - 15:05h

O melhor artigo que eu li até hj sobre permissões de arquivos.
Tirou todas as minhas dúvidas.
Show de bola
Parabéns cara!!!

[10] Comentário enviado por doradu em 04/02/2010 - 15:41h

tá nos favoritos

[11] Comentário enviado por NewWave em 23/10/2011 - 14:03h

Cara, meus parabéns pelo artigo. Muito bom, mesmo! Digno dos textos dos melhores livros. É realmente muito esclarecedor e não dá margens a quaisquer dúvidas. Sem falar do português que está impecável e isso é muito importante, ao meu ver, em um texto técnico. Parabéns!

[12] Comentário enviado por removido em 25/01/2013 - 23:26h

Obrigado por compartilhar o conhecimento!

[13] Comentário enviado por thais.soares@ em 13/07/2015 - 10:43h

Super me ajudou!

[14] Comentário enviado por thais.soares@ em 11/08/2015 - 13:57h

Amei esse artigo!
Super me ajudou


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts