Introducción a LDAP sobre Linux

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Atif Ghaffar 

AboutTheAuthor:[A small biography about the author]

Atif is un camaleón. Cambia de tareas, de Administrador de Sistemas, a programador, a profesor, a jefe de proyecto, a lo que sea necesario para terminar el trabajo.
De vez en cuando le gusta programar en el portátil mientras ve una película en el cine.
Atif opina que le debe mucho a la comunidad y a los proyectos de código libre y de Linux por enseñarle muchas cosas.
Podéis encontrar más cosas sobre él en su página web

Abstract:[Here you write a little summary]

En este artículo exploraremos LDAP y sus implementaciones usando nuestro sistema operativo Linux.

Se encuentra mucha literatura sobre LDAP, por lo que no lo repetiré todo de nuevo aquí, ni hablaré sobre términos avanzados de LDAP, esquemas, diferencias de la v2 frente a la v3, etc. De hecho no se mucho sobre todo eso. En su lugar, trataré de explicar en palabras sencillas lo que es LDAP, qué beneficios nos aporta y cómo podemos usarlo.

No soy un experto en LDAP. De hecho soy un principiante. Escribiré aquí báasicamente qué he hecho con LDAP y cómo. Trataré de no confundiros como lo estube yo durante mucho tiempo.

Pregunta: ¿si eres un principiante, por qué escribes un artículo sobre el tema?
Recientemente necesité ayuda de un colega para un proyecto. La base del proyecto era LDAP. El me podía ayudar con Perl, servidores de correo, etc pero no sabía nada sobre LDAP. De hecho, cada vez que intentaba enterarse de algo se liaba más y más.
Ya que saber algo de LDAP era un requerimiento mínimo para el proyecto le di un curso intensivo sobre LDAP en media hora y se le aclararon todas las ideas. Los conceptos son fáciles. Solo necesitaba que se los aclararan un poco y unos ejemplos sencillos.

Intentaré hacer lo mismo en este artículo.

Podéis encontrar muchas url sobre LDAP en la sección de referencias.

ArticleIllustration:[This is the title picture for your article]

openLDAP

ArticleBody:[The article body]

¿Qué es LDAP?

LDAP significa Protocolo de Acceso a Directorios Ligeros (siglas en inglés de Lightweight Directory Access Protocol) y es un servicio de directorio, muy similar a los directorios del sistema de ficheros al que estamos acostumbrados, o a la guía de teléfonos que usamos para buscar números de teléfono, o a los servicios de directorios de red como el NIS de SUN (Network Information Service, Servicio de Información de Red), DNS (Domain Name Service), o al árbol que ves en tu jardín (o en el de tu vecino).

LDAP es una base de datos especializada. Es muy importante recordar que LDAP no es otra base de datos más. LDAP está optimizada para hacer búsquedas (leer datos). Las lecturas en LDAP se realizan de manera mucho más frecuente que las escrituras.

¿Qué tienen todos estos servicios en común?
Todos devuelven alguna información cuando se les pregunta con algún criterio.

Ejemplos.

Directorio del sistema de ficheros
ls /etc
Devolverá todos los ficheros y subdirectorios del directorio /etc

ls /etc/p*
Devolverá todos los ficheros y subdirectorios que empiezan por p

find /usr/local/apache -name index.html
Buscará en el sistema de ficheros un fichero o directorio que se llame index.html, empezando en la base "/usr/local/apache"

Directorio de NIS
ypcat passwd
Devolverá el nombre de usuario, contraseña, userid, etc de la base de datos de NIS

ypmatch atif passwd
Devolverá las entradas para la contraseña para el usuario atif

Directorio DNS
nslookup www.linuxfocus.org
Devolverá la dirección ip para la entrada www.linuxfocus.org de la base de datos de DNS

nslookup -type MX linuxfocus.org
Devolverá solo información MX de la base de datos de DNS donde el nombre de host sea linuxfocus.org

Directorio LDAP
(lo veremos con detalle más abajo)

ldapsearch uid=aghaffar
Devolverá toda la información pública sobre el usuario aghaffar
Similar al comando de unix find / -uid aghaffar

ldapsearch uid=aghaffar mail
Solo devolveráa el mail del usuario aghaffar

Directorio Base o Root (raíz)

En cada servicio de directorio de los que hemos mencionado arriba, siempre hay un punto de inicio desde el que empezar a buscar. Este punto de inicio se llama normalmente "root". Es similar a la raíz del árbol.
Cada árbol tiene una raíz, luego algunas ramas, y luego más ramas y hojas y flores, etc.

Cada raíz puede tener varias ramas (como en el árbol del jardín de tu vecino), para el sistema de ficheros esas ramas pueden ser, por ejemplo, otro subdirectorio, o un fichero.
Cada una de las ramas puede tener atributos.
Por ejemplo, las ramas del sistema de ficheros (subdirectorios and ficheros) tienen los siguientes atributos. A continuación hay un diagrama que muestra el directorio de un sistema de ficheros.
Los atributos representan la salida del comando de unix ls -ld /usr
drwxr-xr-x 29 root root 749 Jun 17 23:45 /usr

Ahora un diagrama para un directorio LDAP

Hablaremos sobre este diagrama más tarde.

Distinguished Name (nombre distinguido)

Al contrario que en un árbol natural, cada rama del directorio del sistema de ficheros, del LDAP o de la guía de teléfonos tiene como mínimo un atributo único, que nos ayuda a diferenciarlas las unas de las otras.

En los sistemas de ficheros este atributo único es el nombre del fichero con todo el camino, por ejemplo
/etc/passwd El nombre del fichero passwd tiene que ser único dentro de su camino. Claro que podemos tener /usr/passwd y /opt/passwd que son únicos con todo su nombre completo.
De igual modo, el sistema DNS tiene el FQDN (Fully Qualified Domain Name) que es una entrada &uaacute;nica (ya se que puedes asignar muchas ip al mismo FQDN!).

En LDAP el nombre completo de una entrada se llama "dn" o nombre distinguido (en inglés Distinguished name). Este nombre es siempre &uaacute;nico en un directorio. Por ejemplo, mi dn es "uid=aghaffar, ou=People, o=developer.ch"
No es posible tener otras entrada con el mismo dn, pero seguramente podremos tener un dn como "uid=aghaffar, ou=Administrators, o=developer.ch"
Esto representa el ejemplo de las entradas del sistema de ficheros /etc/passwd y /usr/passwd
Tenemos un único atributo llamado uid in the árbol "ou=Administrators, o=developer.ch" y tenemos un único atributo llamado uid en el árbol "ou=People, o=developer.ch". No colisionan.

Servidores LDAP

Hoy en día hay muchos servidores LDAP disponibles en el mercado, y la mayoría de ellos funcionan bien con Linux.
Para este artículo uaremos openLDAP.

¿Por qué he elegido openLDAP? ¿Por qué deberías elegir tú openLDAP?

openLDAP está disponible en http://www.openldap.org. Puedes bajarte el código fuente y construirtelo tú mismo, o mirar a ver si está el package para tu distribución de Linux. Te ahorrará el esfuerzo e isntalarás directamente los binarios.
Yo lo he provado en SuSE6.x y en RedHat6.x.

Construcción del directorio LDAP

En esta sección montaremos un servidor LDAP paso por paso.
Pasos a realizar:

Descarga e instalación de openLDAP

Como ya hemos dicho, debes descargar los fuentes de www.openldap.com e instalarlos según la documentación o instalar un package de binarios precompilados (instalar los packages o un HOWTO sobre cómo compilar aplicaciones queda más allá de las intenciones de este artículo).

Configurar el servidor LDAP

Para este ejemplo, construiremos un directorio LDAP para linuxfocus.org. Si quieres, puedes cambiar los nombres y todo lo necesario para adaptarlo a tu site.
Para configurar el servidor principal, tenemos que editar los ficheros slapd.conf y ldap.conf. Lo puedes hacer en tu editor favorito.
En mis servidores, estos ficheros están en /etc/openldap. Los tuyos pueden estar en /usr/local/etc/openldap o en algún otro sitio, dependiendo de tu Distribución de Linux, o de los parámetros de configuración si compilaste openLDAP tu mismo.

######### /etc/openldap/slapd.conf ###################################
# lo que sigue esta definido por defecto en mi linux suse 6.4
# hablaremos mas sobre ello en la segunda o tercera parte de este articulo
# Quizas por entonces ya sepa que significa :)

include		/etc/openldap/slapd.at.conf
include		/etc/openldap/slapd.oc.conf
schemacheck	off

pidfile		/var/run/slapd.pid
argsfile	/var/run/slapd.args

#######################################################################
# definiciones de la base de datos ldbm
#######################################################################

# esto define el tipo de base de datos a usar. manten el valor por
# defecto  ldbm
database	ldbm

# sufijo o raiz (root) del directorio. Es el nodo raiz superior
# de tu directorio LDAP
suffix		"o=linuxfocus.org"

# aqui es donde se guardara el dbs de ldap
directory	/var/lib/ldap

# el nombre distingudo (distinguished name) del directorio manager
rootdn		"cn=Manager, o=linuxfocus.org"

# no es muy buena idea guardar la contraseña en texto llano, 
# pero la dejaremos asi al principio hasta que controlemos mas sobre LDAP
rootpw		secret

# Esto es todo, de momento.
Editamos el fichero /etc/openldap/ldap.conf
Este fichero pertenece al cliente de LDAP, pero aquí utilizamos la misma máquina como cliente y servidor. Pueden ser la misma o dos diferentes.
Normalmente este fichero lo leen utilidades ldap como ldapdelete, ldapadd, etc.

##########/etc/openldap/ldap.conf#########
#
# Valores por defecto para LDAP
#

# mirar ldap.conf(5) para mas detalles
# Este fichero debe tener permiso de lectura para todo el mundo

# esto define el servidor ldap. Se puede usar hostname o direccion ip
host 127.0.0.1

# este es el el directory root que queremos usar para iniciar las
# busquedas. usaremos el nodo superior en nuestra configuracion
# pero no tiene porque serlo. Por ejemplo, podemos poner
# base = ou=users, o=linuxfocus.ch
# si lo hacemos, todas las busquedas empezaran en una rama del arbol
base  o=linuxfocus.org

# esto es todo
Ahora iniciamos el servidor LDAP.
Si usas el servidor pre-instalado de SuSE, lo puedes iniciar con
/etc/rc.d/ldap start
En RedHat, creo que es
/etc/rc.d/init.d/ldap start
Si lo has compilado e instalado por ti mismo y has usado los directorios por defecto, lo puedes iniciar con
/usr/local/libexec/slapd & o donde lo hallas instalado. Simplemente encuentra slapd y ejecúta;lo.

Cómo añadir datos al nuevo servidor LDAP

Llegados a este punto ya tenemos un servidor LDAP funcionando, listo para ser llenado con información.
La manera estándar de llenar de información el servidor LDAP es crear un fichero LDIF (Formato de intercambio de directorios LDAP, en inglés LDAP Directory Interchange Format)*. Puedes leerte el man de ldif para informarte más sobre ldif.
Muy brevemente, ldif es la representación textual de las entradas de LDAP. Estas entradas están en un formato legible por el hombre e intercambiable entre dos servidores LDAP diferentes de diferentes fabricantes, usando motores de bases de datos diferentes, y ejecutandose en sistemas operativos diferentes.
* Sí. Otro formato más. Me pregunto por qué no se usa XML en lugar de LDIF.

Sin más preámbulos creemos el fichero ldif. Algunas cosas a recordar.

  • Cada registro/entrada del fichero ldif se separa con una línea en blanco.
  • Los espacios en los valores son muy importantes. No es lo mismo "Atif Ghaffar" que "Atif Ghaffar "

    El fichero ldif: linuxfocus.org.ldif

    dn: o=linuxfocus.org
    o: linuxfocus.org
    objectclass: top
    objectclass: organization
    
    dn: ou=editors, o=linuxfocus.org
    ou: editors
    objectclass: organizationalUnit
    
    dn: uid=aghaffar, ou=editors, o=linuxfocus.org
    uid: aghafar
    cn: Atif Ghaffar
    sn: Ghaffar
    givenname: Atif
    objectclass: person
    userpassword: {CRYPT}yIvSBWSuLs2N2
    mailacceptinggeneralid: aghaffar@linuxfocus.org
    ou: editors
    
    dn: uid=mkempe, ou=editors, o=linuxfocus.org
    uid: mkempe
    cn: Magnus Kempe
    sn: Kempe
    givenname: Magnus
    objectclass: person
    userpassword: clearpass
    mailacceptinggeneralid: mkempe@linuxfocus.org
    maildrop: mkempe@developer.ch
    preferredlanguage: fr
    ou: editors
    
    Ahora tenemos que añadir esta información al directorio LDAP. Usamos el programa llamado ldapadd

    ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif

    Este comando usa "cn=Manager, o=linuxfocus.org" como el dn del manager y 'secret' como password y lee la información del fichero linuxfocus.org.ldif y la inserta en el directeorio LDAP.
    Si todo va bien ya estamos listos para hacer preguntas a a nuestro directorio LDAP, o si no fue todo bien ya estás listo para inundarme el correo ;)
    Por el bien de mi servidor de correo espero que todo haya ido bien.

    Antes de seguir, examinemos el fichero ldif línea por línea.

    1. Esta línea define el dn para la entrada de nivel superior. Será la raíz del árbol de directorios.
      Es necesario definirla.
    2. Esta línea define la o (organización) y le da el valor "linuxfocus.org"
    3. Esta línea define la clase de este objeto. Le indicamos top.
    4. Aquí definimos el tipo del objeto (es un objeto de organización)
    5. La línea en blanco separadora.
    6. dn para el grupo de editores (esta es la rama hecha para los editores de linuxfocus)
      Como esta rama, podemos tener todas las que queramos para otros propósitos. Por ejemplo, una rama con los hosts y sus datos, una rama para mirrors del site, etc. etc.
    7. aquí se define explícitamente el atributo ou (unidad organizativa) para los editores.
      Estos atributos sirven como ítems buscables. Por ejemplo, si quieres encontrar todos los usuarios que son editores puedes buscar con "show all dn where ou=editors". Si no definimos esto aquí esta entrada/registro no se encontraría.
    8. aquí definimos el objectclass (organizationalUnit)
    9. La línea en blanco separadora.
    10. dn para el usuario aghaffar del grupo de editores
    11. el uid (asegúrate que es único) del usuario
    12. el cn (common name, nombre común) del usuario. Por ejemplo, yo prefiero escribir el nombre como "Nombre Apellido", otros prefieren "Apellido Nombre".
    13. sn: apellido (en inglés Surname)
    14. givenname (Nombre)
    15. objectclass (Persona)
    16. userpassword (este es un password encriptado). La cadena {CRYPT} indica que este password está encriptado con el algoritmo crypt. El resto es el password encriptado.
    17. Esta línea define una dirección de email donde puedo recibir emails.
    18. ou. Esto define que estoy en la unidad organizativa de editores.
    19. La línea en blanco separadora.
    20. de nuevo, dn para otra entrada. Nombre de usuario: mkempe, ou editores
    21. nombre comun
    22. apellido
    23. nombre
    24. objectclass
    25. userpassword: aquí estamos utilizando un password en texto llano. Se puede usar para diferentes usuarios formatos diferentes. Se puede definir en cada entrada y no para toda la base de datos. Por lo que un usuario puede tener texto llano, otro puede encriptar con CRYPT, otro con SHA etc.
    26. dirección de mail donde el usuario acepta mail. (Normalmente se usa para el servidor de mail).
    27. maildrop: De nuevo para el servidor de mail. Define dónde reside el mail del usuario. En este ejemplo, el servidor de mail recibe el mail para la dirección "mkempe@linuxfocus.org", el servidor de mail preguntará entonces al servidor de LDAP "hay algún buzón que acepte mail para "mkekpe@linuxfocus.org"?. El servidor ldap le devolverá el valor del atributo maildrop. El servidor de mail enviará entonces el mail a ese buzón. Hablaremos más sobre el tema en otro momento. Estoy construyendo la infraestructura de un ISP donde uso bastante LDAP para administrar dominios virtuales y toda la información sobre dominios y sus usuarios. Si estás interesado en estas cosas, envíame un mail.
    28. preferredlanguage. Aquí tenemos un atributo extra que nos dice el idioma preferido del usuario. Podemos usar esta información o otras informaciones de preferencias del usuario que almacenemos centralmente en el LDAP para proporcionar mejores servicios. Por ejemplo, a este usuario siempre se le redirecciona automáticamente a las páginas en franc´s.
      Fíjate que el anterior usuario no tiene algunos atributos (preferredlanguage, maildrop, etc). Es una de las ventajas de LDAP. No hay una estructura fija, como en una tabla de una base de datos. Puedes tener una entrada con solo 3 atributos, mientras que otra puede tener 30.
    29. ou. la unidad de editores

    Interrogando a la base de datos LDAP

    Busquemos todos los datos sobre el usuario mkempe

    ldapsearch uid=mkempe

    Busquemos el dn de todos los editores

    ldapsearch '(&(objectclass=person)(ou=editors))' dn

    Si quieres más ejemplos, léete las páginas del manual de ldapsearch

    Ventajas de LDAP

    ¿Cuáles son las ventajas de cambiar a LDAP?

    LDAP es un estándar abierto. La mayoría de aplicaciones nuevas que utilices serán capaces de buscar información en una base de datos. Incluso Windows 2000 usa LDAP para sus servicios de directorio.
    Centralizar toda la información en un lugar tiene enormes beneficios: un único punto de administración, con menos posibilidad de errores, menos datos duplicados por todas partes, y la facilidad de realizar backups.

    Implementaciones de ejemplo de LDAP

    Yo ahora pdría ser un empleado de Compaq y tratar de venderte LDAP diciendo que puedes usarlo como 'administrador de contactos'. Pero no trabajo para Compaq, Por lo que trataré de explicarte un uso más interesante de LDAP.

    ORIGEN ÚNICO DE AUTENTICACIÓN

    Cuentas de usuarios en un lugar central.
    Puedes utilizar un árbol LDAP para administrar tus usuarios, sus passwords y mucha más información de la que puedes guardar en un simple fichero /etc/passwd. Esta información podrá ser usada por los usuarios de Microsoft Windows, Unix o Mac.

    Idea Puedes jugar con los ficheros /etc/pam.d/login, etc para que la autenticación se haga con la información de LDAP, en lugar de la del fichero shadow, o de nis etc.

    Idea Puedes escribir un pequeño interfase web para que los usuarios cambien su password de unix sin necesidad de entrar en el sistema, ya que la información del password está en LDAP y no en el sistema. Necesitarás usar pam_ldap para esto. Mira el capítulo de Recursos para url's sobre pam_ldap.

    NOTA
    Única fuente de autenticación != Única autenticación.
    Muchos vendedores de LDAP tratan de venderlo diciendo que si implementas LDAP tendrás una solución de autenticación única.
    Es una verdad a medias. La autenticación única es algo totalmente diferente y difícil de conseguir, y que planea estos días sobre los IT Managers.
    Autenticación única es, por ejemplo:

    De acuerdo que puedes usar LDAP como fuente de información única del usuario, pero la magia de controlar las sesiones entre diferentes programas es lo llamado "autenticación única" y no tiene nada que ver con LDAP.
    Se puede hacer con LDAP, NIS, cuentas de un dominio NT, bases de datos, ficheros planos...

    Idea Puedes querer dar a unos usuarios cuentas de correo en tus servidores, pero no crear cuentas de unix. Ningún problema. Yo uso una combinación de LDAP, Postfix MailServer y Cyrus IMAP/POP Server para controlar miles de usuarios y ninguno de ellos tiene una cuenta en el sistema.

    Idea Puedes querer centralizar las preferencias para diferentes aplicaciones. Por ejemplo, preferencias de Netscape, bookmarks etc se pueden guardar en LDAP, y el usuario se puede mover de una máquina a otra, recibiendo sus preferencias de un servidor LDAP. El usuarios puede cambiarse de un Netscape de Windows NT a un Netscape de Linux/Solaris/Macintosh y puede usar la misma información. (Lo siento Microsoft... se que esto es muy malo para vosotros).

    Escenario Odio rellenar my información una vez y otra tanto en la web como en papel. No se porqué la gente quiere saber una vez y otra mi edad, fecha de nacimiento, dirección... cuando ya se las he dado una vez. En mi última empresa, tuvimos que hacer enormes formularios para el Help-Desk, que eran básicamente el 75% de lo mismo (nombre, apellido, cargo, dirección, piso, nombre del jefe, departamento). En lugar de agobiar a los usuarios y arriesgarse a que te peguen una paliza por la noche, lo mejor es preguntarles a los usuarios solo la información necesaria. Por ejemplo, pídeles su userid y obtén el resto de la información del LDAP, y pregúntales solo los datos que te falten.

    Idea Por ejemplo, si no me va el teléfono, la única información nueva que tengo para ti es 'no me va el teléfono'.

    A un usuario le agobiará menos la intranet si:

  • El usuario escribe la url del formulario de problemas (O clicka un enlace de su página de bookmarks)
  • La página le pregunta al usuario su usuario y password (solo una vez cada sesión. En las siguientes visitas a esta página o otras páginas protegidas, el sistema recordará su información)
  • La página tiene dos partes: 1) áread de texto donde reportar el problema y 2) botón de envío.

    Escribe artículos: enseña y aprende

    Espero que con este artículo, te pueda ayudar de alguna manera, o colmar tu cerebro hambriento con algunos 10011001001001.
    Ya ves, no tienes que ser un experto para compartir tu conocimiento con la comunidad. Ni tienes que ser un profesor para escribir tutoriales. Cualquier información, por pequeña que sea, puede ayudar a los usuarios.
    Personalmente, encuentro más fácil aprender si trato de enseñarle a alguien lo que he aprendido. Puedes probar esta técnica...

    Afortunadamente, estos días se ve a mucha gente hablando sobre linux. Se ven a muchos de ellos probándolo. Algunos se rinden enseguida, pero otros aguantan más. Puede que no tengan ni idea ni ninguna experiencia con el concepto y los comandos de unix. Algunos se atascan en algunos problemas mucho tiempo.
    Si tú te has enfrentado a estos problemas recientemente, eres la mejor persona para enseñarles.

    Si crees que no tienes nada sobre loque escribir, puedes aún ayudar a la comunidad Linux. Puedes dedicarte a traducir los artículos a tu idioma.

    Recursos

    Módulo PAM LDAP
    El módulo pam_ldap proporciona los medios a las estaciones Solaris y Linux para autenticarse contra directorios LDAP, y para cambiar sus passwords en el directorio.
    openLDAP
    El proyecto OpenLDAP es un esfuerzo de colaboración para desarrollar una suite de aplicaciones y herramientas de desarrollo LDAP con código libre, que sear robusta, comercial y completa. El proyecto está dirigido por una comunidad mundial de voluntarios que usa internet para comunicarse, planear y desarrollar la Suite OpenLDAP y su documentación.
    Excelente navegador/editor LDAP hecho en Java
    El navegador/editor LDAP proporciona un interfase amigable a los directorios LDAP con capacidades bien integradas de navegación y edición. Está escrito completamente en Java con la ayuda de las librerías de clases JFC (SwingSet) y JNDI. Es capaz de conectar con servidores LDAP de v2 y v3.
    kldap
    kldap es un cliente LDAP (navegador) para el KDE. Puedes navegar por el árbol de manera similar a como lo haces en el Novell Administrator.
    http://freshmeat.net/search.php3?query=ldap
    Montones de utilidades LDAP en Freshmeat.
    http://www.redbooks.ibm.com/abstracts/sg245110.html
    LDAP Implementation Cookbook, de IBM
    Puedes ver el libro online o pedir una copia en papel.
    ypldapd: una pasarela nis a ldap
    Ypldapd es un servicio de información de red (NIS, del inglés Network Information Service) que usa LDAP como su fuente de información. Si usas ypldapd, los clientes de NIS ya existentes pueden usar LDAP de manera transparente para resolver el usuario, grupo e información de host. Las empresas pueden entonces descubrir los beneficios de LDAP, como su distribución y escalabilidad, sin tener que actualizar los clientes. Usado junto con tecnologías de servidor de LDAP como el Directory Server de Netscape, ypldapd puede proporcionar autenticación única tanto a clientes NT como UNIX.
    Introducción a SLAPD y Guía de Administración de SLURPD
    Imprescindible. Montones de información sobre el protocolo LDAP y los servidores LDAP.
    An LDAP RaodMap & FAQ
    Un tutorial para navegar sobre varios Servicios de Directorio LDAP y X.500 con recursos de Internet.
    http://www.umich.edu/~dirsvcs/ldap/index.html
    Lightweight Directory Access Protocol