FreeRADIUS - Noções básicas - Parte III

Terceira parte do artigo sobre noções básicas de FreeRADIUS.

[ Hits: 9.265 ]

Por: Perfil removido em 15/07/2015


Tabela de ação



Cada seção de processamento possui uma lista com as respostas padronizadas para vários códigos de retorno. Por exemplo, noop é usualmente ignorado, reject causa uma parada no processamento da lista etc.

Cada código de retorno possui uma prioridade: reject tem a maior prioridade que noop. A tabela a seguir, lista os códigos de retorno e as ações padronizadas que são tomadas em cada caso:

Algoritmo

Todos as peças necessárias para entender como o servidor processa uma requisição já foram apresentadas. O servidor inicia cada requisição com um código de retorno e uma prioridade padrão. Ele processa a requisição através de uma seção de processamento.

Cada declaração ou módulo é avaliado e o código de retorno é utilizado para atualizar o código de retorno final que será associado com a requisição. Quando a lista termina, o servidor continua para a próxima lista ou envia uma resposta ao requisitante.

O algoritmo utilizado para isso possui o seguinte pseudocódigo:

(code, 0) = action_table[default]

foreach (statement in section) {

	code' = evaluate(statement)
	(action, priority') = action_table[code']

	if (action == return) {
		code = code'
		break;
	}

	if (priority' >= priority) {
		(code, priority) = (code', priority')
	}
}
return (code, priority)

A função de avaliação no algoritmo deve ser vista como a execução de um dos módulos instalados ou ser interpretada como uma declaração escrita em Unlang.

Quando uma declaração em Unlang invoca uma subseção, o algoritmo é executado de forma recursiva nessa subseção. Deste modo, FreeRADIUS pode invocar uma ou mais das seguintes seções de processamento:
  • authorize
  • session
  • authenticate
  • post-auth
  • preacct
  • accounting
  • pre-proxy
  • post-proxy
  • send-coa
  • recv-coa

A imagem a seguir ilustra como as seções de processamento são invocadas em cada um dos cados de uso:
Vejamos o que acontece quando um servidor FreeRADIUS recebe uma requisição de acesso e faz a autenticação de um usuário.

O nome da seção é "Authorize" por razões históricas, as versões menores de FreeRADIUS não possuem uma seção post-auth. Uma descrição mais acurada para essa seção seria pre-authentication.

A seção "Authorize" processa pacotes do tipo Access-Request, determinando qual o método de autenticação será utilizado e se a senha está correta. Uma vez que essa seção termina o processamento do pacote, o código de retorno da seção é examinado pelo servidor.

Se esse retorno é noop, notfound, ok ou updated, o processamento da requisição segue. Se o retorno é handled, ele presume que um ou mais módulos configuraram o conteúdo da resposta que o servidor enviará. Se o retorno é reject uma seção de post-auth é executada. Se a autenticação não é rejeitada, então o servidor segue o processamento procurando por um atributo Auth-Type na lista de controle.

Quando esse atributo é encontrado a subseção authenticate é executada. Para versões superiores a 2.0, o recomendado é utilizar declarações Unlang para criar políticas que são mais flexíveis e simples de entender.

A seção "sessão" (isso está certo!) é utilizada para realizar consultas a bancos de dados quando aplicando Simultaneous-Use ou detecção de duplo login. Isso é utilizado somente em pacotes Access-Request. A tabela a seguir lista os códigos e as ações adotadas na sessão.
A seção de autenticação (authenticate) é utilizada somente quando o servidor estiver autenticando requisições localmente e será ignorada quando um pacote estiver ultrapassando o servidor com destino a um proxy.

Essa sessão é completamente diferente das demais: ela é composta por uma série de subseções, mas somente uma das quais é executada. A subseção é escolhida baseado no atributo Auth-Type encontrado na lista de controle. Quando a seção authenticate é finalizada, a seção post-auth é executada. A tabela a seguir lista os códigos e as ações na seção Authenticate.
Uma seção post-auth contém as políticas que são aplicadas após o processo de autenticação acabar, independente do resultado final ser sucesso ou fracasso.

Quando a autenticação falha, o servidor procura por uma subseção chamada de Post-Auth-Type Reject e, se encontrada, executa somente as declarações que são escritas nessa subseção.

Se não há essa subseção, nada é feito. Para atualizar qualquer atributo na resposta, é recomendado usar somente a seção post-auth, o que pode ser difícil já que muitos módulos fornecem atributos de reply com o método authorize. Todavia, esses métodos podem ser chamados em post-auth usando module-name.authorize como, por exemplo, sql.authorize.

Página anterior     Próxima página

Páginas do artigo
   1. Seções de processamento de pacotes
   2. Tabela de ação
   3. Contabilidade
Outros artigos deste autor

Introdução à ponteiros em C

Outros recursos no OpenOffice: colunas, fundo e bordas

Lucaschess: software para base de dados, jogar e treinar xadrez

Customizando o DVD de instalação do Slackware

Procedimento para descoberta de chave WEP

Leitura recomendada

Cluster Beowulf

Cluster de alta disponibilidade para servidores web com Debian 7.1 + Corosync + Pacemaker + DRBD

Passo a passo: Fedora autenticando usuários no Active Directory

MySQL + Apache + PHP + OCI8 + PHPMyAdmin no Ubuntu Server

Explorando as possibilidades do XFree86

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts