Segurança - Os Access Control Lists (ACLs)

Novembro 2016


Ultrapassar os direitos de base de um sistema Linux utilizando os ACLs.

I. PRÉ-REQUISITOS


- Conhecimento de base do système GNU/Linux
- Instalação dos softwares
- Conhecer l'arborescence d'un système GNU/Linux
- Estar acostumado com a linha de comando (shell ou terminal ou console)
- Comandos de base
- Noções de direitos de acesso aos arquivos
- Gestão dos usuários de um sistema GNU/Linux
- Kernel linux

Veja também os atributos de arquivos (sobretudo a opção -i
Que nos lembra os direitos de acesso) Gestão dos atributos de arquivos no ext2

Ouf, tudo isto. Bem, então os ACLs não são feitos somente pelos gurus GNU/Linux?!
Não, não seja apressado para tirar conclusões.
Depois da leitura deste pequeno tutorial você será capaz de utilizar os ACLs.
No entanto o tutorial somente lhe ensinará como se pode utilizar os ACLs e algumas razões para utilizá-lo.

II. Introdução


Os ACLs oferecem a possibilidade de posicionar os direitos de acesso complementares.
O proprietário de um arquivo pode graças aos ACLs acordar privilégios para um ou mais usuários e/ou grupos que se substituirão aos direitos de acesso de base.

Com os ACLs é possível dar direitos para um usuário que não pertence ao grupo sem modificar os direitos dos outros.
Igualmente pode-se autorizar os direitos de acesso por um grupo de usuários que não é o grupo do arquivo.
Não existe limite no que se refere ao número de usuários ou grupos adicionados com os ACLs.

O backup com tar não memoriza os ACLs posicionados.

III. Definição


Um ACL é composto de várias <soulinha>entradas de tipo ACL</soulinha>. Uma entrada especifica as permissões de acesso para um objeto associado por um usuário ou grupo de usuários utilizando uma combinação dos direitos tradicionais r, w e x.
Quer dizer, uma entrada ACL é composta de um:
  • tag que precisa uma identidade de usuários
  • tag opcional de usuários ou grupos
  • a lista de permissões


Eu preferi usar o termo tag (nbo manual em inglês, man acl), mas se você quiser você pode ler baliza no lugar de tag.
Os tags definidos são os seguintes :
_________________________________________________________________________________    
ACL_USER_OBJ  | os direitos de acesso para o proprietário    
---------------------------------------------------------------------------------|    
ACL_USER      | os direitos de acesso para os users identificados pelo tag  opcional    
---------------------------------------------------------------------------------|    
ACL_GROUP_OBJ | os direitos de acesso para o grupo do arquivo    
---------------------------------------------------------------------------------|    
ACL_GROUP     | os direitos de acesso para o grupo identificado pelo tag    
---------------------------------------------------------------------------------|    
ACL_MASK      | os direitos máximos acordados ao ACL_USER, ACL_GROUP_OBJ, ACL_GROUP    
---------------------------------------------------------------------------------|    
ACL_OTHER     | os direitos de acesso que não correspondem à nenhuma entrada  = autros    
_________________________________________________________________________________|    

<soulinha>Algoritmo de busca dos ACLs</soulinha>

Se o UID efetivo do processo corresponde com o UID do proprietário ENTÃO      

  SE ACL_USER_OBJ contenham as permissões necessárias ENTÃO     
      O acesso é autorizado   

SENÃO     
   O acesso é proibido     
      FIM SE    
     

SENÃO     
Se o UID efetivo do processo corresponde com qualquer ACL_USER ENTÃO     

  SE ACL_USER et ACL_MASK contenham as permissões ENTÃO     
      O acesso é autorizado   

  SENÃO     

       
   O acesso é proibido     

      FIM SE    
    
SENÃO  SE o GID efetivo ou qualquer GID de processo corresponde ao GID do arquivo ou ACL_GROUP ENTÃO     

  SE ACL contem ACL_MASK ENTÃO     
        
    Se ACL_MASK e qualquer ACL_GROUP_OBJ ou ACL_GROUP contenham as permissões necessárias ENTÃO     
        O acesso é autorizado   

    SENÃO     

         
   O acesso é proibido     

        FIM SE    


SENÃO  <comment>neste nível ACL_GROUP não pode ser sem ACL_MASK</comment>     
    SI ACL_GROUP_OBJ contenham as permissões necessárias  ENTÃO     
        O acesso é autorizado   

    SENÃO     

      O acesso é proibido    
    FIM SE    

FIM SE    

SENÃO     
SI ACL_OTHER contenham as permissões necessárias ENTÃO     
  O acesso é autorizado   
SENÃO     
 O acesso é proibido    
FIM SE    

Eu lhe desejo uma boa compreensão. E, se você não compreender, isto não lhe impedirá de usar os ACLs. Muitas vezes a prática é bem mais clara que a teoria.
Por exemplo para resumir tudo isto, eis o que dá na prática :
[d[efault]]:tag:utilisateur|groupe:droits    

Para o tag utiliza-se :
u[ser], g[roup], o[ther], m[ask]

Quando o campo usuário |grupo está vazio, a entrada se aplica ao proprietário. Os arquivos criados no diretório que tem ACL com o tag padrão, detém o ACL d diretório.

<soulinha>Observação </soulinha>!

O que é limitado pelas chaves é opcional.
Quer dizer, a forma curta é permitida.

IV.Instalação do suporte para os ACLs

Verificação do suporte dos ACLs pelo kernel


O kernel da familia 2.6 kernel inclui o suporte acl para ext2, ext3, jfs and xfs.
Se o kernel não inclui os suportes você deve recompilar o kernel.

Para maiores informações veja o site ACLs acl.bestbits.at/
Eis no que resulta para a versão 2.6.17.3 do kernel.

$ uname -a && grep -i 'acl' /boot/config-$(uname -r)     
Linux debian 2.6.17.3 #1 PREEMPT Sat Jul 1 11:24:31 CEST 2006 i686 GNU/Linux     
CONFIG_EXT2_FS_POSIX_ACL=y     
CONFIG_EXT3_FS_POSIX_ACL=y     
CONFIG_JFS_POSIX_ACL=y     
CONFIG_FS_POSIX_ACL=y     
CONFIG_XFS_POSIX_ACL=y     
# CONFIG_NFS_V3_ACL is not set     
# CONFIG_NFSD_V3_ACL is not set    

Instalação do pacote acl


Agora que o suporte é assimilado pelo kernel nos resta instalar o suporte software que nos permitirá utilizar os acl.

Trata-se do <soulinha>pacote acl</soulinha> que contém os comandos s getfacl e setfacl.

Debian : apt-get install acl
Mandriva 2006: urpmi acl

Preparação das partições


Para posicionar os ACL sobre os arquivos, a partição contendo estes arquivos deve suportar os acl.

Para isto existe duas maneiras de fazê-lo :
  • temporário
    mount /dev/partition -o defaults,acl /pontot/de/montagem
  • permanente - <soulinha>edição de /etc/fstab</soulinha>
    /dev/partition /home ext3 defaults,acl 0 2
    Para partição é uma função de sua configuração :
    • hda, hdb,.. para um disco rígido IDE
    • sda, sdb,.. para um disco rígido SCSI

V. O comando s

setfacl


O comando setfacl nos permite posicionar os ACLs.
Desenvolveremos somente as opções -m, -x, -L et -R.
Veja o manual man setfacl para maiores detalhes.

-m, --modify - modificar os ACL de um arquivo ou diretório
-x, --remove - suprime as entradas ACLs
-b, --remove-all - suprime todas as entradas ACLs
-L, --logical - acompanhamento dos links simbólicos
-R, --recursiva - aplicação dos ACLs de maneira recursiva

getfacl


O comando getfacl nod permite afixar os ACLs.
  • A opção -R permite ver os ACLs de maneira recursiva
  • A opção -L para seguir links simbólicos


man getfacl pra maiores detalhes.

VI. Salvar e restaurar ACLs


O que fou salvo pelo comando chmod, não foi no caso de ACLs. O comando s getfacl permite de salvar os ACLs

<soulinha>Exemplo </soulinha>: Memorizar os ACLs de uma arborescência
$ getfacl -R /chemin/vers/rep > /chemin/vers/get_rep.acl
O comando setfacl permite restaurar os ACLs

<soulinha>Exemplo </soulinha>: Restauração dos ACLs de uma arborescência
$ setfacl --restore=/chemin/vers/get_rep.acl

VII. Exemplos de utilizações dos ACLs


Não é fácil de imaginar todas as configurações que você pode descobrir por você mesmo as necessidades de suas configurações.
Eis um link onde você encontrará um exemplo de utilização.
okki666.free.fr/docmaster/articles/linux100.htm

Reflita bem antes da utilização dos ACLs.
S chmod resolve o caso, não complique sua vida. Ao contrário onde chmod não pode fazer nada pense aos ACLs.

<soulinha>Exemplo 1</soulinha> :

- um diretório pertencente ao proprietário Jeff e grupo <soulinha>ccm</soulinha>

Para jeff os direitos são ( Leitura, Escritura, Execução) rwx
Para o grupo ccm os direitos são (Leitura e Execução) r-x
Para os outros nenhum direito então ---

Mas jeff quer dar aos moderadores que fazem parte do grupo modo, o direito de leitura r.

Nesta situação chmod não pode fazer nada. Então, fazemos chamada aos ACLs.
$ setfacl -R -m group:modo:r /home/ccm/unmondemeilleur

<soulinha>Exemplo 2</soulinha>
  • sobre o mesmo arquivo Jeff decidiu acordar à Sebsauvage todos os direitos
  • e também a mamiemando e jipicy dos direitos de execução


Saiba que todos eles fazem parte do grupo modo modo.
$ setfacl -R -m u:egavuasbes:wx,u:mamiemando:x,u:jipicy:x /home/ccm/unmondemeilleur

<soulinha>Exemplo 3</soulinha>

jipicy sendo solicitado por Royal Dutch Shell ;) pelas suas competências no Shell
mamiemando solicitado por C PLUS ELECTRONICS.COM pela sua competência da linguagem C

jeff decidiu retirar os direitos de execução temporariamente.
$ setfacl -R -x u:jipicy $ setfacl -R -x u:mamiemando

<soulinha>Exemplo 4</soulinha>

Um dia Jeff decidiu retirar os ACLs para poder reorganizar o projeto, mas antes ele fez um backup dos ou ACLs
$ getfacl -R /home/ccm/unmondemeilleur> /home/jeff/changerlemonde/unmondmeilleur.save.acl     
$ setfacl -R -b /home/ccm/unmondemeilleur

Artigo original publicado por Lami20j

Veja também :
Este documento, intitulado « Segurança - Os Access Control Lists (ACLs) »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.