Os direitos de acesso
Prefácio
O uso por utilizadores, grupos ou outros bem como as permissões acordadas depende de cada configuração, da stratégia de funcionamento estipulada pelo adiministrador de seu sistema e de suas necessidades.
Neste artigo você encontrará uma breve apresentação dos direitos que o sistema GNU/Linnux utiliza bem como os comandos que o utilzador pode acionar.
Eu agradeço
jipicy pela disponibilidade e paciência na correção linguística e algumas correções de ordem técnica.
I. Generalidades
Sob o sistema GNU/Linux tudo é arquivo, incluindo os arquivos especiais que designam os periféricos. Linux divide os arquivos em diversas categorias :
- Os repertórios
- Os arquivos ordinários, (programas, arquivos de configuração, arquivos de dados, etc…)
- Os arquivos especiais (tipo bloco ou caráter)
O sistema do arquivo sob GNU/Linux é organizado em uma arborecência, sem a necessidade de mencionar o nome do disco ou da partição para ter acesso.
II. Os direitos
No sistema GNU/Linux, atribui-se direitos para três identidades à todos os arquivos :
- O proprietário – é o utilizador que criou o arquivo ou utilizador que root designou como proprietário.
- O grupo (que não é necessariamente o grupo do proprietário)
- Os outros (que não fazem parte do grupo)
O comando
ls -l nos permite afixar os direitos de um arquivo sob GNU/Linux.
Para cada identidade (veja acima), existe 3 direitos de aceso :
- r - read (o direito de leitura)
- w - write (o direito de escrita)
- x - execute (o dieito de executar)
A afixagem dos direitos é representada por uma cadeia (corrente) de
9 caráteres, precedida de um caráter, representando um tipo de arquivo.
Estes 9 caráteres, reagrupados 3 por 3 (rwx rwx rwx), definem os direitos das três identidades (proprietário, grupo e os outros).
Para cada direito existente tem uma letra r,w ou x (veja acima) e se um direito não existir utiliza-se o hífen (sem confundir com o primeiro hífen que signifia – um arquivo regular).
Significação Símbolo Proprietário Grupo Outros
______________________________________________________________________
Arquivo regular -
repertório d
periférico caráter c
periférico bloco b r w x r w x r w x
link simbólico l
tubo nomeado p
socket local s
______________________________________________________________________
Exemplo :
-rwxr-x---
O que significa :
- que trata-se de um arquivo regular (o primeiro caráter é um hífen -)
- que o proprietário tem todos os direitos (ReadWriteExecute então lerEscreverExecutar)
- que os membros do grupo tem os direitos de Ler (o 1° caráter é r) e Executar (o 3° caráter é x), mas eles não tem o direito de Escrever (o 2° caráter é um hífen -)
- que os outros não tem nenhum direito, nem de escrever, nem de ler, nem de execução (os três são caráteres hífens -)
III.Os direitos especiaias
1. O Sticky bit
O Sticky bit é um direito cujo comportamento é diferente para os arquivos executáveis e para os repertórios.
Ele corresponde à letra
t ou à número até
1000.
Se os direitos de execução não são posicionados é a letra
T que corresponde.
- os arquivos executáveis – o programa ficará na memória para execução posterior.
- os repertórios – sticky bit é posicionado em um repertório, somente o proprietário poderá suprimir os arquivos (é o caso dos repertórios /tmp e /var/tmp sob GNU/Linux)
Exemplo :
$ ls -l / | grep tmp;ls -l /var | grep tmp
drwxrwxrwt 12 root root 1024 2006-07-22 14:18 tmp
drwxrwxrwt 4 root root 4096 2006-07-22 10:23 tmp
2 a afixagem dos direitos para
/tmp et
/var/tmp.
Note-se que o último caráter na suite dos 9 para os direitos é um t e não um x ou um hífen
2.Os direitos de endossamento
SetUID et
SetGID
Os direitos de endossamento no GNU/Linux são representados pela :
- letra s (se o direito x está posicionado)
- letra S (se o direito x não está pocisionado)
Numericamente, os direitos são representados da seguinte maneira :
- 4000 – para o endossamento da idenidade do proprietário
- 2000 – para o endossamento da identidade do grupo
O comportamento dos direitos de endossamento.
- Para os arquivos programa ou executável
- SUID = 4000 – o processo tem os direitos do proprietário do programa executado
- SGID = 2000 - O processo tem os direitos do grupo do programa executado
- Para os repertórios
- SGID = 2000 – Os arquivos que se encontram no repertório pertencem ao grupo do repertório.
Os direitos de endossamento são muito importantes para a segurança.
Ao invés de dar o acesso à um arquivo, dá-se o direito de acesso a um comando.
O kernel (ou nódulo), no momento da execução do comando endossa a identidade do proprietário ou do grupo do comando ao invés daquela do utilizador que lançou o comando.
Então o acesso ao arquivo se faz via o comando e não diretamente.
Quando um utilizador se conecta em um sistema, ele detém 2 UID (UserIDentity) e 2 GID (GroupIDentity) : o real e o efetivo.
- No momento da execução de um comando os UID e GID são os reais, os efetivos são atribuidos por pedido.
- Os direitos de endossamento não estão posicionados, então os UID e GID efetivos são idênticos aos UID e GID reais.
- Se os direitos de endossamento são posicionados então o UID e/ou GID efetivos são aqueles do comando. O que quer dizer que, os UID e GID efetivos são aqueles que controlam os direitos de acesso a um comando.
Para conhecer os arquivos com os direitos de endossamento de seu sistema digite em um terminal o seguinte:
# find / -perm -2000 -o -perm -4000 -exec ls -l {} \; 2>/dev/nullUm bom exemplo é o comando
crontab. Este comando cria um arquivo no /var/spool/cron/crontabs para o utilizador que executa o comando crontab. O acesso ao repertório /var/spool/cront/crontabs é proibido aos utilizadores salvo ao root .
$ cd /var/spool/cron/crontabs/
bash: cd: /var/spool/cron/crontabs/: Permissão recusada
Quando o utilizador lança o comando
crontab -e ( arquivo para editar /var/spool/cron/crontabs/nom_user), o comando não se executa com o UID e GID real do utilizador mas com o UID e GID afetivo do root.
$ ls -l /usr/bin/crontab
-rwxr-sr-x 1 root crontab 26872 2004-07-28 22:44 /usr/bin/crontab
Vê-se que o comando crontab é a propriedade do root e que ela faz parte do grupo crontab com o direito SGID.
E como root tem o direito de criar no /var/spool/cron/crontabs o arquivo será criado.
# ls -l /var/spool/cron/crontabs/lami20j
-rw------- 1 lami20j crontab 225 2006-07-22 16:00 /var/spool/cron/crontabs/lami20j
Vê-se que o utilizador lami20j é o proprietário do arquivo e tem direitos de leitura e de escrita. Entretanto seria bom não fazê-lo diretamente.
IV. Os comandos
1. chmod
O comando
chmod (CHangeMODe) permite definir e de mudar os direitos de acesso de um arquivo ou um conjunto de arquivos.
Entre os opções do comando chmod (que não são muitos ) vou citar somente dois :
- v para verbose (afixagem na saída standard STDOUT do resultado do comando)
- R tratar os repertórios de maneira recursiva (aplicação do comando da arborecência inteira do repertório em questão)
Existem modos de utilização do comando chmod :
- de maneira literal
- de maneira numérica
A maneira literal
Se você leu atentivamente até aqui, então você deveria adivinhar a maneira literal.
Trata-se da utilização das letras que você já conhece, r, w e x para especificar os direitos desejados.
A novidade é que vai-se trabalhar também com as letras para designar as identidades que nós falamos acima : o proprietário, o grupo e os outros.
chmod utiliza a notação seguinte :
- u – para o proprietário (user)
- g – para o grupo (group)
- o – para os outros (other)
- a – para todos (all)
Uma outra notação será utilizada para atribuir e/ou retirar direitos.
- + (mais) Para atribuir
- - (menos) para retirar
- = (igual) para fixar o acesso exato
Eis um pequeno esquema de construção para chmod
identidade Operador Tipo acesso
_____________________________________
u + r
chmod g - w
o = x
a
_____________________________________
Nós não poderemos imaginar todas as combinações possíveis, mesmo se isto pareça realizável visto o número pouco importante de operadores e dos direitos. O que explica as coisas, é antes o número de utilizadores, o número de arquivos e sua repartição no (s)disco(s) e não porque conhecemos o número, etc.
Por outro lado algumas regras ajudarão se você se decidir por utilizar o comando chmod.
- diversas identidades e tipos de acesso podem ser utilizados.
Ex:
chmod go-wx arquivopara os membros do grupo (g) e os outros (o)retira-se (-) os direitos de escrita (r) e de execução (x).
diversos conjuntos de operadores e tipos de acesso podem ser utilizados.
*
*
*
- Ex : chmod o+r-w arquivo atribui-se o direito de leitura (r) mas retira-se o direito de escrita (w) para os outros (o).
- As cadeias podem ser combinadas separando-sa por vírgulas.
- Ex : chmod u+x,og-w arquivo atribui-se (+) o direito de execução (x) para o proprietário (u) e retira-se (-) os direitos de escrita para os membros do grupo (g) e os outros (o). Atenção!Não tem espaço entre as cadeias separadas por vírgulas.
- para aplicar o comando chmod em um repertório e seu conteúdo (sub-repertórios, arquivos) utiliza-se o comandochmod -R direitos Repertório
Dicas :
- Quando a identidade é omitida, o valor a (todos) que será utilizado.
- o tipo de acesso pode ser omitido se o sinal igual (=) é utilizado para suprimir todos os acessos.
A maneira numérica Proprietário Grupo Outros
__________________________________________________________________
LeituraEscritaExe LeituraEscritaExe LeituraEscritaExe
__________________________________________________________________
400 200 100 40 20 10 4 2 1
Para comprender a utilização do chmod com a maneira numérica um exemplo será esclarecedor.
Exemplo : nós queremos estabelecar para um arquivo os seguintes direitos :
- proprietário
Leitura = escrita = execução = 400 + 200 +100 =
700
- grupo
Leitura + execução = 40 + 10 =
50
- Os outros
Leitura = execução = 4 + 1 =
5
Ao todo temos 700 + 50 + 5 =
755
Agora nós vamos utilizar o resultado obtido com chmod.
chmod -v 0755 arquivo
ou
chmod 0755 arquivo mas neste caso o resultado do comando não é afixado na saída standard
Pode-se escrever simplesmente
chmod 755 arquivo
Eis aqui um pequeno assistente para calcular os direitos em octal
fr.selfhtml.org/petitsassistants/chmod.htm
Assim, o princípio não é complicado. Estabelece-se os direitos desejados para cada identidade e faz-se a adição. Para o resto o chmod se encarrega.
Nós vimos assim a maneira numérica de utilizar o comando chmod, eu suponho que você tenha encontrado a resposta para uma questão que pode passar pela sua cabeça
Trata-se da atribuição dos direitos de endossamento dos direitos.
SUID SGID Sticky bit
__________________________
4000 2000 1000
__________________________
Para juntar um direito de endossamento, além dos direitos habituais, você deve inserir no cálculo o ou os direitos de endossamento que você neccessitaria.
Tomemos o caso precedente 700 + 50 + 5 =
755.
Para agregar o direito de endossamento do grupo escreve-se 2000 + 700 + 50 + 5 =
2755
Lembrete! Trata-se dos direitos para um comando, o que quer dizer que o direito de execução deve ser pocisionado.
Um idéia poderia ser a de antes registrar os direitos existentes em um arquivo com ls -l ou ls -Rl e em seguida criar um scrip para este arquivo, mas isto complicaria as coisas e à bem da verdade eu nunca necessitei fazê-lo.
Uma outra idéia, seria a de salvar com tar para em seguida, no caso em que você perdesse seus direitos, voltar para a configuração de origem.
Em consequência antes de modificar os direito em um arquivo ou uma arborecência dê uma olhadela antes nos direitos já existentes.
2. umask
O comando umask permite definir os direitos por padrão de um arquivo ou repertório na sua criação. Ou indicar os direitos a retirar no momento de sua criação.
O comando umask, ao contrário do comando chmod (maneira numérica) tem como argumento 3 números, que desta vez representam os direitos que não queremos dar.
$ umask 0022 arquivo
A saber que a duraçõa de vida do comando umsk é limitada à sessão shell em andamento.
Para uma duração permanente ver os arquivos de configuração de seu shell. Para o shell bash pode-se utilizar o arquivo ~/.bashrc
Pessoalmente eu não utilizei o comando umask. Fiz somente pequenos testes com o objetivo de comprensão do comando chmod.
A comprensão dos direitos para os arquivos em um sistema GNU/Linux é fortemente ligada à gestão dos utilizadores e grupos.
Além dos direitos que nós vimos acima, em um sistema GNU/Linux encontra-se também ACLs (Access Control List) que permitem dar direitos suplementares que nós detalharemos em um outro thread. O [/faq/sujet-3773-securite-les-access-control-lists-acls securite les access control lists acls)
Artigo
original publicado por
Lami20j