NOMBRE

PAPI - Configuración de un PoA

CAMBIOS DESDE PAPI 1.4

La configuración de un PAPI PoA ha cambiado desde la versión 1.4. En dicha versión, las directivas de configuración del PoA se definen en el fichero de configuración de Apache como si fuesen directivas de configuración del propio servidor web. Para que esto fuera posible, se hacia uso del módulo PAPI::Conf el cual debía ser cargado desde el fichero de configuración de Apache mediante la directiva PerlModule.

En la versión 1.5 de PAPI, las directivas de configuración se definen fuera del fichero de configuración de Apache, y por tanto fuera del ámbito de dicho servidor web. Para ello se le ha proporcionado a PAPI un fichero con sintaxis XML, donde se definen dichas directivas.

PAPI 1.5 detecta que recursos del servidor web se desean proteger y busca en el fichero XML las directivas que se definen para dicho recurso; procediendo a protegerlo según se detalla en éste último.

PROCESO DE CONFIGURACIÓN

Antes de explicar cómo configurar los PoAs de PAPI-1.5 es necesario entender como procesa PAPI los diferentes ficheros de configuración, así como el orden en el que se leen. Ya que esto le ofrecerá al usuario una visión más global de PAPI-1.5.

La configuración de PAPI-1.5 se dispara desde Apache en el momento que éste se inicia, esto se consigue mediante una directiva mod_perl en la configuración de Apache que debe estar al final del fichero de configuración de Apache para que reconozca todos los recursos antes de lanzar la configuración de PAPI.

En el fichero de configuración de Apache, se definen los recursos a papizar, y se les añaden una serie de directivas propias de mod_perl que le permiten a PAPI detectarlos al procesar éste la configuración de Apache; y tratarlos de forma especial.

Cuando se dispara la configuración de PAPI, éste parsea el fichero XML procesando los recursos allí definidos, acto seguido PAPI recopila todos los recursos definidos en Apache y que deben ser papizados, y los compara con los que ha procesado en el fichero XML.

Por último si encuentra recursos que han sido definidos en Apache y cuya configuración de PAPI no se haya declarado en el fichero XML o viceversa, es decir, recursos no definidos en Apache pero si en el fichero XML; se muestra un mensaje de error que avisa de posibles agujeros de seguridad, junto con un listado de los recursos que no hayan sido definidos en ambos ficheros.

CONFIGURACIÓN DETALLADA

PAPI-1.5 se sirve de varios ficheros para obtener/carga la configuración. Estos ficheros son:

Configuración del servidor Web Apache

En el fichero de configuración de Apache httpd.conf se debe indicar los recursos que se desean proteger con PAPI, para ello se deben añadir las siguientes directivas mod_perl en las secciones Location, Directory y Files que se desean papizar.

El fichero Apache_PoA-1.5.conf debe incluirse desde el fichero de configuración de Apache, o copiar su contenido a éste fichero. Si desea incluirlo (es lo recomendado) puede seguir el siguiente ejemplo

#
## Fichero de configuración para papi.
#
Include /usr/local/apache/conf/PAPIConf/PoA/Apache_PoA-1.5.conf

De donde se deduce que el fichero se ha copiado al directorio /usr/local/apache/conf/PAPIConf/PoA/.

En este fichero (Apache_PoA-1.5.conf) es donde se configura el proceso de configuración de PAPI, por medio de variables de entorno de mod_perl.

PoA_CONFIG_FILE

CONFIG_VERBOSE

XML_CHECKER_ACTIVE

CONFIG_DEVELOP

El fichero apache_PoA-1.5.conf además de la variables descritas anteriormente, tiene dos secciones <Perl></Perl>. En la primera de ellas se define una variable y se requiere el script que dispara la configuración del PAPI PoA, tal como se muestra a continuación:

<Perl>
  $Apache2::PerlSections::Save = 1;
  require "PAPI/PAPI_Apache2_conf.pl";
</Perl>

La variable $Apache2::PerlSections::Save se usa para salvar toda la configuración de Apache que se realiza dentro de una PerlSection, con el fin de mostrarla posteriormente por pantalla, o guardarla en un fichero. Esto es útil para depurar el proceso ``dinámico'' de configuración de Apache. El fichero PAPI/PAPI_Apache2_conf.pl es el script que dispara la configuración de PAPI, y que se instala junto con los módulos de Perl, por lo que se recomienda que no se modifique a menos que se desee modificar el proceso de configuración de PAPI y se haya definido otro fichero.

La segunda PerlSection tiene la finalidad de imprimir por salida estándar la configuración generada o modificada de apache durante el proceso de configuración de PAPI; siempre y cuando la variable $Apache2::PerlSections::Save se haya establecido a 1.

<Perl>
  print Apache2::PerlSections->dump;
</Perl>

Configuración del PAPI PoA

Como ya se ha comentado anteriormente, PAPI 1.5 se configura mediante un fichero XML. Se ha intentado mantener los nombres de las directivas de PAPI 1.4 para los tags del fichero XML, de forma que para aquellos que ya hayan trabajado con PAPI, no les resultará muy costoso adaptarse a nuevo método de configuración.

El fichero XML mantiene el mismo criterio de configuración que la versión 1.4 de PAPI, donde se usaba en el fichero httpd.conf de Apache. Es decir, sigue existiendo una sección donde se definen los valores por defecto y/o comunes para PAPI

<Global>
  <Accept_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/blueball.gif</Accept_File>
  <Reject_File>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/redball.gif</Reject_File>
  <Debug>0</Debug>
  <HKey>YWNhOWZkNzE4MDRhFDRKJKJffg54DfkxNzgwMzNmOTU=</HKey>
  <LKey>ZjYwNTk2DFrdfTYHNjhkMmZlZjM0NDMwMDlhNWYyMWU=</LKey>
  <Pubkeys_Path>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA</Pubkeys_Path>
  <Hcook_DB>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/hcookdb</Hcook_DB>
  <Lcook_Timeout>18000</Lcook_Timeout> <CRC_Timeout>1800</CRC_Timeout>
  <URL_Timeout>1800</URL_Timeout>
  <Req_DB>/home/user/src/InstalledPAPIs/PAPI-1.5/PoA/req_db.mldbm</Req_DB>
  <PAPI_AS id="PAPI-1.33" url="http://squirtle.rediris.es/cgi-bin/AuthServer">PAPIusando Apache-1.5</PAPI_AS>
  <Location path="/test" id="test0" filtered="false" independent="false">
    <PAPI_Filter regex="default" action="reject"></PAPI_Filter>
      <Form_Processor url="http://loc.al.domain/testForm"; form_id="Form ID0">
        <Field name="username">theUser_0</Field>
        <Field name="password">thePassword_0</Field>
    </Form_Processor> 
  </Location>
</Global>

Y también se definen secciones de tipo Server, Location, Directory y File. Que se corresponden con las secciones de Apache VirtualHots, Location, Directory y File respectivamente. Las secciones Location, Directory y File que definen recursos en Apache del Main Host, es decir, que no pertenezcan a ningún VirtualHost; se deben definir en el fichero XML de PAPI en la sección Global, tal y como se puede observar en el ejemplo anterior, donde la sección de tipo Location ha sido incluida en la sección Global

Todos aquellos recursos de Apache que se definan en el ámbito de algún VirtualHost, deben ubicarse dentro de una sección de tipo Server en el fichero XML de PAPI.

Como se muestra a continuación:

<Server name="server.local.domain" port="80" independent="0">
  <Location path="/prueba" id="test2" filtered="true" independent="false">
    <GPoA_URL>wayf:built-in</GPoA_URL>
  </Location>
</Server>

Configuración de diferentes recursos papizados

Protecting a location local to the server the PoA lives in

papi_conf.xml

httpd.conf

Protecting a whole remote server

papi_conf.xml
httpd.conf

Accessing locations at a remote server protected by HTTP Authentication

papi_conf.xml
httpd.conf

Accessing locations at a remote server protected by form authentication

papi_conf.xml
httpd.conf

Protecting a whole remote domain

papi_conf.xml
httpd.conf

Defining a PoA that depends on a parent GPoA

papi_conf.xml
httpd.conf

Defining a GPoA

papi_conf.xml
httpd.conf

Defining a PoA able to send queries back to the recognized authentication servers

papi_conf.xml
httpd.conf

Defining a PoA to interoperate with Athens

No portado aún

Using an external authorization server based on SPOCP

papi_conf.xml
httpd.conf

DESCRIPTION

This module contains all the configuration functions for PAPI PoAs living inside an Apache server. Configuration is performed by means of specific tags in the Apache configuration file. These tags may appear inside the sections:

<Global> this directive replaces <PAPI_Main>

<Server name=``fqdn'' port=``80'' independent=false``>

Its attribute list are:

name FQDN

port

independent < true | false >

<Location path='/' id='Service_ID' filtered='' independet=''>
<Directory path='/' id='Service_ID' filtered='' independet=''>
<Files path='/' id='Service_ID' filtered='' independet=''>
path path
    The same path defined at <Location> of Apache

id serviceName
    This is the name the PAPI system uses for internally identifying a PoA. You can also use the tag Server, although its use is deprecated.

filtered
    TODO!

independet
    TODO!

The tags recognized by the configuration methods inside <Global>, <Location>, Directory>, and <Files> and <PAPI_Local> sections are as follows:

<HKey> filename </HKey>

<LKey> filename </LKey>

<Hcook_DB>filename</Hcook_DB>

<Accept_File>filename</Accept_File>

<Reject_File>filename</Reject_File>

<Pubkeys_Path>directoryName</Pubkeys_Path>

Domain domainName ???????

<Auth_Location>location</Auth_Location>

Pass_URL_Pattern ??????????

<Hcook_Handler>regularExpression<Hcook_Handler>

Hcook_Generator functionName ??????????

<Lcook_Timeout>seconds</Lcook_Timeout>

<CRC_Timeout>seconds</CRC_Timeout>

<URL_Timeout>seconds</URL_Timeout>

<Max_TTL>seconds</Max_TTL>

<PAPI_AS id='' url='' jnlp_codebase=''>AS Description</PAPI_AS>

<PAPI_Filter regex='regularExpression' action='[ accept | reject ]'/>

<Cookie_Reject>regularExpression</Cookie_Reject>

<Hash_User_Data>[ 1 | 0 ]</Hash_User_Data>

<User_Data_Rewrite src_regex='regularExpression' dst='replacementString'/>

<Client_Address_In_Tokens> [ 1 | 0 ] </Client_Address_In_Tokens>

<Attribute_Separator>separatorString</Attribute_Separator>

<Value_Separator>separatorString</Value_Separator>

Max_Nonce_Errors number ???????????

<Debug>[ 1 | 0 ]</Debug>

The following tags are only applicable to PoAs used to connect to Athens-enabled resources using the mechanisms defined by Athens Devolved Authentication (AthensDA) (see http://www.athensams.net/development/devolved_authentication/ for details):

PADATH_LAA_Handler location ??????????

PADATH_HDD_Handler location ???????????

PADATH_Institution_ID AthensIdentifier ????????????

PADATH_Athens_AuthPoint URL ????????????

PADATH_Key filename ????????????

PADATH_Permission_Set_Attribute attributeName ????????????

PADATH_User_Id_Attribute attributeName ??????????????

PADATH_AAP_TTL seconds ????????????????

The following tags are only applicable to PoAs using an external authorization server based on SPOCP (see http://www.spocp.org/ for details):

<SPOCP_Server>serverSpec</SPOCP_Server>

<SPOCP_Action>actionName</SPOCP_Action>

<SPOCP_Accept_If_Down>[ 1 | 0 ]</SPOCP_Accept_If_Down>

The following tags are only applicable to PoAs belonging to a hierarchy of points of access that share a common policy, where initial requests for access are resolved at a parent Groupwide-PoA (a GPoA):

<GPoA_URL>URL</GPoA_URL>

<Req_DB>filename</Req_DB>

The following tags are only applicable to points of access that implement a Groupwide-PoA (a GPoA) controlling the access to a set of PoAs:

<GPoA_Priv_Key>filename</GPoA_Priv_Key>

<GPoA_Rewrite PoA_regex='PoARegExp' src_regex='regExp' dst='replacementString'/>

<GPoA_Hash_User_Data>[ 1 | 0 ]</GPoA_Hash_User_Data>

The following tags are only applicable to PoAs controlling the access to external resources:

<Remote_URL>URL</Remote_URL>

<Remote_Domain>domain</Remote_Domain>

Local_IP_Address IP ????????????

<Proxy_Server>URL</Proxy_Server>

No_XML [1|0] ????????????

<Rewrite_MIME_Types>MIMEtype MIMEtype ...</Rewrite_MIME_Types>

<HTTP_Auth realm='' user='' password=''/>

<Form_Processor url='regularExpression' form_id='formId' buttonName='name' buttonIndex='index'> <field name='field1'>value1</field> . . .</Form_Processor>

<PAPI_Redirect src_regex='regularExpression' dst='replacementString'/>

PAPI_Redirect_by_URL URLPattern regularExpression replacementString ????????

PAPI_POST_Redirect regularExpression replacementString ????????????

<Rewrite_URL_Pattern>regularExpression</Rewrite_URL_Pattern>

Reject_URL_Pattern regularExpression ????????????

Eval_Proxy_Redirects [1|0] ????????????

Proxy_Chunk_Size bytes ????????????

Redirect_All [1|0] ????????????

AUTOR

Rodrigo Castro (RedIRIS) - Spain.

Diego R. Lopez (RedIRIS) - Spain.

Daniel García (RedIRIS) - Spain.