Permissões linux

13
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

Transcript of Permissões linux

Page 1: Permissões linux

IntroduçãoCada 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ãoO 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ão1) 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ão1) 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).

Page 2: Permissões linux

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õesPara 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 TextualPara 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:

Page 3: Permissões linux

TextualNo 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.

OctalNo 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 gruposNesta seção, irei apresentar os principais comandos utilizados para modificar e visualiza as propriedades e permissões de arquivos e diretórios.

chmodPermite 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

Page 4: Permissões linux

permissões de arquivos e diretórios.

--reference=arquivo

Permite que um determinado arquivo seja modificado tomando como referência o 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.

oOutros usuários que não são donos e não estão cadastrados no 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

Page 5: Permissões linux

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

-RPermite que se altere recursivamente o proprietário e o grupo do(s) arquivo(s).

--reference=arquivo

O arquivo usará o grupo configurado para o 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.

Page 6: Permissões linux

Modifica o grupo do diretório dados/ e de todos o seu conteúdo para eduardo.

chgrpAltera 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)

-RPermite que se altere recursivamente a propriedade de grupo de diretórios e seu conteúdo.

--reference=arquivo

Permite que o comando use o grupo configurado para "arquivo" para configurar outros grupos.

-cDescreve detalhadamente a ação para cada arquivo cuja propriedade de grupo está sendo alterada.

-fForç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.

Page 7: Permissões linux

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óriosPara 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

Leitura

Permissão para visualizar o conteúdo do arquivo.

Permissão para visualizar o conteúdodo diretório (ou seja, listar seu conteúdo, utilizando um comando como o ls).

EscritaPermissão para alterar o conteúdo do arquivo.

Permissão para alterar o conteúdo do diretório (ou seja, criar ou remover arquivos nele contidos).

Execuçãopermissão para executar o arquivo.

Permissão para acessar o diretório (através do comando cd, por 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

Page 8: Permissões linux

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 especiaisExistem 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.

SUIDO 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

SGIDO 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,

Page 9: Permissões linux

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 BitO 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ãoEspero 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".

Page 10: Permissões linux

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.