[segurança] Direitos de acesso GNU/Linux

última modificação em 22 de Julho de 2009 às 07:59 por ninha25
Publicado por ninha25

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/null
Um 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.
    • chmod -R +w repertório
  • o tipo de acesso pode ser omitido se o sinal igual (=) é utilizado para suprimir todos os acessos.
    • chmod o= arquivo


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
Melhores respostas por « Direitos de acesso GNU/Linux » em :
Escolher uma distribuição Linux Ver Escolher sua distribuição GNU/Linux não é nada evidente sobretudo para inciantes neste assunto. Esta dica não tem por oobjetivo promover uma distribuição em detrimento de outras. É antes uma lista de soluções classificadas por tipo. Certas...
[Bash] A variável de ambiente PATH Ver A variável de ambiente PATH I. Perâmbulo II. O que é o Shell ? III. Definição IV. Sessão de dissecação V. Acrescentar um repertório na variável PATH VI. E depois… I. Perâmbulo Com o GNU/Linux querendo ou não, nós somos...
[MD5Sum] Verificar a integridade do download VerSoma MD5 Introdução I - Windows I-1 - Para os puristas da linha de comando (sob "Dos") I-2 – Para os incondicionais da interface gráfica "GUI" mst MD5 WinMD5 winMd5Sum II - GNU/LInux II-1 –Em um console II- 2- Para os alérgicos da...
Gestionário de janelas X11 VerGestionário de janelas *AfterStep *Blackbox *FluxBox *FVWM *IceWM (Ice Window Manager) *Metacity *OpenBox *Window Maker *Em rede Ao contrário de certas soluções proprietárias(Windows e Mac), GNU/Linux oferece nativamente...
[BSD] Partições e Fatias - noções VerNoções de partições e fatias de discos rígidos 1 - As partições no Windows e GNU/Linux 2 – As partições nos sistemas BSD 3 - Salvar uma fatia BSD Os sistemas operacionais do Windows e do Linux veem as partições de maneira bem...
Download Audacity para Windows VerAudacity á um editor e gravador de arquivos audio, multi línguae e multi plataformas: Windows, MacOS X, GNU/Linux entre outros sistemas menos usuais. Funções habituais e ja definitivas nesta versão Gravação ao vivo Converte cópias e gravações...
Comandos Linux VerQuadro dos principais comandos Linux Comando Descrição equivalente DOSlslista o conteúdo de um directóriodircdmuda de directóriocdcd ..directório parentecd..mkdircria um novo directóriomdrmdirsuprime um directóriodeltreecpcópia de...
Linux - o editor Vi VerIntrodução ao Vi O VI é um dos editores de texto mais populares nos sistemas de tipo Unix (com Emacs e Pico) apesar da sua ergonomia muito limitada. Sob Linux, existe uma versão livre de Vi chamada Vim (VI Improved). VI (pronuncia-se...
Linux -Compilação do núcleo (Kernel)) VerCompilação do Kernel Este artigo tem para objectivo apresentar a compilação do núcleo (ou kernel) sob Linux. As explicações seguintes são baseadas na versão 2.4.20 do kernel, o último em data ao momento da escrita do artigo (maro...