cap13

Capítulo 13 - 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.

A permissão de acesso do GNU/Linux também impede que um programa mal intencionado, por exemplo, apague um arquivo que não deve, envie arquivos para outra pessoa ou forneça acesso da rede para que outros usuários invadam o sistema.

13.1) Entendendo

O princípio da segurança no sistema de arquivos GNU/Linux é definir o acesso aos arquivos por donos, grupos e outros usuários. No Linux, como em outros sitemas Unix, cada arquivo tem uma permissão. As permissões são atributos dos arquivos que especificarão se ele pode ser lido, executado e/ou escrito. Estas permissões vão definir o que um usuário pode fazer ou não.

13.1.1 Visualizando e entendendo as permissões

Observe o comando:

ls -l /tmp/pasta/

Que lista os seguintes arquivos dentro do diretório:

drwxrwxrwx 2 root root 1024 Dec 23 15:22 vazia-rwxrwxrwx 1 root root 262 Dec 31 05:48 teste.txt|\|/\|/\|/ | \------> Grupo a que pertence o arquivo.| | | |  \------> Dono do arquivo.| | | | | | | | | | | \------> Permissões referentes à todos os usuários (ou seja, todos os outros | | |   que não sejam: o dono do arquivo nem pertençam ao grupo do arquivo). | | | | | \------> Permissões referentes ao grupo do arquivo. | | | \------> Permissões referentes ao dono do arquivo. | |\------> Atributo do arquivo.  

No exemplo acima os arquivos tem como dono o usuário root, e os arquivos pertencendo ao grupo root.

13.1.2 Vamos dividir a coluna “Permissões” em 4 campos

1º Campo – (atributo):

Esse primeiro campo apresenta um dos seguintes caracteres:

-: indica ser um arquivo.

d: indica ser um diretório.

l: indica ser um link simbólico.

b: indica ser um dispositivos de bloco.

c: dispositivos de caractere.

s: indica ser um socket, atribuído para arquivos de comunicação e memória.

t: sticky bit.

2º Campo – (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 GNU/Linux. Somente o dono pode modificar as permissões de acesso do arquivo.

As permissões de acesso na coluna dono de um arquivo somente se aplicam ao dono do arquivo/diretório.

A identificação do dono é chamada de user id (UID).

A identificação de usuário é armazenada no arquivo /etc/passwd. Cada linha deste arquivo é um usuário cadastrado no sistema.

Obs.: 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 criptografada (que pode estar armazenada neste arquivo caso não estiver usando senhas ocultas).

3º Campo – (grupo)

O recurso grupo foi criado para permitir que vários usuários diferentes tivessem acesso a um mesmo arquivo. Cada 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).

Por padrão, quando um novo usuário é criado, seu grupo primário será o mesmo de seu login.

A identificação do grupo é chamada de group id (gid).

O nome do grupo cujo usuários pertencem são armazenadas no arquivo e /etc/group.

Obs.: Um usuário pode pertencer a um ou mais grupos.

4º Campo – (outros)

O quarto campo se refere às permissões para os outros usuários, ou seja, aquele que não é o dono e nem é um usuário pertencente ao grupo do arquivo.

13.2 Tipos de Permissões de acesso

Quanto aos tipos de permissões que se aplicam ao dono, grupo e outros usuários, temos 3 permissões básicas:

    • r (read) - Permissão de leitura para arquivos.

Caso seja um diretório, permite listar seu conteúdo (através do comando ls, por exemplo).

Caso seja um arquivo, permite mostrar seu conteúdo (através do comando cat, por exemplo).

    • w (write) - Permissão de gravação para arquivos.

Caso seja um diretório, permite a gravação de arquivos ou outros diretórios dentro dele (através do comando touch, por exemplo).

Caso seja um arquivo, permite alterar seu conteúdo (através do comando vim, por exemplo).

Obs.: Em se tratando de um diretório, a permissão de escrita implica a capacidade de criar, apagar ou renomear arquivos. Note que a permissão para remover um arquivo não é determinada pelas permissões do arquivo mas sim pelas permissões do diretório que o contém.

    • x (execute) - Permite executar um arquivo (caso seja um programa executável).

Caso seja um diretório, permite que seja acessado (através do comando cd, por exemplo).

Caso seja um arquivo, permite ser executado (através do comando gksu, por exemplo).

Obs.: Não permite mostrar o conteúdo nem alterá-lo.

Obs.: No caso de um diretório, a permissão de execução implica que os arquivos nele contido possam ser acessados.

Revisão: as 10 letras acima (da esquerda para a direita):

As permissões de acesso a um arquivo/diretório podem ser visualizadas com o uso do comando ls -l. As 3 letras (rwx) são agrupadas da seguinte forma:

-rwxrwxrwx gleydson users teste

    • 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, um "-" quer dizer que é um arquivo comum, etc.
    • Da segunda a quarta letra (rwx) significa qual é a permissão de acesso ao dono do arquivo. Neste caso gleydson tem a permissão de ler (r - read), gravar (w - write) e executar (x - execute) o arquivo teste.
    • Da quinta a sétima letra (rwx) diz qual é a permissão de acesso ao grupo do arquivo. Neste caso todos os usuários que pertençam ao grupo users tem a permissão de ler (r), gravar (w), e também executar (x) o arquivo teste.
    • Da oitava a décima letra (rwx) diz qual é a permissão de acesso para os outros usuários. Neste caso todos os usuários que não são donos do arquivo teste nem fazem parte do grupo users tem a permissão para ler (r), gravar (w) e executar (x) o programa.

13.3 Etapas para acesso a um arquivo/diretório

Para se ter acesso a um arquivo/diretório primeiramente é verificado qual a relação do usuário com o arquivo/diretório (se ele é o dono, pertence ao grupo, ou outros usuários), depois é verificado se ele terá permissão para o que deseja fazer (ler, gravar ou executar).

Exemplificando: Se o usuário que o acessará é o seu dono as permissões de dono do arquivo são aplicadas. Caso não seja o dono, é verificado se ele pertence ao grupo do arquivo/diretório, caso pertença, as permissões do grupo são aplicadas. Caso não pertença ao grupo correspondente, são verificadas as permissões de acesso para outros usuários que não são o dono e nem pertencem ao grupo correspondente ao arquivo/diretório. Caso não tenha a permissão o acesso é negado, mostrando uma mensagem do tipo: "Permission denied" (permissão negada).

O que isto quer dizer é que mesmo que você seja o dono do arquivo e definir o acesso do dono (através do comando chmod) como somente leitura (r) mas o acesso dos outros usuários como leitura e gravação, você somente poderá ler este arquivo mas os outros usuários poderão ler e grava-lo.

As permissões de acesso (leitura, gravação, execução) para donos, grupos e outros usuários são independentes, permitindo assim um nível de acesso diferenciado.

Lembre-se: Somente o dono pode modificar as permissões de um arquivo/diretório!

OBSERVAÇÕES:

    • O usuário root não tem nenhuma restrição de acesso ao sistema.
    • Mesmo que você tenha permissão de gravação em um arquivo mas não tenha permissão 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.

13.4 Permissões de Acesso Especiais

Em adição às três permissões básicas (rwx), existem permissões de acesso especiais (stX) que afetam arquivos executáveis e diretórios:

a) Bit setuid

É o bit “s” aplicado ao campo dono.

s ou S - aparece um s ou S no lugar da permissão x no campo dono.

Este bit não possui significado em arquivos não executáveis.

Pode ser atribuído assim:

chmod 4000 arquivo

ou

chmod u=s arquivo

ls -l

---S------ 1 rafael rafael 0 2007-05-25 03:13 arquivo

a.1) Se ativado em um arquivo: indica que todos os que executarem este programa o estarão fazendo com os privilégios do proprietário do arquivo. Por exemplo, o programa sendmail é setuid root, o que lhe permite gravar arquivos na fila de mensagens do sistema, o que é vedado a usuários normais.

a.2) Se ativado em um diretório: não tem efeito algum.

b) Bit setgid

É o bit “s” aplicado ao campo grupo.

s ou S - aparece um s ou S no lugar da permissão x no campo grupo.

Pode ser atribuído assim:

chmod 2000 arquivo

ou

chmod g=s arquivo

ls -l

------S--- 1 rafael rafael 0 2007-05-25 03:13 arquivo

b.1) Se ativado no campo grupo de um arquivo: indica que todos os que executarem este programa o estarão fazendo com os privilégios do grupo do arquivo.

b.2) Se ativado no campo grupo de um diretório: faz com que os arquivos criados dentro dele pertençam ao mesmo grupo do grupo do diretório, ao invés do grupo primário que o usuário pertence.

Obs.: Shell scripts que possuem os bits setuid ou setgid ligados não são seguros, não importa quantas precauções tenham sido tomadas ao escrevê-los. Tais scripts nunca devem ser permitidos em qualquer sistema Unix.

c) Bit sticky

É o bit “t” aplicado ao campo outros usuários.

t ou T - aparece um t ou T no lugar da permissão x no campo outros usuários.

Mesmo que o diretório possua modo permissão 777 tendo este bit ligado não podem ser removidos (/tmp por exemplo).

O bit sticky pode ser especificado somente no campo outros usuários das permissões de acesso.

Pode ser atribuído assim:

chmod 1000 arquivo

ou

chmod o=t arquivo

ls -l

---------T 1 rafael rafael 0 2007-05-25 03:13 arquivo

c.1) Se ativado no campo outros usuários de um arquivo: salva a imagem do texto do programa no dispositivo swap, assim ele será carregado mais rapidamente quando executado.

c.2) Se ativado no campo outros usuários de um diretório: impede que outros usuários removam ou movam arquivos dos quais não são donos. Isto é chamado de colocar o diretório em modo append-only. Um exemplo de diretório que se encaixa perfeitamente nesta condição é o /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários lá, mas nenhum pode apagar arquivos dos outros.

13.4.1 Estudo de caso - setuid/setgid

O arquivo “/etc/passwd” não pode ser editado por usuários comuns, porque desta forma a criação de contas ficaria aberta a todos. Este arquivo possui as seguintes permissões:

-rw-r--r-- 1 root root 1528 2007-06-11 14:46 /etc/passwd

O usuário root pode ler e gravar este arquivo. Os demais usuários podem apenas ler as informações nele contidas.

Os usuários comuns não podem criar entradas mas devem poder alterar suas senhas. Como resolver este impasse? Através de programas que possuam o bit setuid. O programa passwd por sua vez possui as seguintes permissões:

-rwsr-xr-x 1 root root 29104 2006-12-19 18:35 /usr/bin/passwd

O caracter "s" em "rws" significa que todos os que executam este programa o executam como o usuário proprietário do arquivo, neste caso, root.

Desta forma, quando um usuário digita "passwd" para trocar sua senha, ele vai conseguir gravar a nova senha no arquivo “/etc/passwd” independentemente do fato de que este arquivo não possui permissão universal de gravação.

Desta forma, pode-se imaginar o perigo que programas com o bit setuid ligado podem representar para o sistema. Muitos administradores de sistemas criam shell scripts e programas com o bit setuid ligado para desempenhar funções determinadas no sistema. A norma geral a ser seguida é criar o mínimo possível de programas com estas características, e caso realmente necessário, examinar e testar o código à exaustão para evitar possíveis erros que possam ser explorados por usuários mal intencionados.

Além disso tudo, o administrador de sistemas tem que controlar o número de programas que possuem o bit setuid ligado em seu sistema.

O comando

find / -type f -a \(-perm 0400 -o -perm 0200 \) -print

irá localizar todos os arquivos no sistema que possuam o setuid ou setgid bit ligados.

A listagem gerada deverá então ser cuidadosamente examinada para detectar possíveis anormalidades e para se tomar então as devidas providências.

13.5 A conta root

A conta root é também chamada de super usuário, este é um login que não possui restrições de segurança. A conta root somente deve ser usada para fazer a administração do sistema, e usada o menor tempo possível.

Qualquer senha que criar deverá conter de 6 a 8 caracteres (em sistemas usando crypto) ou até frases inteiras (caso esteja usando MD5, que garante maior segurança), e também poderá conter letras maiúsculas e minúsculas, e também caracteres de pontuação. Tenha um cuidado especial quando escolher sua senha root, porque ela é a conta mais poderosa. Evite palavras de dicionário ou o uso de qualquer outros dados pessoais que podem ser adivinhados.

Se qualquer um lhe pedir senha root, seja extremamente cuidadoso. Você normalmente nunca deve distribuir sua conta root, a não ser que esteja administrando um computador com mais de um administrador do sistema.

Utilize uma conta de usuário normal ao invés da conta root para operar seu sistema. Porque não usar a conta root? Bem, uma razão para evitar usar privilégios root é por causa da facilidade de se cometer danos irreparáveis como root. Outra razão é que você pode ser enganado e rodar um programa Cavalo de Tróia -- que é um programa que obtém poderes do super usuário para comprometer a segurança do seu sistema sem que você saiba.

13.6 chmod

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 sub-diretórios.

permissões (ugoa+-=rwxst)

u/g/o/a

Identifica o usuário: u usuário; g grupo; o outros; a todos.

+/-/=

Atribui a permissão: + adiciona permissão; - remove permissão; = iguala permissão.

r/w/x/s/t

Tipo de permissão: r leitura; w gravação; x execução; s bit setuid/setgid; t bit sticky.

chmod não muda permissões de links simbólicos, as permissões devem ser mudadas no arquivo alvo do link. Também podem ser usados códigos numéricos octais para a mudança das permissões de acesso a arquivos/diretórios.

DICA: É possível copiar permissões de acesso do arquivo/diretório, por exemplo, se o arquivo teste.txt tiver a permissão de acesso r-x------ e você digitar chmod o=u, as permissões de acesso dos outros usuários (o) serão idênticas ao do dono (u). Então a nova permissão de acesso do arquivo teste.txt será r-x---r-x

13.7 chgrp

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.

13.8 chown

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.

13.9 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. Abaixo a lista de permissões de acesso octal:

    • 0 - Nenhuma permissão de acesso. Equivalente a -rwx.
    • 1 - Permissão de execução (x).
    • 2 - Permissão de gravação (w).
    • 3 - Permissão de gravação e execução (wx).
    • 4 - Permissão de leitura (r).
    • 5 - Permissão de leitura e execução (rx).
    • 6 - Permissão de leitura e gravação (rw).
    • 7 - Permissão de leitura, gravação e execução. Equivalente a +rwx.

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:

1 = Executar

2 = Gravar

4 = Ler

* Para Dono e Grupo, multiplique as permissões acima por x100 e x10.

e para as permissões de acesso especiais:

1000 = Salva imagem do texto no dispositivo de troca

2000 = Ajusta o bit setgid na execução

4000 = Ajusta o bit setuid na execução

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).
    • Salvar texto no dispositivo de troca, use 1000.
    • Ajustar bit setgid, use 2000.
    • Ajustar bip setuid, use 4000.
    • Salvar texto e ajustar bit setuid, use 5000 (equivale a 1000+4000 / Salvar texto + bit setuid).
    • Ajustar bit setuid e setgid, use 6000 (equivale a 4000+2000 / setuid + setgid).

13.10 umask

A umask (user mask) é usada para determinar o padrão das permissões dos arquivos recentemente criados. Ela é representada por 4 dígitos octal 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. O valor padrão da umask na maioria das distribuições atuais é 0022. O primeiro, segundo terceiro e quarto algarismo representa as permissões referentes ao bit especial, ao dono, ao grupo e à outros, respectivamente.

O valor umask 0022 não significa que o arquivo em questão tenha sido criado com nenhuma permissão para o user e permissão de gravação para membros do grupo e outros, na verdade significa exatamente o contrário! Na verdade está eliminando a permissão de gravação do grupo e outros.

A umask funciona como um filtro, eliminando os valores das permissões que ela indicar. Ou seja, no caso do valor da umask igual 0022, faz “desligar” o bit de permissão de gravação do grupo e outros ao se criar um arquivo. Da mesma forma, se seu valor for 0000 nenhum valor da permissão será desligado ao se criar um arquivo.

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

Da mesma forma com que o comando chmod especifica quais bits devem ser ligados, o comando umask especifica quais bits devem ser desligados.

13.10.1 Efeito da umask em diretórios e arquivos

Veja este caso: ao trabalhar com máscara 007 com meus arquivos, por que alguns têm na realidade, valor 660 ao invés de 770? Simplesmente porque o Linux sabe que para alguns arquivos (como arquivos de texto, por exemplo) a permissão de execução não faz sentido. Assim, ele oculta esse permissão e dá ao arquivo com permissão 770 o valor 660, justamente porque não é necessário usar a permissão de execução.

O padrão das permissões para diretórios é 0777 (rwxrwxrwx) e para arquivos é 0666 (rw-rw-rw-). Pode-se verificar isso ao setar a umask do usuário para 0000, os diretórios criados terão permissão 777 e os arquivos 666.

Exemplificando:

umask 0000

mkdir pasta

ls -ld pasta

Que resulta: drwxrwxrwx 2 rafael rafael 48 2007-05-31 06:55 pasta

touch texto.txt

ls -ld texto.txt

Que resulta: -rw-rw-r-- 1 rafael rafael 0 2007-05-31 06:55 texto.txt

13.10.2 Como calcular a umask:

Lembre-se que o padrão das permissões para diretórios é 0777 (rwxrwxrwx) e para arquivos é 0666 (rw-rw-rw-).

Para setar a máscara do usuário (umask) é necessário pensar quais permissões desejo proibir. Digamos que eu queira que todos os diretórios e pasta que eu criar seja proibido que o grupo faça gravação e que outros leiam, grave e execute, assim a umask deve ser: 0027

a) Calcular a permissão de um diretório:

Permissão padrão de diretórios: 777

Subtraia o valor da umask: 022

Permissão dos diretórios criados: 755

b) Calcular a permissão de um arquivo:

Permissão padrão de arquivos: 666

Subtraia o valor da umask: 022

Permissão do arquivo criado: 644

13.10.3 Setando o valor padrão da umask

Em “/etc/bash.bashrc” ou “/etc/profile” é possível setar o valor padrão de todos os usuários.

Em “~/.bashrc” é possível setar o valor da umask padrão de um usuário específico.

Basta adicionar/alterar no final do arquivo conforme desejado, ex:

vim ~/.bashrc
umask 077

Salve e feche o arquivo. As mudanças terão efeito no próximo login.

fonte:

http://www.devin.com.br/

http://br-linux.org/

http://www.infowester.com/linuxpermissoes2.php

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

Manual de Instalação da Debian.

HOME - CURSO