Você está na página 1de 10

Introdução

Cada arquivo e diretório em um sistema Linux possui um conjunto de permissões e


propriedades integradas a ele. É através disso que o sistema sabe quem pode mexer em
qual arquivo, quando o arquivo foi modificado etc.

Neste artigo falarei sobre como distinguir níveis e tipos de permissão em arquivos e
diretórios, utilizar os comando chmod e chown para modificar propriedades e
permissões, distinguir os modos octal e textual para os parâmetros dos comandos de
mudança de permissões, entender o que é máscara de um arquivo e como modificá-la,
entender e utilizar permissões especiais, como stick bit e suid bit.

Conceito de permissão
O Linux é um sistema multi-usuário. É necessário ter uma conta de acesso para utilizá-
lo.

Além da autenticação para acesso ao sistema, uma outra funcionalidade relativa aos
conceitos de usuários e grupos é o de permissões de arquivos, onde é definido quem
pode acessar bem como quais arquivos e diretórios.

O sistema que arquivos do Linux possibilita que sejam atribuídos direitos de acesso
diferenciados para os usuários do sistema. A cada arquivo ou diretório do sistema é
associado um proprietário, um grupo e seus respectivos direitos de acesso, ou
permissões.

Cada arquivo/diretório possui três níveis


de permissão
1) usuário dono - também chamado de "owner", é o proprietário do arquivo/diretório;

2) grupo dono - é o grupo proprietário do arquivo/diretório. O grupo pode conter um


usuário (geralmente o usuário dono) ou vários usuários;

3) outros - aplica-se a qualquer outro usuário, que não se encaixa nos níveis anteriores.

E para cada nível de permissão, existem


três tipos de permissão
1) leitura (r) - permissão para visualizar o conteúdo do arquivo, simbolizada por "r" (do
inglês read).

2) escrita (w) - permissão para alterar o conteúdo do arquivo, simbolizada por "w" (do
inglês write).
3) execução (x) - permissão para executar o arquivo, simbolizada por "x" (do inglês
execution).

A combinação dos níveis de permissão com os tipos de permissão forma o conjunto de


propriedades para cada arquivo ou diretório.

Estas propriedades são atribuídas com o objetivo de determinar quem pode acessá-lo,
ler seu conteúdo ou mesmo executar algum programa.

Verificando permissões
Para visualizar as permissões de um arquivo, pode-se utilizar o comando "ls -l", que
listará os arquivos do diretório atual com uma série de informações adicionais,
incluindo colunas com as permissões, nome do usuário e do grupo donos do arquivo.

Veja o exemplo abaixo:

A primeira coluna (da esquerda para a direita) é a que contém todas as permissões; a
segunda indica os links diretos do arquivo, a terceira e quarta colunas especificam o
nome do usuário e grupo ao qual pertencem o arquivo. As demais colunas mostram
informações adicionais sobre o arquivo.

Na primeira coluna, é mostrado um vetor com espaço para 10 caracteres. O primeiro


identifica o tipo do arquivo, enquanto que os outros 9 são o conjunto de três permissões
para cada um dos três níveis (usuário, grupo e outros, respectivamente).

Modos Octal e Textual


Para alterar as permissões e propriedades de arquivos e diretórios, existem
vários comandos disponíveis. Uma similaridade entre eles é que os parâmetros de níveis
e tipos de permissões podem ser indicados de duas formas:
Textual
No modo textual, utilizam-se os caracteres "u" para representar o usuário dono do
arquivos, "g" para grupo nodo do arquivo e "o" para outros, com um sinal de mais (+)
para adicionar a permissão e menos (-) para remover. Veja o exemplo genérico a seguir
(os detalhes do comando chmod serão vistos mais adiante):

$ chmod u+rw,g+w,0-rwx arquivo2.txt

Adiciona leitura e escrita para o dono, adiciona escrita para o grupo e remove todas as
outras permissões pra outros usuários no arquivo arquivo2.txt.

Octal
No formato octal, as permissões são representadas por números na base octal, onde
leitura é representado pelo valor 4, a escrita por 2 e execução por 1. Somando-se os
valores obtem-se a permissão desejada para cada nível. Exemplo:

$ chmod 640 arquivo.txt

Configura a permissão de arquivo.txt como sendo 640: 6 = leitura(4) + escrita(2) para o


usuário dono, 4 = leitura para o grupo e 0 (nenhuma permissão) para outros.

É importante lembrar que o usuário root tem permissões ilimitadas, ou seja, ele poderá
visualizar ou modificar permissão de qualquer usuário, em qualquer diretório.

Modificando proprietários e grupos


Nesta seção, irei apresentar os principais comandos utilizados para modificar e visualiza
as propriedades e permissões de arquivos e diretórios.

chmod
Permite que se alterem as permissões e propriedades de um ou mais arquivos (change
mode). É importante ressaltar que o usuário deve ter permissões para fazer as alterações
(por exemplo: deve ser o usuário root, deve ser dono do arquivo, ou deve estar no grupo
do arquivo, com permissão de escrita). Pode utilizar tanto a notação textual como a
octal.

Principais opções:

chmod [ opções ] arquivo | diretório


-R Permite que se altere recursivamente as
permissões de arquivos e diretórios.
Permite que um determinado arquivo seja
--
modificado tomando como referência o arquivo
reference=arquivo
especificado.

As tabelas a seguir facilitam a visualização das notações utilizadas pelo chmod.

Nível de Permissão
u Usuário ou dono do arquivo.
g Grupo do arquivo.
Outros usuários que não são donos e não estão cadastrados no
o
grupo.
a Afeta todos os anteriores (u, g, o).
Tipo de Permissão - Notação Textual
r Concede ou remove permissão de leitura.
w Concede ou remove permissão de escrita.
x Concede ou remove permissão de execução.
a Concede ou remove todas as permissões anteriores (all).
Tipo de Permissão - Notação Octal
4 Indica permissão de leitura.
2 Indica permissão de escrita.
1 Indica permissão de execução.
7 Indica todas as permissões.
0 indica sem permissão.
Operadores
+ Concede permissão(ões) especificada(s).
- Remove permissão(ões).
Atribui somente esta(s) permissão(ões) ao arquivo, removendo a(s)
=
que não sem encontra(m) explícita(s).

Exemplos:

1) chmod u+rw,g+x documento.txt - concede permissões de leitura e gravação ao


dono, e execução ao grupo para o arquivo documento.txt. note que somente quem tem
permissão pode executar este comando (root ou dono do arquivo).

2) chmod 610 documento.txt - define permissão de leitura e gravação ao dono (4+2 =


rw), execução para o grupo (1=x), e nenhuma permissão para qualquer outro usuário
(zero). Importante notar que difere do exemplo anterior, pois na notação textual as
permissões podem ser "adicionadas" às atuais, enquanto que na notação octal, o
comando define a permissão do arquivo.

3) chmod +x binário.sh - concede permissão de execução (+x) de binário.sh para todos


os usuários do sistema (caso não seja especificado o usuário, a permissão é
concedida/retirada de todos - equivalente ao parâmetro a+x.

4) chmod -reference=documento.txt documento2.txt - aplica as mesmas permissões


de documento.txt para documento2.txt.

5) chmod -R ug=rw,o=r testes/ - concede permissão de leitura e gravação ao dono e ao


grupo, e permissão de leitura a outros, para o diretório testes e todos os arquivos ou sub-
diretórios contidos dentro dele.

6) chown - permite a alteração do dono e do grupo relacionado ao arquivo, ou arquivos


selecionados. Um usuário comum pode alterar o grupo de um arquivo caso seja membro
tanto do grupo de origem quanto do grupo de destino. Porém, por motivos de segurança,
apenas o super-usuário (root) pode alterar o dono de um arquivo.

Principais opções:

chown [novo_proprietário][:novo_grupo] arquivo/diretório


Permite que se altere recursivamente o
-R
proprietário e o grupo do(s) arquivo(s).
-- O arquivo usará o grupo configurado para o
reference=arquivo arquivo especificado.

Exemplos:

Altera o grupo de arquivo.txt para eduardo. Note que se o usuário não tiver permissões
suficientes, será mostrada uma mensagem de erro.

Altera o dono do arquivo arquivo2.txt para eduardo e o grupo para eduardo. Lembre-se
que apenas o superusuário (root) pode realizar esta alteração.
Modifica o grupo do diretório dados/ e de todos o seu conteúdo para eduardo.

chgrp
Altera apenas o grupo para os arquivos ou diretórios indicados. Um usuário comum
pode alterar o grupo de um arquivo caso ele pertença tanto ao grupo de origem como ao
grupo de destino. O super-usuário (root) pode alterar o grupo do arquivo para qualquer
grupo válido no sistema.

É equivalente ao comando "chown" somente com o parâmetro :grupo (ou seja, sem
modificar o dono do arquivo, somente o grupo).

Principais opções:

chgrp [ opções ] arquivo(s)


Permite que se altere recursivamente a
-R
propriedade de grupo de diretórios e seu conteúdo.
-- Permite que o comando use o grupo configurado
reference=arquivo para "arquivo" para configurar outros grupos.
Descreve detalhadamente a ação para cada arquivo
-c
cuja propriedade de grupo está sendo alterada.
-f Força a mudança de grupo, sem relatório de erros.

Exemplos:

1) chgrp coisas texto1 texto 2 imagens/ - modifica o grupo associado aos arquivos
texto1 texto2 e ao diretório imagens, associando-os ao grupo coisas. Note que o usuário
deverá ter as permissões suficientes para esta modificação, caso contrário será mostrada
uma mensagem de erro.

2) chgrp -R empregados comercial/ - modifica o grupo associado ao diretório


comercial e todos os seus arquivos e sub-diretórios, associando-os ao grupo
empregados.

Permissões padrão (umask)


Este comando define as permissões padrão dos arquivos que serão criados ou copiados
pelo usuário.

Sintaxe:

umask [ opções ] modo


Onde modo informa a máscara de criação que será fornecida ao usuário/grupo/outros.
Ele pode ser informado de duas maneiras:

1) como um número octal (022);


2) como uma máscara semelhante à utilizada pelo comando chmod (u=rwx,g=rx,o=rx).

Desta maneira, é possível controlar automaticamente as permissões dos arquivos que


são criados pelo usuário. O comando executado sem parâmetros exibe a máscara atual.

Permissões em diretórios
Para diretórios, as permissões possuem um significado ligeiramente diferente.

Para compreender mais facilmente os conceitos, basta imaginar um diretório como se


fosse "um arquivo que contem outros arquivos", pois na verdade um diretório é um
arquivo do tipo diretório.

Para confirmar isso, dê um comando:

# vi /home

no seu Linux que será aberta uma instância do editor de texto vi com o conteúdo do
arquivo do tipo diretório "/home", onde dentro dele estarão listadas as opções deste
diretório e também o nome de seus arquivos e sub-diretórios.

Permissão Em arquivo Em Diretório


Permissão para Permissão para visualizar o
visualizar o conteúdodo diretório (ou seja, listar
Leitura
conteúdo do seu conteúdo, utilizando um
arquivo. comando como o ls).
Permissão para Permissão para alterar o conteúdo do
Escrita alterar o conteúdo diretório (ou seja, criar ou remover
do arquivo. arquivos nele contidos).
Permissão para acessar o diretório
permissão para
Execução (através do comando cd, por
executar o arquivo.
exemplo).

Exemplos:

1) um diretório que tenha permissão 755, permite que seu dono faça qualquer alteração,
mas outros usuários podem apenas acessá-lo e ler seu conteúdo. Nesse modo, cada
arquivo contido no diretório fica protegido por sua própria permissão. É o modo mais
comum.

2) um diretório com permissão 710 tem como característica interessando permitir que
usuários do grupo a quem ele pertence acessem arquivos em seu interior, mas desde que
saibam seu nome, uma vez que a listagem do conteúdo não é permitida.

3) um diretório com permissões 744 permite que outros listem seu conteúdo, mas não
acessem os arquivos. Nesse modo, muito pouco utilizado, apenas os nomes dos arquivos
estão disponíveis.

Diretórios têm suas permissões alteradas da mesma forma que arquivos, utilizando o
comando chmod.

Permissões especiais
Existem algumas permissões especiais de arquivos/diretórios que oferecem
funcionalidades além das simples permissões de acesso. Os mais importantes cenários
de utilização estão a seguir.

SUID
O bit SUID é utilizado em arquivos executáveis quando se deseja que o programa seja
executado com os privilégios de seu usuário dono.

Isso é útil em situações onde um programa precise acessar determinado recurso, mas os
usuários que o utilizam não o possam fazer diretamente.

Embora a utilidade do bit SUID seja questionável, seu uso deve ser feito com muito
cuidado, pois um problema em sua configuração pode ter conseqüências sérias de
segurança (especialmente se o SUID for para o usuário root).

O bit SUID é representado textualmente por u+s. Por exemplo: $ chmod u+s
arquivo_executável.

Em octal é o número 4, mas utilizado antes das permissões de dono/grupo/outros.


Exemplo:

$ chmod 4755 arquivo_executável

SGID
O bit SGID tem a mesma função do bit SUID, mas é aplicado ao grupo, ou seja, o
programa é executado com os privilégios do grupo a que pertence.

A representação textual do bit SGID é g+s; em forma octal é utilizado o número2,


também utilizado antes das permissões de dono/grupo/outros. Exemplos:

$ chmod g+s arquivo_executável


e
$ chmod 2755 arquivo_executável

O bit SGID também pode ser utilizado em diretórios. Nesse caso, todos os arquivos
criados dentro deste terão como grupo dono o mesmo grupo a que o diretório pertence.

Stick Bit
O stick bit é utilizado em diretórios compartilhados entre vários usuários, em
combinação com permissões de escrita para estes, onde seja desejável que usuários não
acessem os arquivos por outros criados.

Em outras palavras, um diretório com stick bit ativado permite que qualquer usuário
crie arquivos, mas os outros usuários não poderão removê-los. Um exemplo do uso do
stick bit é o diretório /tmp.

A representação textual do stick bit é através do +t e em formato octal é através do


número 1, antes das permissões de dono/grupo/outros. Exemplos genéricos:

$ chmod +t diretório_compartilhado
e
$ chmod 1777 diretório_compartilhado

Conclusão
Espero que este artigo tenha sido esclarecedor na questão de permissões de
arquivos e diretórios, uma vez que saber setar corretamente estas opções é parte
indispensável para a segurança de uma sistema.

Abaixo, algumas dicas:

A umask pode ser de grande utilidade para programas que criam arquivos/diretórios
temporários, pois desta forma, pode-se bloquear o acesso de outros usuários e a criação
de arquivos, sem precisar recorre ao chmod.

Modifique a umask somente se necessário. É preciso atenção antes de escolher a umask,


pois um valor mal escolhido poderá causar problemas de acesso a arquivos, diretórios
ou programas não sendo executados.

Por padrão, quando um usuário é criado, é criado um grupo com o mesmo dome de
usuário. É possível visualizar estar informações com o comando "id".

O comando chmod não permite a mudança das permissões de links simbólicos, ou seja,
as permissões devem ser mudadas no arquivo alvo do link.
É possível copiar permissões de acesso do arquivo diretamente. Por exemplo: se o
usuário digitar chmod o=u, as permissões de acesso dos outros usuários (o) serão
idênticas ao do dono (u).

Abraços.