quinta-feira, 10 de setembro de 2009

Permissões de acesso a arquivos e diretórios

A permissão de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas não autorizados.

Donos, grupos e outros usuários

O princípio da segurança no sistema de arquivos do Linux é definir o acesso aos arquivos por donos, grupos e outros usuários.

O Dono é a pessoa que criou o arquivo ou o diretório. O nome do dono do arquivo/diretório é o mesmo do usuário usado para entrar no sistema. Somente o dono pode modificar as permissões de acesso do arquivo. As permissões de acesso do dono de um arquivo somente se aplicam ao dono do arquivo/diretório. A identificação do dono também é chamada de user id (UID).

A identificação de usuário e o nome do grupo que pertence são armazenadas respectivamente nos arquivos /etc/passwd e /etc/group.

Estes são arquivos textos comuns e podem ser editados em qualquer editor de texto, mas tenha cuidado para não modificar o campo que contém a senha do usuário encriptada (que pode estar armazenada neste arquivo caso não estiver usando senhas ocultas).

O grupo serve para permitir que vários usuários diferentes tenham acesso a um mesmo arquivo (já que somente o dono poderia ter acesso ao arquivo).

Outros é a categoria de usuários que não são donos ou não pertencem ao grupo do arquivo.

Um usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono).

Permissões de acesso a arquivos e diretórios

Cada um dos tipos acima possuem três tipos básicos de permissões de acesso:

  • r - Permissão de leitura para arquivos. Caso for um diretório, permite listar seu conteúdo (através do comando ls, por exemplo).
  • w - Permissão de gravação para arquivos. Caso for um diretório, permite a gravação de arquivos ou outros diretórios dentro dele. Para que um arquivo/diretório possa ser apagado, é necessário o acesso a gravação.
  • x - Permite executar um arquivo (caso seja um programa executável). Caso seja um diretório, permite que seja acessado através do comando cd.

As permissões de acesso a um arquivo/diretório podem ser visualizadas com o uso do comando ls -la.

As 3 letras (rwx) são agrupadas da seguinte forma:

-rwxrwxrwx gleydson users teste

A seguir uma explicação das 10 letras da esquerda para a direita:

A primeira letra diz qual é o tipo do arquivo. Caso tiver um “d” é um diretório, um “l” um link a um arquivo no sistema (veja ‘ln’ on page 70 para detalhes) , um “-” quer dizer que é um arquivo comum, etc.

  • O primeiro grupo(rwx) refere-se a permissão de acesso ao dono do arquivo.
  • O segundo grupo(rwx) refere-se as permissões de acesso ao grupo do arquivo.
  • O terceiro grupo(rwx) diz qual é a permissão de acesso para os outros usuários.
  • gleydson é o dono do arquivo.
  • users é o grupo do arquivo.
  • e teste é o nome do arquivo


OBSERVAÇÕES:

Para listar os arquivos, permissões e respectivos grupo e dono use o comando ls -la

O usuário root não tem nenhuma restrição de acesso ao sistema.

Se você tem permissões de gravação no diretório e tentar apagar um arquivo que você não tem permissão de gravação, o sistema perguntará se você confirma a exclusão do arquivo apesar do modo leitura. Caso você tenha permissões de gravação no arquivo, o arquivo será apagado por padrão sem mostrar nenhuma mensagem de erro (a não ser que seja especificada a opção -i com o comando rm).

Por outro lado, mesmo que você tenha permissões de gravação em um arquivo mas não tenha permissões de gravação em um diretório, a exclusão do arquivo será negada.

Isto mostra que é levado mais em consideração a permissão de acesso do diretório do que as permissões dos arquivos e sub-diretórios que ele contém. Este ponto é muitas vezes ignorado por muitas pessoas e expõem seu sistema a riscos de segurança. Imagine o problema que algum usuário que não tenha permissão de gravação em um arquivo mas que a tenha no diretório pode causar em um sistema mal administrado.


Comandos chmod,chgrp,chown e unmask


chmod (muda a permissão de acesso)

Muda a permissão de acesso a um arquivo ou diretório. Com este comando você pode escolher se usuário ou grupo terá permissões para ler, gravar, executar um arquivo ou arquivos. Sempre que um arquivo é criado, seu dono é o usuário que o criou e seu grupo é o grupo do usuário.


chmod [opções] [permissões] [diretório/arquivo]

Onde:

diretório/arquivo Diretório ou arquivo que terá sua permissão mudada.

opções

-v, –verbose Mostra todos os arquivos que estão sendo processados.

-f, –silent Não mostra a maior parte das mensagens de erro.

-c, –change Semelhante a opção -v, mas só mostra os arquivos que tiveram as permissões alteradas.

-R, –recursive Muda permissões de acesso do diretório/arquivo no diretório atual e subdiretórios.

ugoa+-=rwxXst • ugoa - Controla que nível de acesso será mudado. Especificam, em ordem, usuário (u), grupo (g), outros (o), todos (a).

• +-= - + coloca a permissão, - retira a permissão do arquivo e  define a permissão exatamente como especificado.

• rwx - r permissão de leitura do arquivo. w permissão de gravação. x permissão de execução (ou acesso a diretórios).

chmod não muda permissões de links simbólicos, as permissões devem ser mudadas no arquivo alvo do link.

Exemplos de permissões de acesso:

  • chmod g+r * Permite que todos os usuários que pertençam ao grupo dos arquivos (g) tenham (+) permissões de leitura (r) em todos os arquivos do diretório atual.
  • chmod o-r teste.txt Retira (-) a permissão de leitura (r) do arquivo teste.txt para os outros usuários (usuários que não são donos e não pertencem ao grupo do arquivo. teste.txt.
  • chmod uo+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono e outros usuários do arquivo.
  • chmod a+x teste.txt Inclui (+) a permissão de execução do arquivo teste.txt para o dono, grupo e outros usuários.


chgrp (muda o grupo)

Muda o grupo de um arquivo/diretório.

chgrp [opções] [grupo] [arquivo/diretório]

Onde:

  • grupo Novo grupo do arquivo/diretório.
  • arquivo/diretório Arquivo/diretório que terá o grupo alterado.

opções

-c, –changes Somente mostra os arquivos/grupos que forem alterados.

-f, –silent Não mostra mensagens de erro para arquivos/diretórios que não puderam ser alterados.

-v, –verbose Mostra todas as mensagens e arquivos sendo modificados.

-R, –recursive Altera os grupos de arquivos/sub-diretórios do diretório atual.



chown (muda o dono)

Muda dono de um arquivo/diretório. Opcionalmente pode também ser usado para mudar o grupo.

chown [opções] [dono.grupo] [diretório/arquivo]

onde:

  • dono.grupo Nome do dono.grupo que será atribuído ao diretório/arquivo. O grupo é opcional.
  • diretório/arquivo Diretório/arquivo que o dono.grupo será modificado.

opções

-v, –verbose Mostra os arquivos enquanto são alterados.

-f, –supress Não mostra mensagens de erro durante a execução do programa.

-c, –changes Mostra somente arquivos que forem alterados.

-R, –recursive Altera dono e grupo de arquivos no diretório atual e sub-diretórios.



O dono.grupo pode ser especificado usando o nome de grupo ou o código numérico correspondente ao grupo (GID).

Você deve ter permissões de gravação no diretório/arquivo para alterar seu dono/grupo.

Exemplos:

  • chown joao teste.txt - Muda o dono do arquivo teste.txt para joao.
  • chown joao.users teste.txt - Muda o dono do arquivo teste.txt para joao e seu grupo para users.
  • chown -R joao.users * - Muda o dono/grupo dos arquivos do diretório atual e subdiretórios para joao/users (desde que você tenha permissões de gravação no diretórios e sub-diretórios).



Modo de permissão octal

Ao invés de utilizar os modos de permissão +r, -r, etc, pode ser usado o modo octal para se alterar a permissão de acesso a um arquivo. O modo octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.

É mais flexível gerenciar permissões de acesso usando o modo octal ao invés do comum, pois você especifica diretamente a permissão do dono, grupo, outros ao invés de gerenciar as permissões de cada um separadamente.

O uso de um deste números define a permissão de acesso do dono, grupo ou outros usuários. Um modo fácil de entender como as permissões de acesso octais funcionam, é através da seguinte tabela:

  • 0 = Nenhuma permissão de acesso
  • 1 = Executar
  • 2 = Gravar
  • 4 = Ler
Para Dono e Grupo, multiplique as permissões acima por x100 e x10.

Basta agora fazer o seguinte:

  • Somente permissão de execução, use 1.
  • Somente a permissão de leitura, use 4.
  • Somente permissão de gravação, use 2.
  • Permissão de leitura/gravação, use 6 (equivale a 2+4 / Gravar+Ler).
  • Permissão de leitura/execução, use 5 (equivale a 1+4 / Executar+Ler).
  • Permissão de execução/gravação, use 3 (equivale a 1+2 / Executar+Gravar).
  • Permissão de leitura/gravação/execução, use 7 (equivale a 1+2+4 / Executar+Gravar+Ler).

Exemplos: chmod ogd

"chmod 764 teste"

Os números são interpretados da direita para a esquerda como permissão de acesso aos outros usuários (4), grupo (6), e dono (7). O exemplo acima faz os outros usuários (4) terem acesso somente leitura (r) ao arquivo teste, o grupo (6) ter a permissão de leitura e gravação (w), e o dono (7) ter permissão de leitura, gravação e execução (rwx) ao arquivo teste.

"chmod 40 teste"

O exemplo acima define a permissão de acesso dos outros usuários (0) como nenhuma, e define a permissão de acesso do grupo (4) como somente leitura (r). Note usei somente dois números e então a permissão de acesso do dono do arquivo não é modificada.

"chmod 751 teste"

O exemplo acima define a permissão de acesso dos outros usuários (1) para somente execução (x), o acesso do grupo (5) como leitura e execução (rx) e o acesso do dono (7) como leitura, gravação e execução (rwx).

Umask

A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado. Digite umask sem parâmetros para retornar o valor de sua umask atual.

A umask tem efeitos diferentes caso o arquivo que estiver sendo criado for binário (um programa executável) ou texto (‘Arquivo texto e binário’ on page 23) .

Um arquivo texto criado com o comando umask 012;touch texto.txt receberá as permissões -rw-rw-r--, pois 0 (dono) terá permissões rw-, 1 (grupo), terá permissões rwe 2 (outros usuários) terão permissões r--. Um arquivo binário copiado com o comando umask 012;cp /bin/ls /tmp/ls receberá as permissões -r-xr--r-x

Por este motivo é preciso um pouco de atenção antes de escolher a umask, um valor mal escolhido poderia causar problemas de acesso a arquivos, diretórios ou programas não sendo executados. O valor padrão da umask na maioria das distribuições atuais é 022. A umask padrão no sistema Debian é a 022 .

A umask é de grande utilidade para programas que criam arquivos/diretórios temporários, desta forma pode-se bloquear o acesso de outros usuários desde a criação do arquivo, evitando recorrer ao chmod.

Aqui listamos os comandos relativo a permissionamento de arquivos no Linux no próximo post falaremos sobre os comandos relacionados a processos.

Um abraço!

Nenhum comentário: