FreeBSD Handbook/Administração/MAC/Módulo portacl


FreeBSD Handbook
Anterior Capítulo 16. Mandatory Access Control Próxima


16.9 O Módulo portacl do MAC

Nome do módulo: mac_portacl.ko

Linha para configuração do kernel: options MAC_PORTACL

Opção para carga no boot: mac_portacl_load="YES"

O módulo mac_portacl(4) é usado para limitar o uso de portas TCP e UDP (binding) através de opções do sysctl(8). Essencialmente o mac_portacl(4) torna possível permitir que usuários que não o root façam bind em portas privilegiadas, ou seja, menores que 1024.

Uma vez carregado este módulo habilitará a política MAC em todos os sockets. As seguintes opções estão disponíveis:

  • security.mac.portacl.enabled irá habilitar ou desabilitar a política completamente[1].
  • security.mac.portacl.port_high irá definir o número de porta mais alto que o mac_portacl(4) protegerá.
  • security.mac.portacl.suser_exempt quando definido com um valor que não zero, excluir o root desta política.
  • security.mac.portacl.rules irá especificar a política mac_portacl(4) atual, veja abaixo.

A atual política mac_portacl(4), como especificado pela opção security.mac.portacl.rules, é uma string com o formato: regra[,regra,...] com quantas regras forem necessárias. Cada regra tem o formato: idtype:id:protocol:port. O parâmetro idtype pode ser uid ou gid e é usado para interpretar o parâmetro id como sendo um id de usuário ou grupo, respectivamente. O parâmetro protocol é usado para determinar se a regra deve ser aplicada para TCP ou UDP através de sua definição como tcp ou udp. O último parâmetro, port, é o número da porta na qual será permitido o bind para o usuário ou grupo.

Nota: Como o conjunto de regras é interpretado diretamente pelo kernel, apenas valores numéricos podem ser usados para as identificações (id's) de usuário, grupo e porta. Em outras palavras, nomes não podem ser usados para os usuários, grupos e portas.

Por padrão, em sistemas do tipo UNIX®, as portas menores que 1024 só podem ser usadas por processos privilegiados, ou seja, aqueles executados pelo root. Para que o mac_portacl(4) possa permitir que processos não privilegiados façam bind para portas menores que 1024 esta restrição padrão tem que ser desabilitada. Isso pode ser feito definindo como zero as variáveis net.inet.ip.portrange.reservedlow e net.inet.ip.portrange.reservedhigh do sysctl(8).

Veja os exemplos abaixo ou reveja a página de manual do mac_portacl(4) para maiores informações.

16.9.1 Exemplos

Os exemplos a seguir devem esclarecer um pouco mais os conceitos acima:

 # sysctl security.mac.portacl.port_high=1023
 # sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0

Primeiro configuramos o mac_portacl(4) para cuidar das portas privilegiadas padrão e desabilitamos as restrições usuais de bind do UNIX®.

 # sysctl security.mac.portacl.suser_exempt=1

O usuário root não deve ser tolido por esta política, para tando definimos security.mac.portacl.suser_exempt com um valor não-zero. O módulo mac_portacl(4) está agora configurado para atuar da mesma maneira que que os sistemas do tipo UNIX® o fazem por padrão.

 # sysctl security.mac.portacl.rules=uid:80:tcp:80

Isso permite que o usuário com UID 80 (normalmente o usuário www) faça escute na porta 80. Isso pode ser usado para permitir ao usuário www executar um servidor web sem jamais ter privilégios de root.

 # sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995

Isso permite que o usuário com o UID 1001 escute nas portas TCP 110 (“pop3”) e 995 (“pop3s”), permitindo que este usu[ario rode um servidor que aceita conexões nas portas 110 e 995.

Notas

[1] Devido a um bug, a variável security.mac.portacl.enabled do sysctl(8) não funcionará no FreeBSD 5.2.1 e versões anteriores.



Anterior Índice Próxima
O Módulo ifoff do MAC Topo O Módulo partition do MAC
Última edição desta página: 31/08/2010 (20100831124500)