aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFernando Apesteguía <fernape@FreeBSD.org>2022-08-11 08:31:32 +0000
committerFernando Apesteguía <fernape@FreeBSD.org>2022-08-12 14:51:03 +0000
commit14987e1630f6db48f48d0142c45ee371898eca54 (patch)
tree53d96893a3ecc138f8c989463f8791e62270456b
parentc7897c47b078dd5703a0b905415b9640874a5240 (diff)
downloaddoc-14987e1630.tar.gz
doc-14987e1630.zip
[doc-es][articles/ldap-auth] Translate article.
-rw-r--r--documentation/content/es/articles/ldap-auth/_index.adoc705
-rw-r--r--documentation/content/es/articles/ldap-auth/_index.po1910
2 files changed, 2615 insertions, 0 deletions
diff --git a/documentation/content/es/articles/ldap-auth/_index.adoc b/documentation/content/es/articles/ldap-auth/_index.adoc
new file mode 100644
index 0000000000..7e08784e5b
--- /dev/null
+++ b/documentation/content/es/articles/ldap-auth/_index.adoc
@@ -0,0 +1,705 @@
+---
+authors:
+ -
+ author: 'Toby Burress'
+ email: kurin@causa-sui.net
+copyright: '2007-2008 The FreeBSD Documentation Project'
+description: 'Guía para la configuración de un servidor de autenticación LDAP en FreeBSD'
+tags: ["LDAP", "Authentication", "OpenLDAP", "configuration", "guide", "tutorial", "FreeBSD"]
+title: 'Autenticación LDAP'
+trademarks: ["freebsd", "general"]
+---
+
+= Autenticación LDAP
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/ldap-auth/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+[.abstract-title]
+Resumen
+
+Este documento pretende ser una guía para la configuración de un servidor LDAP (principalmente un servidor OpenLDAP) para la autenticación en FreeBSD. Esto es útil para situaciones en las que muchos servidores necesitan las mismas cuentas de usuario, por ejemplo, como reemplazo de NIS.
+
+'''
+
+toc::[]
+
+[[preface]]
+== Prólogo
+
+Este documento está destinado a proporcionar al lector una comprensión suficiente de LDAP para configurar un servidor LDAP. Este documento intentará proporcionar una explicación de package:net/nss_ldap[] y package:security/pam_ldap[] para usarlos con los servicios de la máquina del cliente para su uso con el servidor LDAP.
+
+Cuando termine, el lector debería poder configurar e implementar un servidor FreeBSD que pueda alojar un directorio LDAP, y configurar e implementar un servidor FreeBSD que pueda autenticarse en un directorio LDAP.
+
+Este artículo no pretende ser una explicación exhaustiva de las consideraciones de seguridad, robustez o mejores prácticas para configurar LDAP u otros de los servicios que se explican aquí. Aunque el autor tiene cuidado de hacer todo correctamente, no aborda los problemas de seguridad más allá del alcance general. Este artículo debe tenerse en cuenta para sentar las bases teóricas únicamente, y cualquier implementación real debe ir acompañado de un análisis cuidadoso de los requisitos.
+
+[[ldap]]
+== Configurando LDAP
+
+LDAP significa "Lightweight Directory Access Protocol" (Protocolo Ligero de Acceso a Directorio) y es un subconjunto del Protocolo de Acceso a Directorio X.500. Su especificación más reciente se encuentra en http://www.ietf.org/rfc/rfc4510.txt[RFC4510]. En esencia es una base de datos que espera recibir muchas más consultas que escrituras.
+
+En los ejemplos de este documento se utilizará el servidor LDAP http://www.openldap.org/[OpenLDAP]; aunque los procedimientos deberían ser aplicables a los diferentes servidores, la mayor parte de la administración es específica de OpenLDAP. Hay varias versiones del servidor en la colección de ports, por ejemplo, package:net/openldap24-server[]. Los clientes necesitarán las librerías necesarias del paquete package:net/openldap24-client[].
+
+Hay (básicamente) dos áreas del servicio LDAP que necesitan configuración. Lo primero es configurar un servidor para recibir conexiones correctamente, y lo segundo es añadir entradas al directorio del servidor para que las herramientas de FreeBSD sepan como interactuar con él.
+
+[[ldap-connect]]
+=== Configurar el Servidor para recibir Conexiones
+
+[NOTE]
+====
+Esta sección es específica de OpenLDAP. Si usas otro servidor, necesitarás consultar su propia documentación.
+====
+
+[[ldap-connect-install]]
+==== Instalando OpenLDAP
+
+Primero, instala OpenLDAP:
+
+[[oldap-install]]
+.Instalando OpenLDAP
+[example]
+====
+
+[source, shell]
+....
+# cd /usr/ports/net/openldap24-server
+# make install clean
+....
+
+====
+
+Esto instala los binarios `slapd` y `slurpd`, junto con las librerías OpenLDAP necesarias.
+
+[[ldap-connect-config]]
+==== Configurando OpenLDAP
+
+Después necesitamos configurar OpenLDAP.
+
+Es necesario que hagas obligatorio el uso de cifrado en tus conexiones al servidor LDAP; de lo contrario, las contraseñas de sus usuarios se transferirán en texto plano, lo que se considera inseguro. Las herramientas que utilizaremos admiten dos tipos muy similares de encriptación, SSL y TLS.
+
+TLS significa "Seguridad en Capa de Transporte" (Transportation Layer Security). Los servicios que utilizan TLS suelen conectarse _a los mismos_ puertos que los servicios que no utilizan TLS; por lo tanto un servidor SMTP que soporta TLS escuchará conexiones en el puerto 25 y un servidor LDAP escuchará conexiones en 389.
+
+SSL significa "Capa de Sockets Seguros" (Secure Sockets Layer) y los servicios que implementan SSL _no_ escuchan en los mismos puertos que sus equivalentes sin SSL. Por lo tanto SMTPS escucha en el puerto 465 (no en el 25), HTTPS escucha en el 443 y LDAPS en el 636.
+
+La razón por la que SSL utiliza un puerto diferente a TLS es porque una conexión TLS empieza como texto plano y cambia al tráfico cifrado después de la directiva `STARTTLS`. Las conexiones SSL se cifran desde el principio. Aparte de eso, no hay diferencias sustanciales entre ambos.
+
+[NOTE]
+====
+Ajustaremos OpenLDAP para que utilice TLS ya que SSL se considera obsoleto.
+====
+
+Una vez que hemos instalado OpenLDAP, los siguientes parámetros en [.filename]#/usr/local/etc/openldap/slapd.conf# habilitarán el uso de TLS:
+
+[.programlisting]
+....
+security ssf=128
+
+TLSCertificateFile /path/to/your/cert.crt
+TLSCertificateKeyFile /path/to/your/cert.key
+TLSCACertificateFile /path/to/your/cacert.crt
+....
+
+En este caso, `ssf=128` indica a OpenLDAP que solicite una encriptación de 128 bits para todas las conexiones, tanto para búsquedas como para actualizaciones. Este parámetro se podría configurar según las necesidades de seguridad de tu sitio web, pero es raro que necesites rebajarlo ya que la mayoría de las librerías cliente de LDAP soportan encriptación fuerte.
+
+Los ficheros [.filename]#cert.crt#, [.filename]#cert.key#, y [.filename]#cacert.crt# son necesarios para que los clientes te autentiquen _a ti_ como el servidor LDAP válido. Si sólo quieres ejecutar un servidor, puedes crear un certificado auto firmado con OpenSSL:
+
+[[genrsa]]
+.Generar una Clave RSA
+[example]
+====
+
+[source, shell]
+....
+% openssl genrsa -out cert.key 1024
+Generating RSA private key, 1024 bit long modulus
+....................++++++
+...++++++
+e is 65537 (0x10001)
+
+% openssl req -new -key cert.key -out cert.csr
+....
+
+====
+
+En este punto se te deberían preguntar algunos valores. Podrías introducir los valores que quisieras; sin embargo, es importante que el valor de "Common Name" sea el nombre de dominio del servidor LDAP completamente cualificado. En nuestro caso, y en los ejemplos, el servidor es _server.example.org_. Establecer este valor incorrectamente hará que los clientes no puedan conectar. Esto puede causar una gran frustración así que asegúrate de que sigues estos pasos con cuidado.
+
+Finalmente, el certificado debe firmarse:
+
+[[self-sign]]
+.Autofirmar el certificado
+[example]
+====
+
+[source, shell]
+....
+% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt
+Signature ok
+subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
+Getting Private key
+....
+
+====
+
+Esto creará un certificado auto firmado que puede ser usado para las directivas en [.filename]#slapd.conf#, donde [.filename]#cert.crt# y [.filename]#cacert.crt# son el mismo fichero. Si vas a utilizar muchos servidores OpenLDA (para replicación vía `slurpd`) querrás echar un vistazo a <<ssl-ca>> para generar una clave CA y usarla para firmar los certificados de servidor individuales.
+
+Una vez hecho esto, escribe lo siguiente en [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+slapd_enable="YES"
+....
+
+Después ejecuta `/usr/local/etc/rc.d/slapd start`. Esto debería arrancar OpenLDAP. Confirma que está escuchando en el puerto 389 con
+
+[source, shell]
+....
+% sockstat -4 -p 389
+ldap slapd 3261 7 tcp4 *:389 *:*
+....
+
+[[ldap-connect-client]]
+==== Configurar el Cliente
+
+Instala el port package:net/openldap24-client[] para obtener las librerías de OpenLDAP. Las máquinas cliente siempre tendrán las librerías de OpenLDAP pues que eso es lo único que soportan package:security/pam_ldap[] y package:net/nss_ldap[], al menos por el momento.
+
+El fichero de configuración para las librerías de OpenLDAP es [.filename]#/usr/local/etc/openldap/ldap.conf#. Edita este fichero para que contenga los siguientes valores:
+
+[.programlisting]
+....
+base dc=example,dc=org
+uri ldap://server.example.org/
+ssl start_tls
+tls_cacert /path/to/your/cacert.crt
+....
+
+[NOTE]
+====
+Es importante que tus clientes tengan acceso a [.filename]#cacert.crt#, de lo contrario no podrán conectarse.
+====
+
+[NOTE]
+====
+Hay dos ficheros que se llaman [.filename]#ldap.conf#. El primero es este fichero, que es para las librerías OpenLDAP y define cómo hablar con el servidor. El segundo es [.filename]#/usr/local/etc/ldap.conf# y es para pam_ldap.
+====
+
+En este punto deberías ser capaz de ejecutar `ldapsearch -Z` en la maquina cliente; `-Z` significa "usa TLS". Si encuentras un error, entonces algo está mal configurado; seguramente sean tus certificados. Utiliza los comandos `s_client` y `s_server` de man:openssl[1] para asegurarte de que están correctamente configurados y firmados.
+
+[[ldap-database]]
+=== Entradas en la base de datos
+
+La autenticación en un directorio LDAP se logra generalmente al intentar vincularse al directorio como el usuario que se conecta. Esto se realiza mediante el establecimiento de un enlace "simple" en el directorio con el nombre de usuario proporcionado. Si hay una entrada con el `uid` igual al nombre de usuario y el atributo `userPassword` de la entrada coincide con la contraseña proporcionada, el enlace tiene éxito.
+
+Lo primero que tenemos que hacer es averiguar en qué parte del directorio estarán nuestros usuarios.
+
+La entrada base de nuestra base de datos es `dc=example,dc=org`. La mayoría de los clientes esperan una localización para los usuarios que sea algo como `ou=people,_base_` así que es lo que se usará aquí. Sin embargo, ten en cuenta que esto es configurable.
+
+Así que la entrada ldif para la unidad organizacional `people` se parecerá a:
+
+[.programlisting]
+....
+dn: ou=people,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: people
+....
+
+Todos los usuarios se crearán como subentradas de esta unidad organizativa.
+
+Se podría pensar en la clase de objeto a la que pertenecerán sus usuarios. Por defecto, la mayoría de las herramientas utilizarán `people`, lo cual está bien si simplemente quieres proporcionar entradas para la autenticación. Sin embargo, si también vas a almacenar información de usuario en la base de datos LDAP, probablemente quieras usar `inetOrgPerson`, el cual dispone de muchos atributos útiles. En cualquier caso, los esquemas relevantes deben introducirse en el archivo [.filename]#slapd.conf#.
+
+Para este ejemplo utilizaremos la clase de objeto `person`. Si usas `inetOrgPerson`, los pasos son básicamente iguales, con la excepción de que se requiere el atributo `sn`.
+
+Para añadir un usuario de pruebas llamado `tuser`, el ldif sería:
+
+[.programlisting]
+....
+dn: uid=tuser,ou=people,dc=example,dc=org
+objectClass: person
+objectClass: posixAccount
+objectClass: shadowAccount
+objectClass: top
+uidNumber: 10000
+gidNumber: 10000
+homeDirectory: /home/tuser
+loginShell: /bin/csh
+uid: tuser
+cn: tuser
+....
+
+Yo empiezo los UIDs de mis usuarios de LDAP en el 10000 para evitar conflictos con las cuentas del sistema; puedes establecer el número que desees aquí, siempre que sea inferior a 65536.
+
+También necesitamos entradas grupales. Son tan configurables como las entradas de usuario, pero usaremos los valores predeterminados que se muestran a continuación:
+
+[.programlisting]
+....
+dn: ou=people,dc=example,dc=org
+objectClass: top
+objectClass: organizationalUnit
+ou: people
+
+dn: cn=tuser,ou=groups,dc=example,dc=org
+objectClass: posixGroup
+objectClass: top
+gidNumber: 10000
+cn: tuser
+....
+
+Para introducir estos en tu base de datos, puedes utilizar `slapadd` o `ldapadd` en un fichero que contenga esas entradas. De forma alternativa, puedes utilizar package:sysutils/ldapvi[].
+
+La utilidad `ldapsearch` en la máquina del cliente debería devolver estas entradas. Si es así, la base de datos está configurada correctamente para ser utilizada como un servidor de autenticación LDAP.
+
+[[client]]
+== Configuración del Cliente
+
+El cliente ya debería tener las librerías de OpenLDAP de <<ldap-connect-client>>, pero si estás instalando varias máquinas cliente, necesitarás instalar package:net/openldap24-client[] en cada una de ellas.
+
+FreeBSD requiere de la instalación de dos ports para autenticarse en un servidor LDAP, package:security/pam_ldap[] y package:net/nss_ldap[].
+
+[[client-auth]]
+=== Autenticación
+
+package:security/pam_ldap[] se configura en el fichero [.filename]#/usr/local/etc/ldap.conf#.
+
+[NOTE]
+====
+Este fichero es _diferente_ del fichero de configuración de las librerías de OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; sin embargo, tiene muchas de las mismas opciones; de hecho es un superconjunto de ese fichero. En lo que queda de sección, referencias a [.filename]#ldap.conf# se refieren a [.filename]#/usr/local/etc/ldap.conf#.
+====
+
+Por lo tanto, queremos copiar todos nuestros parámetros de configuración originales de [.filename]#openldap/ldap.conf# al nuevo [.filename]#ldap.conf#. Una vez hecho esto, le indicaremos a package:security/pam_ldap[] qué buscar en el servidor de directorio.
+
+Estamos identificando nuestros usuarios mediante el atributo `uid`. Para configurarlo (aunque es el valor por defecto), establece la directiva `pam_login_attribute` en [.filename]#ldap.conf#:
+
+[[set-pam-login-attr]]
+.Estableciendo `pam_login_attribute`
+[example]
+====
+
+[.programlisting]
+....
+pam_login_attribute uid
+....
+
+====
+
+Con esto ya establecido, package:security/pam_ldap[] buscará el valor `uid=_username_` en todo el directorio LDAP bajo `base`. Si encuentra una sola entrada, intentará vincular a ese usuario con la contraseña que se le ha pasado. Se vincula correctamente, entonces permitirá el acceso. En cualquier otro caso fallará.
+
+Los usuarios cuyo shell no esté en [.filename]#/etc/shells# no podrán iniciar sesión. Esto es muy importante cuando se configura Bash como la shell de usuario en el servidor LDAP. Bash no está incluido en la instalación estándar de FreeBSD. Cuando se instala desde un paquete o port, se encuentra en el directorio [.filename]#/usr/local/bin/bash#. Comprueba que la ruta a la shell en el servidor esté configurada correctamente:
+
+[source, shell]
+....
+% getent passwd username
+....
+
+Hay dos opciones cuando en la salida se muestra `/bin/bash` en la última columna. La primera es cambiar en el servidor LDAP la entrada del usuario para que apunte a [.filename]#/usr/local/bin/bash#. La segunda es crear un enlace simbólico en la máquina LDAP cliente de forma que se pueda encontrar Bash en el lugar correcto:
+
+[source, shell]
+....
+# ln -s /usr/local/bin/bash /bin/bash
+....
+
+Asegúrate de que [.filename]#/etc/shells# contiene las entradas tanto para `/usr/local/bin/bash` como para `/bin/bash`. El usuario ya será capaz de logearse en el sistema utilizando Bash como shell.
+
+[[client-auth-pam]]
+==== PAM
+
+PAM, que significa "Pluggable Authentication Modules", es el método por el cual FreeBSD autentica la mayoría de sus sesiones. Para decirle a FreeBSD que queremos usar un servidor LDAP, tendremos que añadir una línea al archivo PAM apropiado.
+
+La mayoría de las veces el fichero PAM apropiado es [.filename]#/etc/pam.d/sshd#, si quieres usar SSH (recuerda establecer las opciones correspondientes en [.filename]#/etc/ssh/sshd_config#, de lo contrario SSH no usará PAM).
+
+Para usar PAM para la autenticación, añade la línea
+
+[.programlisting]
+....
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
+....
+
+El lugar exacto en el que aparece esta línea en el fichero y las opciones que aparecen en la cuarta columna determinan el comportamiento exacto del mecanismo de autenticación; lee man:pam[d]
+
+Con esta configuración deberías ser capaz de autenticar un usuario contra un directorio LDAP. PAM realizará un vínculo con tus credenciales, y si tiene éxito le dirá a SSH que permita el acceso.
+
+Sin embargo, no es buena idea permitir que _cada_ usuario del directorio pueda acceder a _todos_ las máquinas clientes. Con la configuración actual, todo lo que necesita un usuario para iniciar sesión en una máquina es una entrada LDAP. Afortunadamente, hay algunas formas de restringir el acceso de los usuarios.
+
+[.filename]#ldap.conf# admite la directiva `pam_groupdn`; cada cuenta que se conecta a esta máquina debe ser miembro del grupo especificado aquí. Por ejemplo, si tienes
+
+[.programlisting]
+....
+pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org
+....
+
+en [.filename]#ldap.conf#, solo los miembros de este grupo podrán iniciar sesión. Sin embargo hay algunas cosas a tener en cuenta.
+
+Los miembros de este grupo se especifican en uno o más atributos `memberUid` y cada atributo debe tener el nombre completamente unívoco del miembro. Entonces `memberUid: someuser` no funcionará; debe ser:
+
+[.programlisting]
+....
+memberUid: uid=someuser,ou=people,dc=example,dc=org
+....
+
+Además, esta directiva no se verifica en PAM durante la autenticación, se verifica durante la administración de la cuenta, por lo que necesitarás añadir más configuraciones en tus archivos de PAM en la sección de `account`. Esto, a su vez, requerirá que _cada_ usuario se incluya en el grupo, lo cual no es necesariamente lo que queremos. Para evitar bloquear usuarios que no están en LDAP, debes habilitar el atributo `ignore_unknown_user`. Finalmente, debes configurar la opción `ignore_authinfo_unavail` para que el usuario no quede bloqueado en todos los ordenadores cuando el servidor LDAP no esté disponible.
+
+Tu [.filename]#pam.d/sshd# podría parecerse a esto:
+
+[[pam]]
+.Ejemplo de [.filename]#pam.d/sshd#
+[example]
+====
+
+[.programlisting]
+....
+auth required pam_nologin.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn allow_local
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
+auth required pam_unix.so no_warn try_first_pass
+
+account required pam_login_access.so
+account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user
+....
+
+====
+
+[NOTE]
+====
+Como estamos añadiendo estas líneas específicamente a [.filename]#pam.d/sshd#, esto solo tendrá efecto en las sesiones SSH. Los usuarios de LDAP no podrán iniciar sesión por consola. Para cambiar este comportamiento, examina los otros archivos en [.filename]#/etc/pam.d# y modifícalos como corresponda.
+====
+
+[[client-nss]]
+=== Name Service Switch
+
+NSS es el servicio que mapea atributos a nombres. Por ejemplo, si un fichero es propiedad del usuario `1001`, una aplicación preguntará a NSS por el nombre de `1001` y podría obtener `bob` o `ted` o el cualquiera que sea el nombre del usuario.
+
+Ahora que tenemos nuestra información en LDAP, necesitamos decirle a NSS que mire ahí cuando se le hagan preguntas.
+
+Est es lo que hace el port package:net/nss_ldap[]. Utiliza el mismo archivo de configuración que package:security/pam_ldap[], y no debería necesitar ningún parámetro adicional después de su instalación. En cambio, solo quedaría editar el archivo [.filename]#/etc/nsswitch.conf# para aprovechar el directorio. Simplemente cambia las siguientes líneas:
+
+[.programlisting]
+....
+group: compat
+passwd: compat
+....
+
+por
+
+[.programlisting]
+....
+group: files ldap
+passwd: files ldap
+....
+
+Esto te permitirá asignar nombres de usuario a UIDs y UIDs a nombres de usuario.
+
+¡Felicidades! Ahora deberías tener la autenticación de LDAP en funcionamiento.
+
+[[caveats]]
+=== Advertencias
+
+Desafortunadamente, en el momento de escribir esto FreeBSD no soportaba cambiar las contraseñas de usuario con man:passwd[1]. Como resultado, la mayoría de los administradores tienen que implementar una solución por ellos mismos. Aquí proporciono algunos ejemplos. Observa que si escribes tu propio script de cambio de contraseñas deberías tener en cuenta algunas consideraciones de seguridad; lee <<security-passwd>>
+
+[[chpw-shell]]
+.Shell Script para Cambiar Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+#!/bin/sh
+
+stty -echo
+read -p "Old Password: " oldp; echo
+read -p "New Password: " np1; echo
+read -p "Retype New Password: " np2; echo
+stty echo
+
+if [ "$np1" != "$np2" ]; then
+ echo "Passwords do not match."
+ exit 1
+fi
+
+ldappasswd -D uid="$USER",ou=people,dc=example,dc=org \
+ -w "$oldp" \
+ -a "$oldp" \
+ -s "$np1"
+....
+
+====
+
+[CAUTION]
+====
+
+Este script apenas verifica errores, pero lo más importante es el poco cuidado con el que almacena sus contraseñas. Si haces algo como esto, establece al menos el valor de `security.bsd.see_other_uids`:
+
+[source, shell]
+....
+# sysctl security.bsd.see_other_uids=0
+....
+
+====
+
+Se puede utilizar un enfoque más flexible (y probablemente más seguro) escribiendo un programa personalizado o incluso una interfaz web. Lo siguiente es parte de una librería de Ruby que puede cambiar las contraseñas LDAP. Se puede usar por línea de comandos y en la web.
+
+[[chpw-ruby]]
+.Script en Ruby para Cambiar las Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+require 'ldap'
+require 'base64'
+require 'digest'
+require 'password' # ruby-password
+
+ldap_server = "ldap.example.org"
+luser = "uid=#{ENV['USER']},ou=people,dc=example,dc=org"
+
+# get the new password, check it, and create a salted hash from it
+def get_password
+ pwd1 = Password.get("New Password: ")
+ pwd2 = Password.get("Retype New Password: ")
+
+ raise if pwd1 != pwd2
+ pwd1.check # check password strength
+
+ salt = rand.to_s.gsub(/0\./, '')
+ pass = pwd1.to_s
+ hash = "{SSHA}"+Base64.encode64(Digest::SHA1.digest("#{pass}#{salt}")+salt).chomp!
+ return hash
+end
+
+oldp = Password.get("Old Password: ")
+newp = get_password
+
+# We'll just replace it. That we can bind proves that we either know
+# the old password or are an admin.
+
+replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,
+ "userPassword",
+ [newp])
+
+conn = LDAP::SSLConn.new(ldap_server, 389, true)
+conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
+conn.bind(luser, oldp)
+conn.modify(luser, [replace])
+....
+
+====
+
+Aunque no se garantiza que esté a salvo de agujeros de seguridad (la contraseña se guarda en memoria, por ejemplo), esto es más limpio y más flexible que un simple script `sh`.
+
+[[secure]]
+== Consideraciones de Seguridad
+
+Ahora que tus máquinas (y posiblemente otros servicios) se están autenticando contra su servidor LDAP, este servidor tiene que estar protegido, así como [.filename]#/etc/master.passwd# estaría en un servidor normal, y posiblemente aún más puesto que un servidor LDAP corrupto o comprometido rompería todos los servicios del cliente.
+
+Recuerda, esta sección no es exhaustiva. Debes revisar continuamente tu configuración y procedimientos para mejorarlos.
+
+[[secure-readonly]]
+=== Establecer Atributos de Solo Lectura
+
+Varios atributos en LDAP deberían ser de sólo lectura. Si el usuario pudiera escribirlos, por ejemplo, un usuario podría cambiar su `uidNumber` a `0` ¡y obtener acceso `root`!
+
+Para empezar, el atributo `userPassword` no debe ser legible por todo el mundo. Por defecto, cualquiera que pueda conectarse al servidor LDAP puede leer este atributo. Para deshabilitar esto, usa la siguiente configuración en el archivo [.filename]#slapd.conf#:
+
+[[hide-userpass]]
+.Ocultar Contraseñas
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attrs=userPassword
+ by self write
+ by anonymous auth
+ by * none
+
+access to *
+ by self write
+ by * read
+....
+
+====
+
+Esto evitará que se pueda leer el atributo `userPassword`, a la vez que seguirá permitiendo a los usuarios cambiar sus propias contraseñas.
+
+Además, querrás evitar que los usuarios cambien algunos de sus atributos. De forma predeterminada, los usuarios pueden cambiar cualquier atributo (excepto aquellos en los que los esquemas LDAP mismos niegan cambios), como `uidNumber`. Para cerrar este agujero, modifica lo anterior a
+
+[[attrib-readonly]]
+.Atributos de Solo Lectura
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attrs=userPassword
+ by self write
+ by anonymous auth
+ by * none
+
+access to attrs=homeDirectory,uidNumber,gidNumber
+ by * read
+
+access to *
+ by self write
+ by * read
+....
+
+====
+
+Esto evitará que los usuarios puedan hacerse pasar por otros usuarios.
+
+[[secure-root]]
+=== Definición de la Cuenta `root`
+
+Habitualmente la cuenta `root` o la cuenta del gestor para el servicio de LDAP estará definida en el fichero de configuración. Por ejemplo, OpenLDAP soporta esto y funciona, pero puede dar lugar a problemas si [.filename]#slapd.conf# se ve comprometido. Sería mejor usar esto sólo para entrar en LDAP y después definir ahí una cuenta `root`.
+
+Es incluso mejor definir cuentas que tengan permisos limitados y omitir completamente la cuenta `root`. Por ejemplo, los usuarios que pueden crear o eliminar cuentas de usuario se añaden a un grupo, pero ellos mismos no pueden cambiar la pertenencia a este grupo. Esta política de seguridad ayudaría a mitigar los efectos de una contraseña que se haya podido filtrar.
+
+[[manager-acct]]
+==== Crear un Grupo de Mantenimiento
+
+Supongamos que quieres que tu departamento de TI pueda cambiar los directorios home de los usuarios, pero no quieres que todos puedan añadir o eliminar usuarios. La forma de hacerlo es agregar un grupo para estos administradores:
+
+[[manager-acct-dn]]
+.Crear un Grupo de Mantenimiento
+[example]
+====
+
+[.programlisting]
+....
+dn: cn=homemanagement,dc=example,dc=org
+objectClass: top
+objectClass: posixGroup
+cn: homemanagement
+gidNumber: 121 # required for posixGroup
+memberUid: uid=tuser,ou=people,dc=example,dc=org
+memberUid: uid=user2,ou=people,dc=example,dc=org
+....
+
+====
+
+Y luego cambia los atributos de los permisos en [.filename]#slapd.conf#:
+
+[[management-acct-acl]]
+.ACLs para el Grupo de Administración del Directorio Home
+[example]
+====
+
+[.programlisting]
+....
+access to dn.subtree="ou=people,dc=example,dc=org"
+ attr=homeDirectory
+ by dn="cn=homemanagement,dc=example,dc=org"
+ dnattr=memberUid write
+....
+
+====
+
+Ahora el usuario `tuser` y el `user2` pueden cambiar los directorios home del otro.
+
+En este ejemplo hemos concedido un subconjunto de poderes administrativos a algunos usuarios sin darles poder en otros dominios. La idea es que pronto ninguna cuenta de usuario tenga el poder de la cuenta de `root`, pero cada poder que tenga root lo tiene como mínimo algún otro usuario. Entonces la cuenta `root` se hace innecesaria y se puede eliminar.
+
+[[security-passwd]]
+=== Almacenamiento de Contraseña
+
+OpenLDAP almacenará por defecto el valor del atributo `userPssword` de la misma forma que cualquier otro dato: en plano. La mayoría de las veces está codificado en base 64 lo que proporciona suficiente protección para evitar que un administrador honesto conozca tu contraseña, pero poco más.
+
+Por lo tanto, es buena idea almacenar las contraseñas en un formato más seguro, como SSHA (salted SHA). Esto lo hace cualquier programa que uses para cambiar las contraseñas de los usuarios.
+
+:sectnums!:
+
+[appendix]
+[[useful]]
+== Consideraciones Útiles
+
+Hay otros programas que pueden ser útiles, especialmente si tienes muchos usuarios y no quieres configurarlo todo manualmente.
+
+package:security/pam_mkhomedir[] es un módulo de PAM que siempre funciona; su propósito es crear directorios home para los usuarios que no los tienen. Si tienes docenas de servidores cliente y cientos de usuarios, es mucho más fácil usarlo y configurar un directorio tipo plantilla para cada directorio home.
+
+package:sysutils/cpu[] es una utilidad tipo man:pw[8] que se puede usar para gestionar usuarios en el directorio LDAP. Puedes llamarlo directamente o envolverlo en un script. Puede gestionar tanto TLS (con el flag `-x`) como SSL (directamente).
+
+package:sysutils/ldapvi[] es una utilidad de gran ayuda para editar valores LDAP en una sintaxis similar a LDIF. El directorio (o subsección del directorio) se muestra en el editor elegido por la variable de entorno `EDITOR`. Esto facilita la realización de cambios de directorio a gran escala sin escribir una herramienta personalizada.
+
+package:security/openssh-portable[] tienen la capacidad de contactar con un servidor LDAP para verificar claves SSH. Esto es realmente útil si tienes muchos servidores y no quieres copiar tus claves públicas a todos ellos.
+
+:sectnums!:
+
+[appendix]
+[[ssl-ca]]
+== Certificados OpenSSL para LDAP
+
+Si alojas dos o más servidores LDAP, probablemente no quieras utilizar certificados autofirmados, ya que cada cliente deberá estar configurado para funcionar con cada certificado. Si bien esto es posible, no es tan simple como crear tu propia autoridad de certificación y firmar con ella los certificados de tus servidores.
+
+Los pasos se muestran aquí tal cual, sin ninguna intención de explicar lo que hacen - se puede encontrar más información en man:openssl[1] y amigos.
+
+Para crear una autoridad de certificación, simplemente necesitamos un certificado autofirmado y una clave. De nuevo, las instrucciones son
+
+[[make-cert]]
+.Crear un Certificado
+[example]
+====
+
+[source, shell]
+....
+% openssl genrsa -out root.key 1024
+% openssl req -new -key root.key -out root.csr
+% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt
+....
+
+====
+
+Estos serán tu clave CA y certificado root. Probablemente quieras cifrar la clave y almacenarla en un lugar freso y seco; cualquier persona con acceso a ella puede hacerse pasar por uno de tus servidores LDAP.
+
+A continuación, utilizando los dos pasos anteriores, crea la clave [.filename]#ldap-server-one.key# y la solicitud de firma de certificado [.filename]#ldap-server-one.csr#. Una vez que firmes la solicitud con la clave [.filename]#root.key#, podrás usar [.filename]#ldap-server-one.*# en tus servidores LDAP.
+
+[NOTE]
+====
+No olvides utilizar un fully qualified domain name (nombre de dominio completamente cualificado) para el atributo "common name" al generar la solicitud de firma del certificado; de lo contrario, los clientes rechazarán la conexión y esto puede ser muy difícil de diagnosticar.
+====
+
+Para firmar la clave utiliza `-CA` y `_CAkey` en lugar de `-signkey`:
+
+[[ca-sign]]
+.Firmar como Autoridad Certificadora
+[example]
+====
+
+[source, shell]
+....
+% openssl x509 -req -days 1024 \
+-in ldap-server-one.csr -CA root.crt -CAkey root.key \
+-out ldap-server-one.crt
+....
+
+====
+
+El archivo resultante será el certificado que puedes utilizar en sus servidores LDAP.
+
+Por último, para que los clientes confíen en todos tus servidores, distribuye [.filename]#root.crt# (el __certificado__, ¡no la clave!) a cada cliente y especifícalo en la directiva `TLSCACertificateFile` de [.filename]#ldap.conf#.
diff --git a/documentation/content/es/articles/ldap-auth/_index.po b/documentation/content/es/articles/ldap-auth/_index.po
new file mode 100644
index 0000000000..2a58d41fc6
--- /dev/null
+++ b/documentation/content/es/articles/ldap-auth/_index.po
@@ -0,0 +1,1910 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2022-08-12 06:38+0000\n"
+"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n"
+"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesldap-auth_index/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/ldap-auth/_index.adoc:1
+#, no-wrap
+msgid "Guide for the configuration of an LDAP server for authentication on FreeBSD"
+msgstr ""
+"Guía para la configuración de un servidor de autenticación LDAP en FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/ldap-auth/_index.adoc:1
+#: documentation/content/en/articles/ldap-auth/_index.adoc:12
+#, no-wrap
+msgid "LDAP Authentication"
+msgstr "Autenticación LDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumen"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:48
+msgid ""
+"This document is intended as a guide for the configuration of an LDAP server "
+"(principally an OpenLDAP server) for authentication on FreeBSD. This is "
+"useful for situations where many servers need the same user accounts, for "
+"example as a replacement for NIS."
+msgstr ""
+"Este documento pretende ser una guía para la configuración de un servidor "
+"LDAP (principalmente un servidor OpenLDAP) para la autenticación en FreeBSD. "
+"Esto es útil para situaciones en las que muchos servidores necesitan las "
+"mismas cuentas de usuario, por ejemplo, como reemplazo de NIS."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:54
+#, no-wrap
+msgid "Preface"
+msgstr "Prólogo"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:58
+msgid ""
+"This document is intended to give the reader enough of an understanding of "
+"LDAP to configure an LDAP server. This document will attempt to provide an "
+"explanation of package:net/nss_ldap[] and package:security/pam_ldap[] for "
+"use with client machines services for use with the LDAP server."
+msgstr ""
+"Este documento está destinado a proporcionar al lector una comprensión "
+"suficiente de LDAP para configurar un servidor LDAP. Este documento "
+"intentará proporcionar una explicación de package:net/nss_ldap[] y package:"
+"security/pam_ldap[] para usarlos con los servicios de la máquina del cliente "
+"para su uso con el servidor LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:60
+msgid ""
+"When finished, the reader should be able to configure and deploy a FreeBSD "
+"server that can host an LDAP directory, and to configure and deploy a "
+"FreeBSD server which can authenticate against an LDAP directory."
+msgstr ""
+"Cuando termine, el lector debería poder configurar e implementar un servidor "
+"FreeBSD que pueda alojar un directorio LDAP, y configurar e implementar un "
+"servidor FreeBSD que pueda autenticarse en un directorio LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:64
+msgid ""
+"This article is not intended to be an exhaustive account of the security, "
+"robustness, or best practice considerations for configuring LDAP or the "
+"other services discussed herein. While the author takes care to do "
+"everything correctly, they do not address security issues beyond a general "
+"scope. This article should be considered to lay the theoretical groundwork "
+"only, and any actual implementation should be accompanied by careful "
+"requirement analysis."
+msgstr ""
+"Este artículo no pretende ser una explicación exhaustiva de las "
+"consideraciones de seguridad, robustez o mejores prácticas para configurar "
+"LDAP u otros de los servicios que se explican aquí. Aunque el autor tiene "
+"cuidado de hacer todo correctamente, no aborda los problemas de seguridad "
+"más allá del alcance general. Este artículo debe tenerse en cuenta para "
+"sentar las bases teóricas únicamente, y cualquier implementación real debe "
+"ir acompañado de un análisis cuidadoso de los requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:66
+#, no-wrap
+msgid "Configuring LDAP"
+msgstr "Configurando LDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:71
+msgid ""
+"LDAP stands for \"Lightweight Directory Access Protocol\" and is a subset of "
+"the X.500 Directory Access Protocol. Its most recent specifications are in "
+"http://www.ietf.org/rfc/rfc4510.txt[RFC4510] and friends. Essentially it is "
+"a database that expects to be read from more often than it is written to."
+msgstr ""
+"LDAP significa \"Lightweight Directory Access Protocol\" (Protocolo Ligero "
+"de Acceso a Directorio) y es un subconjunto del Protocolo de Acceso a "
+"Directorio X.500. Su especificación más reciente se encuentra en http://www."
+"ietf.org/rfc/rfc4510.txt[RFC4510]. En esencia es una base de datos que "
+"espera recibir muchas más consultas que escrituras."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:75
+msgid ""
+"The LDAP server http://www.openldap.org/[OpenLDAP] will be used in the "
+"examples in this document; while the principles here should be generally "
+"applicable to many different servers, most of the concrete administration is "
+"OpenLDAP-specific. There are several server versions in ports, for example "
+"package:net/openldap24-server[]. Client servers will need the corresponding "
+"package:net/openldap24-client[] libraries."
+msgstr ""
+"En los ejemplos de este documento se utilizará el servidor LDAP http://www."
+"openldap.org/[OpenLDAP]; aunque los procedimientos deberían ser aplicables a "
+"los diferentes servidores, la mayor parte de la administración es específica "
+"de OpenLDAP. Hay varias versiones del servidor en la colección de ports, por "
+"ejemplo, package:net/openldap24-server[]. Los clientes necesitarán las "
+"librerías necesarias del paquete package:net/openldap24-client[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:78
+msgid ""
+"There are (basically) two areas of the LDAP service which need "
+"configuration. The first is setting up a server to receive connections "
+"properly, and the second is adding entries to the server's directory so that "
+"FreeBSD tools know how to interact with it."
+msgstr ""
+"Hay (básicamente) dos áreas del servicio LDAP que necesitan configuración. "
+"Lo primero es configurar un servidor para recibir conexiones correctamente, "
+"y lo segundo es añadir entradas al directorio del servidor para que las "
+"herramientas de FreeBSD sepan como interactuar con él."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:80
+#, no-wrap
+msgid "Setting Up the Server for Connections"
+msgstr "Configurar el Servidor para recibir Conexiones"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:86
+msgid ""
+"This section is specific to OpenLDAP. If you are using another server, you "
+"will need to consult that server's documentation."
+msgstr ""
+"Esta sección es específica de OpenLDAP. Si usas otro servidor, necesitarás "
+"consultar su propia documentación."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:89
+#: documentation/content/en/articles/ldap-auth/_index.adoc:94
+#, no-wrap
+msgid "Installing OpenLDAP"
+msgstr "Instalando OpenLDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:92
+msgid "First, install OpenLDAP:"
+msgstr "Primero, instala OpenLDAP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:102
+#, no-wrap
+msgid ""
+"# cd /usr/ports/net/openldap24-server\n"
+"# make install clean\n"
+msgstr ""
+"# cd /usr/ports/net/openldap24-server\n"
+"# make install clean\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:107
+msgid ""
+"This installs the `slapd` and `slurpd` binaries, along with the required "
+"OpenLDAP libraries."
+msgstr ""
+"Esto instala los binarios `slapd` y `slurpd`, junto con las librerías "
+"OpenLDAP necesarias."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:109
+#, no-wrap
+msgid "Configuring OpenLDAP"
+msgstr "Configurando OpenLDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:112
+msgid "Next we must configure OpenLDAP."
+msgstr "Después necesitamos configurar OpenLDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:115
+msgid ""
+"You will want to require encryption in your connections to the LDAP server; "
+"otherwise your users' passwords will be transferred in plain text, which is "
+"considered insecure. The tools we will be using support two very similar "
+"kinds of encryption, SSL and TLS."
+msgstr ""
+"Es necesario que hagas obligatorio el uso de cifrado en tus conexiones al "
+"servidor LDAP; de lo contrario, las contraseñas de sus usuarios se "
+"transferirán en texto plano, lo que se considera inseguro. Las herramientas "
+"que utilizaremos admiten dos tipos muy similares de encriptación, SSL y TLS."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:118
+msgid ""
+"TLS stands for \"Transportation Layer Security\". Services that employ TLS "
+"tend to connect on the _same_ ports as the same services without TLS; thus "
+"an SMTP server which supports TLS will listen for connections on port 25, "
+"and an LDAP server will listen on 389."
+msgstr ""
+"TLS significa \"Seguridad en Capa de Transporte\" (Transportation Layer "
+"Security). Los servicios que utilizan TLS suelen conectarse _a los mismos_ "
+"puertos que los servicios que no utilizan TLS; por lo tanto un servidor SMTP "
+"que soporta TLS escuchará conexiones en el puerto 25 y un servidor LDAP "
+"escuchará conexiones en 389."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:121
+msgid ""
+"SSL stands for \"Secure Sockets Layer\", and services that implement SSL do "
+"_not_ listen on the same ports as their non-SSL counterparts. Thus SMTPS "
+"listens on port 465 (not 25), HTTPS listens on 443, and LDAPS on 636."
+msgstr ""
+"SSL significa \"Capa de Sockets Seguros\" (Secure Sockets Layer) y los "
+"servicios que implementan SSL _no_ escuchan en los mismos puertos que sus "
+"equivalentes sin SSL. Por lo tanto SMTPS escucha en el puerto 465 (no en el "
+"25), HTTPS escucha en el 443 y LDAPS en el 636."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:125
+msgid ""
+"The reason SSL uses a different port than TLS is because a TLS connection "
+"begins as plain text, and switches to encrypted traffic after the `STARTTLS` "
+"directive. SSL connections are encrypted from the beginning. Other than "
+"that there are no substantial differences between the two."
+msgstr ""
+"La razón por la que SSL utiliza un puerto diferente a TLS es porque una "
+"conexión TLS empieza como texto plano y cambia al tráfico cifrado después de "
+"la directiva `STARTTLS`. Las conexiones SSL se cifran desde el principio. "
+"Aparte de eso, no hay diferencias sustanciales entre ambos."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:129
+msgid "We will adjust OpenLDAP to use TLS, as SSL is considered deprecated."
+msgstr ""
+"Ajustaremos OpenLDAP para que utilice TLS ya que SSL se considera obsoleto."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:132
+msgid ""
+"Once OpenLDAP is installed via ports, the following configuration parameters "
+"in [.filename]#/usr/local/etc/openldap/slapd.conf# will enable TLS:"
+msgstr ""
+"Una vez que hemos instalado OpenLDAP, los siguientes parámetros en [."
+"filename]#/usr/local/etc/openldap/slapd.conf# habilitarán el uso de TLS:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:136
+#, no-wrap
+msgid "security ssf=128\n"
+msgstr "security ssf=128\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:140
+#, no-wrap
+msgid ""
+"TLSCertificateFile /path/to/your/cert.crt\n"
+"TLSCertificateKeyFile /path/to/your/cert.key\n"
+"TLSCACertificateFile /path/to/your/cacert.crt\n"
+msgstr ""
+"TLSCertificateFile /path/to/your/cert.crt\n"
+"TLSCertificateKeyFile /path/to/your/cert.key\n"
+"TLSCACertificateFile /path/to/your/cacert.crt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:144
+msgid ""
+"Here, `ssf=128` tells OpenLDAP to require 128-bit encryption for all "
+"connections, both search and update. This parameter may be configured based "
+"on the security needs of your site, but rarely you need to weaken it, as "
+"most LDAP client libraries support strong encryption."
+msgstr ""
+"En este caso, `ssf=128` indica a OpenLDAP que solicite una encriptación de "
+"128 bits para todas las conexiones, tanto para búsquedas como para "
+"actualizaciones. Este parámetro se podría configurar según las necesidades "
+"de seguridad de tu sitio web, pero es raro que necesites rebajarlo ya que la "
+"mayoría de las librerías cliente de LDAP soportan encriptación fuerte."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:147
+msgid ""
+"The [.filename]#cert.crt#, [.filename]#cert.key#, and [.filename]#cacert."
+"crt# files are necessary for clients to authenticate _you_ as the valid LDAP "
+"server. If you simply want a server that runs, you can create a self-signed "
+"certificate with OpenSSL:"
+msgstr ""
+"Los ficheros [.filename]#cert.crt#, [.filename]#cert.key#, y [."
+"filename]#cacert.crt# son necesarios para que los clientes te autentiquen _a "
+"ti_ como el servidor LDAP válido. Si sólo quieres ejecutar un servidor, "
+"puedes crear un certificado auto firmado con OpenSSL:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:149
+#, no-wrap
+msgid "Generating an RSA Key"
+msgstr "Generar una Clave RSA"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:160
+#, no-wrap
+msgid ""
+"% openssl genrsa -out cert.key 1024\n"
+"Generating RSA private key, 1024 bit long modulus\n"
+"....................++++++\n"
+"...++++++\n"
+"e is 65537 (0x10001)\n"
+msgstr ""
+"% openssl genrsa -out cert.key 1024\n"
+"Generating RSA private key, 1024 bit long modulus\n"
+"....................++++++\n"
+"...++++++\n"
+"e is 65537 (0x10001)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:162
+#, no-wrap
+msgid "% openssl req -new -key cert.key -out cert.csr\n"
+msgstr "% openssl req -new -key cert.key -out cert.csr\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:171
+msgid ""
+"At this point you should be prompted for some values. You may enter "
+"whatever values you like; however, it is important the \"Common Name\" value "
+"be the fully qualified domain name of the OpenLDAP server. In our case, and "
+"the examples here, the server is _server.example.org_. Incorrectly setting "
+"this value will cause clients to fail when making connections. This can the "
+"cause of great frustration, so ensure that you follow these steps closely."
+msgstr ""
+"En este punto se te deberían preguntar algunos valores. Podrías introducir "
+"los valores que quisieras; sin embargo, es importante que el valor de "
+"\"Common Name\" sea el nombre de dominio del servidor LDAP completamente "
+"cualificado. En nuestro caso, y en los ejemplos, el servidor es "
+"_server.example.org_. Establecer este valor incorrectamente hará que los "
+"clientes no puedan conectar. Esto puede causar una gran frustración así que "
+"asegúrate de que sigues estos pasos con cuidado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:173
+msgid "Finally, the certificate signing request needs to be signed:"
+msgstr "Finalmente, el certificado debe firmarse:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:175
+#, no-wrap
+msgid "Self-signing the Certificate"
+msgstr "Autofirmar el certificado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:185
+#, no-wrap
+msgid ""
+"% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt\n"
+"Signature ok\n"
+"subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd\n"
+"Getting Private key\n"
+msgstr ""
+"% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt\n"
+"Signature ok\n"
+"subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd\n"
+"Getting Private key\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:191
+msgid ""
+"This will create a self-signed certificate that can be used for the "
+"directives in [.filename]#slapd.conf#, where [.filename]#cert.crt# and [."
+"filename]#cacert.crt# are the same file. If you are going to use many "
+"OpenLDAP servers (for replication via `slurpd`) you will want to see <<ssl-"
+"ca>> to generate a CA key and use it to sign individual server certificates."
+msgstr ""
+"Esto creará un certificado auto firmado que puede ser usado para las "
+"directivas en [.filename]#slapd.conf#, donde [.filename]#cert.crt# y [."
+"filename]#cacert.crt# son el mismo fichero. Si vas a utilizar muchos "
+"servidores OpenLDA (para replicación vía `slurpd`) querrás echar un vistazo "
+"a <<ssl-ca>> para generar una clave CA y usarla para firmar los certificados "
+"de servidor individuales."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:193
+msgid "Once this is done, put the following in [.filename]#/etc/rc.conf#:"
+msgstr "Una vez hecho esto, escribe lo siguiente en [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:197
+#, no-wrap
+msgid "slapd_enable=\"YES\"\n"
+msgstr "slapd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:202
+msgid ""
+"Then run `/usr/local/etc/rc.d/slapd start`. This should start OpenLDAP. "
+"Confirm that it is listening on 389 with"
+msgstr ""
+"Después ejecuta `/usr/local/etc/rc.d/slapd start`. Esto debería arrancar "
+"OpenLDAP. Confirma que está escuchando en el puerto 389 con"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:207
+#, no-wrap
+msgid ""
+"% sockstat -4 -p 389\n"
+"ldap slapd 3261 7 tcp4 *:389 *:*\n"
+msgstr ""
+"% sockstat -4 -p 389\n"
+"ldap slapd 3261 7 tcp4 *:389 *:*\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:210
+#, no-wrap
+msgid "Configuring the Client"
+msgstr "Configurar el Cliente"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:214
+msgid ""
+"Install the package:net/openldap24-client[] port for the OpenLDAP "
+"libraries. The client machines will always have OpenLDAP libraries since "
+"that is all package:security/pam_ldap[] and package:net/nss_ldap[] support, "
+"at least for the moment."
+msgstr ""
+"Instala el port package:net/openldap24-client[] para obtener las librerías "
+"de OpenLDAP. Las máquinas cliente siempre tendrán las librerías de OpenLDAP "
+"pues que eso es lo único que soportan package:security/pam_ldap[] y package:"
+"net/nss_ldap[], al menos por el momento."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:217
+msgid ""
+"The configuration file for the OpenLDAP libraries is [.filename]#/usr/local/"
+"etc/openldap/ldap.conf#. Edit this file to contain the following values:"
+msgstr ""
+"El fichero de configuración para las librerías de OpenLDAP es [.filename]#/"
+"usr/local/etc/openldap/ldap.conf#. Edita este fichero para que contenga los "
+"siguientes valores:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:224
+#, no-wrap
+msgid ""
+"base dc=example,dc=org\n"
+"uri ldap://server.example.org/\n"
+"ssl start_tls\n"
+"tls_cacert /path/to/your/cacert.crt\n"
+msgstr ""
+"base dc=example,dc=org\n"
+"uri ldap://server.example.org/\n"
+"ssl start_tls\n"
+"tls_cacert /path/to/your/cacert.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:229
+msgid ""
+"It is important that your clients have access to [.filename]#cacert.crt#, "
+"otherwise they will not be able to connect."
+msgstr ""
+"Es importante que tus clientes tengan acceso a [.filename]#cacert.crt#, de "
+"lo contrario no podrán conectarse."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:236
+msgid ""
+"There are two files called [.filename]#ldap.conf#. The first is this file, "
+"which is for the OpenLDAP libraries and defines how to talk to the server. "
+"The second is [.filename]#/usr/local/etc/ldap.conf#, and is for pam_ldap."
+msgstr ""
+"Hay dos ficheros que se llaman [.filename]#ldap.conf#. El primero es este "
+"fichero, que es para las librerías OpenLDAP y define cómo hablar con el "
+"servidor. El segundo es [.filename]#/usr/local/etc/ldap.conf# y es para "
+"pam_ldap."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:241
+msgid ""
+"At this point you should be able to run `ldapsearch -Z` on the client "
+"machine; `-Z` means \"use TLS\". If you encounter an error, then something "
+"is configured wrong; most likely it is your certificates. Use man:"
+"openssl[1]'s `s_client` and `s_server` to ensure you have them configured "
+"and signed properly."
+msgstr ""
+"En este punto deberías ser capaz de ejecutar `ldapsearch -Z` en la maquina "
+"cliente; `-Z` significa \"usa TLS\". Si encuentras un error, entonces algo "
+"está mal configurado; seguramente sean tus certificados. Utiliza los "
+"comandos `s_client` y `s_server` de man:openssl[1] para asegurarte de que "
+"están correctamente configurados y firmados."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:243
+#, no-wrap
+msgid "Entries in the Database"
+msgstr "Entradas en la base de datos"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:248
+msgid ""
+"Authentication against an LDAP directory is generally accomplished by "
+"attempting to bind to the directory as the connecting user. This is done by "
+"establishing a \"simple\" bind on the directory with the user name "
+"supplied. If there is an entry with the `uid` equal to the user name and "
+"that entry's `userPassword` attribute matches the password supplied, then "
+"the bind is successful."
+msgstr ""
+"La autenticación en un directorio LDAP se logra generalmente al intentar "
+"vincularse al directorio como el usuario que se conecta. Esto se realiza "
+"mediante el establecimiento de un enlace \"simple\" en el directorio con el "
+"nombre de usuario proporcionado. Si hay una entrada con el `uid` igual al "
+"nombre de usuario y el atributo `userPassword` de la entrada coincide con la "
+"contraseña proporcionada, el enlace tiene éxito."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:250
+msgid ""
+"The first thing we have to do is figure out is where in the directory our "
+"users will live."
+msgstr ""
+"Lo primero que tenemos que hacer es averiguar en qué parte del directorio "
+"estarán nuestros usuarios."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:254
+msgid ""
+"The base entry for our database is `dc=example,dc=org`. The default "
+"location for users that most clients seem to expect is something like "
+"`ou=people,_base_`, so that is what will be used here. However keep in mind "
+"that this is configurable."
+msgstr ""
+"La entrada base de nuestra base de datos es `dc=example,dc=org`. La mayoría "
+"de los clientes esperan una localización para los usuarios que sea algo como "
+"`ou=people,_base_` así que es lo que se usará aquí. Sin embargo, ten en "
+"cuenta que esto es configurable."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:256
+msgid "So the ldif entry for the `people` organizational unit will look like:"
+msgstr ""
+"Así que la entrada ldif para la unidad organizacional `people` se parecerá a:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:263
+#, no-wrap
+msgid ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+msgstr ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:266
+msgid "All users will be created as subentries of this organizational unit."
+msgstr ""
+"Todos los usuarios se crearán como subentradas de esta unidad organizativa."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:271
+msgid ""
+"Some thought might be given to the object class your users will belong to. "
+"Most tools by default will use `people`, which is fine if you simply want to "
+"provide entries against which to authenticate. However, if you are going to "
+"store user information in the LDAP database as well, you will probably want "
+"to use `inetOrgPerson`, which has many useful attributes. In either case, "
+"the relevant schemas need to be loaded in [.filename]#slapd.conf#."
+msgstr ""
+"Se podría pensar en la clase de objeto a la que pertenecerán sus usuarios. "
+"Por defecto, la mayoría de las herramientas utilizarán `people`, lo cual "
+"está bien si simplemente quieres proporcionar entradas para la "
+"autenticación. Sin embargo, si también vas a almacenar información de "
+"usuario en la base de datos LDAP, probablemente quieras usar `inetOrgPerson`"
+", el cual dispone de muchos atributos útiles. En cualquier caso, los "
+"esquemas relevantes deben introducirse en el archivo [.filename]#slapd.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:274
+msgid ""
+"For this example we will use the `person` object class. If you are using "
+"`inetOrgPerson`, the steps are basically identical, except that the `sn` "
+"attribute is required."
+msgstr ""
+"Para este ejemplo utilizaremos la clase de objeto `person`. Si usas "
+"`inetOrgPerson`, los pasos son básicamente iguales, con la excepción de que "
+"se requiere el atributo `sn`."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:276
+msgid "To add a test-user named `tuser`, the ldif would be:"
+msgstr "Para añadir un usuario de pruebas llamado `tuser`, el ldif sería:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:290
+#, no-wrap
+msgid ""
+"dn: uid=tuser,ou=people,dc=example,dc=org\n"
+"objectClass: person\n"
+"objectClass: posixAccount\n"
+"objectClass: shadowAccount\n"
+"objectClass: top\n"
+"uidNumber: 10000\n"
+"gidNumber: 10000\n"
+"homeDirectory: /home/tuser\n"
+"loginShell: /bin/csh\n"
+"uid: tuser\n"
+"cn: tuser\n"
+msgstr ""
+"dn: uid=tuser,ou=people,dc=example,dc=org\n"
+"objectClass: person\n"
+"objectClass: posixAccount\n"
+"objectClass: shadowAccount\n"
+"objectClass: top\n"
+"uidNumber: 10000\n"
+"gidNumber: 10000\n"
+"homeDirectory: /home/tuser\n"
+"loginShell: /bin/csh\n"
+"uid: tuser\n"
+"cn: tuser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:293
+msgid ""
+"I start my LDAP users' UIDs at 10000 to avoid collisions with system "
+"accounts; you can configure whatever number you wish here, as long as it is "
+"less than 65536."
+msgstr ""
+"Yo empiezo los UIDs de mis usuarios de LDAP en el 10000 para evitar "
+"conflictos con las cuentas del sistema; puedes establecer el número que "
+"desees aquí, siempre que sea inferior a 65536."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:296
+msgid ""
+"We also need group entries. They are as configurable as user entries, but "
+"we will use the defaults below:"
+msgstr ""
+"También necesitamos entradas grupales. Son tan configurables como las "
+"entradas de usuario, pero usaremos los valores predeterminados que se "
+"muestran a continuación:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:303
+#, no-wrap
+msgid ""
+"dn: ou=groups,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: groups\n"
+msgstr ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:309
+#, no-wrap
+msgid ""
+"dn: cn=tuser,ou=groups,dc=example,dc=org\n"
+"objectClass: posixGroup\n"
+"objectClass: top\n"
+"gidNumber: 10000\n"
+"cn: tuser\n"
+msgstr ""
+"dn: cn=tuser,ou=groups,dc=example,dc=org\n"
+"objectClass: posixGroup\n"
+"objectClass: top\n"
+"gidNumber: 10000\n"
+"cn: tuser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:313
+msgid ""
+"To enter these into your database, you can use `slapadd` or `ldapadd` on a "
+"file containing these entries. Alternatively, you can use package:sysutils/"
+"ldapvi[]."
+msgstr ""
+"Para introducir estos en tu base de datos, puedes utilizar `slapadd` o "
+"`ldapadd` en un fichero que contenga esas entradas. De forma alternativa, "
+"puedes utilizar package:sysutils/ldapvi[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:316
+msgid ""
+"The `ldapsearch` utility on the client machine should now return these "
+"entries. If it does, your database is properly configured to be used as an "
+"LDAP authentication server."
+msgstr ""
+"La utilidad `ldapsearch` en la máquina del cliente debería devolver estas "
+"entradas. Si es así, la base de datos está configurada correctamente para "
+"ser utilizada como un servidor de autenticación LDAP."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:318
+#, no-wrap
+msgid "Client Configuration"
+msgstr "Configuración del Cliente"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:321
+msgid ""
+"The client should already have OpenLDAP libraries from <<ldap-connect-"
+"client>>, but if you are installing several client machines you will need to "
+"install package:net/openldap24-client[] on each of them."
+msgstr ""
+"El cliente ya debería tener las librerías de OpenLDAP de <<ldap-connect-"
+"client>>, pero si estás instalando varias máquinas cliente, necesitarás "
+"instalar package:net/openldap24-client[] en cada una de ellas."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:323
+msgid ""
+"FreeBSD requires two ports to be installed to authenticate against an LDAP "
+"server, package:security/pam_ldap[] and package:net/nss_ldap[]."
+msgstr ""
+"FreeBSD requiere de la instalación de dos ports para autenticarse en un "
+"servidor LDAP, package:security/pam_ldap[] y package:net/nss_ldap[]."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:325
+#, no-wrap
+msgid "Authentication"
+msgstr "Autenticación"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:328
+msgid ""
+"package:security/pam_ldap[] is configured via [.filename]#/usr/local/etc/"
+"ldap.conf#."
+msgstr ""
+"package:security/pam_ldap[] se configura en el fichero [.filename]#/usr/"
+"local/etc/ldap.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:333
+msgid ""
+"This is a _different file_ than the OpenLDAP library functions' "
+"configuration file, [.filename]#/usr/local/etc/openldap/ldap.conf#; however, "
+"it takes many of the same options; in fact it is a superset of that file. "
+"For the rest of this section, references to [.filename]#ldap.conf# will mean "
+"[.filename]#/usr/local/etc/ldap.conf#."
+msgstr ""
+"Este fichero es _diferente_ del fichero de configuración de las librerías de "
+"OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; sin embargo, tiene "
+"muchas de las mismas opciones; de hecho es un superconjunto de ese fichero. "
+"En lo que queda de sección, referencias a [.filename]#ldap.conf# se refieren "
+"a [.filename]#/usr/local/etc/ldap.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:337
+msgid ""
+"Thus, we will want to copy all of our original configuration parameters from "
+"[.filename]#openldap/ldap.conf# to the new [.filename]#ldap.conf#. Once "
+"this is done, we want to tell package:security/pam_ldap[] what to look for "
+"on the directory server."
+msgstr ""
+"Por lo tanto, queremos copiar todos nuestros parámetros de configuración "
+"originales de [.filename]#openldap/ldap.conf# al nuevo [.filename]#ldap.conf#"
+". Una vez hecho esto, le indicaremos a package:security/pam_ldap[] qué "
+"buscar en el servidor de directorio."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:340
+msgid ""
+"We are identifying our users with the `uid` attribute. To configure this "
+"(though it is the default), set the `pam_login_attribute` directive in [."
+"filename]#ldap.conf#:"
+msgstr ""
+"Estamos identificando nuestros usuarios mediante el atributo `uid`. Para "
+"configurarlo (aunque es el valor por defecto), establece la directiva "
+"`pam_login_attribute` en [.filename]#ldap.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:342
+#, no-wrap
+msgid "Setting `pam_login_attribute`"
+msgstr "Estableciendo `pam_login_attribute`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:349
+#, no-wrap
+msgid "pam_login_attribute uid\n"
+msgstr "pam_login_attribute uid\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:357
+msgid ""
+"With this set, package:security/pam_ldap[] will search the entire LDAP "
+"directory under `base` for the value `uid=_username_`. If it finds one and "
+"only one entry, it will attempt to bind as that user with the password it "
+"was given. If it binds correctly, then it will allow access. Otherwise it "
+"will fail."
+msgstr ""
+"Con esto ya establecido, package:security/pam_ldap[] buscará el valor "
+"`uid=_username_` en todo el directorio LDAP bajo `base`. Si encuentra una "
+"sola entrada, intentará vincular a ese usuario con la contraseña que se le "
+"ha pasado. Se vincula correctamente, entonces permitirá el acceso. En "
+"cualquier otro caso fallará."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:363
+msgid ""
+"Users whose shell is not in [.filename]#/etc/shells# will not be able to log "
+"in. This is particularly important when Bash is set as the user shell on "
+"the LDAP server. Bash is not included with a default installation of "
+"FreeBSD. When installed from a package or port, it is located at [."
+"filename]#/usr/local/bin/bash#. Verify that the path to the shell on the "
+"server is set correctly:"
+msgstr ""
+"Los usuarios cuyo shell no esté en [.filename]#/etc/shells# no podrán "
+"iniciar sesión. Esto es muy importante cuando se configura Bash como la "
+"shell de usuario en el servidor LDAP. Bash no está incluido en la "
+"instalación estándar de FreeBSD. Cuando se instala desde un paquete o port, "
+"se encuentra en el directorio [.filename]#/usr/local/bin/bash#. Comprueba "
+"que la ruta a la shell en el servidor esté configurada correctamente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:367
+#, no-wrap
+msgid "% getent passwd username\n"
+msgstr "% getent passwd username\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:372
+msgid ""
+"There are two choices when the output shows `/bin/bash` in the last column. "
+"The first is to change the user's entry on the LDAP server to [.filename]#/"
+"usr/local/bin/bash#. The second option is to create a symlink on the LDAP "
+"client computer so Bash is found at the correct location:"
+msgstr ""
+"Hay dos opciones cuando en la salida se muestra `/bin/bash` en la última "
+"columna. La primera es cambiar en el servidor LDAP la entrada del usuario "
+"para que apunte a [.filename]#/usr/local/bin/bash#. La segunda es crear un "
+"enlace simbólico en la máquina LDAP cliente de forma que se pueda encontrar "
+"Bash en el lugar correcto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:376
+#, no-wrap
+msgid "# ln -s /usr/local/bin/bash /bin/bash\n"
+msgstr "# ln -s /usr/local/bin/bash /bin/bash\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:380
+msgid ""
+"Make sure that [.filename]#/etc/shells# contains entries for both `/usr/"
+"local/bin/bash` and `/bin/bash`. The user will then be able to log in to "
+"the system with Bash as their shell."
+msgstr ""
+"Asegúrate de que [.filename]#/etc/shells# contiene las entradas tanto para `/"
+"usr/local/bin/bash` como para `/bin/bash`. El usuario ya será capaz de "
+"logearse en el sistema utilizando Bash como shell."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:382
+#, no-wrap
+msgid "PAM"
+msgstr "PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:386
+msgid ""
+"PAM, which stands for \"Pluggable Authentication Modules\", is the method by "
+"which FreeBSD authenticates most of its sessions. To tell FreeBSD we wish "
+"to use an LDAP server, we will have to add a line to the appropriate PAM "
+"file."
+msgstr ""
+"PAM, que significa \"Pluggable Authentication Modules\", es el método por el "
+"cual FreeBSD autentica la mayoría de sus sesiones. Para decirle a FreeBSD "
+"que queremos usar un servidor LDAP, tendremos que añadir una línea al "
+"archivo PAM apropiado."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:388
+msgid ""
+"Most of the time the appropriate PAM file is [.filename]#/etc/pam.d/sshd#, "
+"if you want to use SSH (remember to set the relevant options in [.filename]#/"
+"etc/ssh/sshd_config#, otherwise SSH will not use PAM)."
+msgstr ""
+"La mayoría de las veces el fichero PAM apropiado es [.filename]#/etc/pam.d/"
+"sshd#, si quieres usar SSH (recuerda establecer las opciones "
+"correspondientes en [.filename]#/etc/ssh/sshd_config#, de lo contrario SSH "
+"no usará PAM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:390
+msgid "To use PAM for authentication, add the line"
+msgstr "Para usar PAM para la autenticación, añade la línea"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:394
+#, no-wrap
+msgid "auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+msgstr "auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:397
+msgid ""
+"Exactly where this line shows up in the file and which options appear in the "
+"fourth column determine the exact behavior of the authentication mechanism; "
+"see man:pam[d]"
+msgstr ""
+"El lugar exacto en el que aparece esta línea en el fichero y las opciones "
+"que aparecen en la cuarta columna determinan el comportamiento exacto del "
+"mecanismo de autenticación; lee man:pam[d]"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:400
+msgid ""
+"With this configuration you should be able to authenticate a user against an "
+"LDAP directory. PAM will perform a bind with your credentials, and if "
+"successful will tell SSH to allow access."
+msgstr ""
+"Con esta configuración deberías ser capaz de autenticar un usuario contra un "
+"directorio LDAP. PAM realizará un vínculo con tus credenciales, y si tiene "
+"éxito le dirá a SSH que permita el acceso."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:404
+msgid ""
+"However it is not a good idea to allow _every_ user in the directory into "
+"_every_ client machine. With the current configuration, all that a user "
+"needs to log into a machine is an LDAP entry. Fortunately there are a few "
+"ways to restrict user access."
+msgstr ""
+"Sin embargo, no es buena idea permitir que _cada_ usuario del directorio "
+"pueda acceder a _todos_ las máquinas clientes. Con la configuración actual, "
+"todo lo que necesita un usuario para iniciar sesión en una máquina es una "
+"entrada LDAP. Afortunadamente, hay algunas formas de restringir el acceso de "
+"los usuarios."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:407
+msgid ""
+"[.filename]#ldap.conf# supports a `pam_groupdn` directive; every account "
+"that connects to this machine needs to be a member of the group specified "
+"here. For example, if you have"
+msgstr ""
+"[.filename]#ldap.conf# admite la directiva `pam_groupdn`; cada cuenta que se "
+"conecta a esta máquina debe ser miembro del grupo especificado aquí. Por "
+"ejemplo, si tienes"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:411
+#, no-wrap
+msgid "pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org\n"
+msgstr "pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:415
+msgid ""
+"in [.filename]#ldap.conf#, then only members of that group will be able to "
+"log in. There are a few things to bear in mind, however."
+msgstr ""
+"en [.filename]#ldap.conf#, solo los miembros de este grupo podrán iniciar "
+"sesión. Sin embargo hay algunas cosas a tener en cuenta."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:418
+msgid ""
+"Members of this group are specified in one or more `memberUid` attributes, "
+"and each attribute must have the full distinguished name of the member. So "
+"`memberUid: someuser` will not work; it must be:"
+msgstr ""
+"Los miembros de este grupo se especifican en uno o más atributos `memberUid` "
+"y cada atributo debe tener el nombre completamente unívoco del miembro. "
+"Entonces `memberUid: someuser` no funcionará; debe ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:422
+#, no-wrap
+msgid "memberUid: uid=someuser,ou=people,dc=example,dc=org\n"
+msgstr "memberUid: uid=someuser,ou=people,dc=example,dc=org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:428
+msgid ""
+"Additionally, this directive is not checked in PAM during authentication, it "
+"is checked during account management, so you will need a second line in your "
+"PAM files under `account`. This will require, in turn, _every_ user to be "
+"listed in the group, which is not necessarily what we want. To avoid "
+"blocking users that are not in LDAP, you should enable the "
+"`ignore_unknown_user` attribute. Finally, you should set the "
+"`ignore_authinfo_unavail` option so that you are not locked out of every "
+"computer when the LDAP server is unavailable."
+msgstr ""
+"Además, esta directiva no se verifica en PAM durante la autenticación, se "
+"verifica durante la administración de la cuenta, por lo que necesitarás "
+"añadir más configuraciones en tus archivos de PAM en la sección de `account`"
+". Esto, a su vez, requerirá que _cada_ usuario se incluya en el grupo, lo "
+"cual no es necesariamente lo que queremos. Para evitar bloquear usuarios que "
+"no están en LDAP, debes habilitar el atributo `ignore_unknown_user`. "
+"Finalmente, debes configurar la opción `ignore_authinfo_unavail` para que el "
+"usuario no quede bloqueado en todos los ordenadores cuando el servidor LDAP "
+"no esté disponible."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:430
+msgid "Your [.filename]#pam.d/sshd# might then end up looking like this:"
+msgstr "Tu [.filename]#pam.d/sshd# podría parecerse a esto:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:432
+#, no-wrap
+msgid "Sample [.filename]#pam.d/sshd#"
+msgstr "Ejemplo de [.filename]#pam.d/sshd#"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:443
+#, no-wrap
+msgid ""
+"auth required pam_nologin.so no_warn\n"
+"auth sufficient pam_opie.so no_warn no_fake_prompts\n"
+"auth requisite pam_opieaccess.so no_warn allow_local\n"
+"auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+"auth required pam_unix.so no_warn try_first_pass\n"
+msgstr ""
+"auth required pam_nologin.so no_warn\n"
+"auth sufficient pam_opie.so no_warn "
+"no_fake_prompts\n"
+"auth requisite pam_opieaccess.so no_warn allow_local\n"
+"auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+"auth required pam_unix.so no_warn "
+"try_first_pass\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:446
+#, no-wrap
+msgid ""
+"account required pam_login_access.so\n"
+"account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user\n"
+msgstr ""
+"account required pam_login_access.so\n"
+"account required /usr/local/lib/pam_ldap.so no_warn "
+"ignore_authinfo_unavail ignore_unknown_user\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:455
+msgid ""
+"Since we are adding these lines specifically to [.filename]#pam.d/sshd#, "
+"this will only have an effect on SSH sessions. LDAP users will be unable to "
+"log in at the console. To change this behavior, examine the other files in "
+"[.filename]#/etc/pam.d# and modify them accordingly."
+msgstr ""
+"Como estamos añadiendo estas líneas específicamente a [.filename]#pam.d/sshd#"
+", esto solo tendrá efecto en las sesiones SSH. Los usuarios de LDAP no "
+"podrán iniciar sesión por consola. Para cambiar este comportamiento, examina "
+"los otros archivos en [.filename]#/etc/pam.d# y modifícalos como corresponda."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:458
+#, no-wrap
+msgid "Name Service Switch"
+msgstr "Name Service Switch"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:462
+msgid ""
+"NSS is the service that maps attributes to names. So, for example, if a "
+"file is owned by user `1001`, an application will query NSS for the name of "
+"`1001`, and it might get `bob` or `ted` or whatever the user's name is."
+msgstr ""
+"NSS es el servicio que mapea atributos a nombres. Por ejemplo, si un fichero "
+"es propiedad del usuario `1001`, una aplicación preguntará a NSS por el "
+"nombre de `1001` y podría obtener `bob` o `ted` o el cualquiera que sea el "
+"nombre del usuario."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:464
+msgid ""
+"Now that our user information is kept in LDAP, we need to tell NSS to look "
+"there when queried."
+msgstr ""
+"Ahora que tenemos nuestra información en LDAP, necesitamos decirle a NSS que "
+"mire ahí cuando se le hagan preguntas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:469
+msgid ""
+"The package:net/nss_ldap[] port does this. It uses the same configuration "
+"file as package:security/pam_ldap[], and should not need any extra "
+"parameters once it is installed. Instead, what is left is simply to edit [."
+"filename]#/etc/nsswitch.conf# to take advantage of the directory. Simply "
+"replace the following lines:"
+msgstr ""
+"Est es lo que hace el port package:net/nss_ldap[]. Utiliza el mismo archivo "
+"de configuración que package:security/pam_ldap[], y no debería necesitar "
+"ningún parámetro adicional después de su instalación. En cambio, solo "
+"quedaría editar el archivo [.filename]#/etc/nsswitch.conf# para aprovechar "
+"el directorio. Simplemente cambia las siguientes líneas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:474
+#, no-wrap
+msgid ""
+"group: compat\n"
+"passwd: compat\n"
+msgstr ""
+"group: compat\n"
+"passwd: compat\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:477
+msgid "with"
+msgstr "por"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:482
+#, no-wrap
+msgid ""
+"group: files ldap\n"
+"passwd: files ldap\n"
+msgstr ""
+"group: files ldap\n"
+"passwd: files ldap\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:485
+msgid "This will allow you to map usernames to UIDs and UIDs to usernames."
+msgstr ""
+"Esto te permitirá asignar nombres de usuario a UIDs y UIDs a nombres de "
+"usuario."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:487
+msgid "Congratulations! You should now have working LDAP authentication."
+msgstr ""
+"¡Felicidades! Ahora deberías tener la autenticación de LDAP en "
+"funcionamiento."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:489
+#, no-wrap
+msgid "Caveats"
+msgstr "Advertencias"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:495
+msgid ""
+"Unfortunately, as of the time this was written FreeBSD did not support "
+"changing user passwords with man:passwd[1]. As a result of this, most "
+"administrators are left to implement a solution themselves. I provide some "
+"examples here. Note that if you write your own password change script, "
+"there are some security issues you should be made aware of; see <<security-"
+"passwd>>"
+msgstr ""
+"Desafortunadamente, en el momento de escribir esto FreeBSD no soportaba "
+"cambiar las contraseñas de usuario con man:passwd[1]. Como resultado, la "
+"mayoría de los administradores tienen que implementar una solución por ellos "
+"mismos. Aquí proporciono algunos ejemplos. Observa que si escribes tu propio "
+"script de cambio de contraseñas deberías tener en cuenta algunas "
+"consideraciones de seguridad; lee <<security-passwd>>"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:497
+#, no-wrap
+msgid "Shell Script for Changing Passwords"
+msgstr "Shell Script para Cambiar Contraseñas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:504
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:510
+#, no-wrap
+msgid ""
+"stty -echo\n"
+"read -p \"Old Password: \" oldp; echo\n"
+"read -p \"New Password: \" np1; echo\n"
+"read -p \"Retype New Password: \" np2; echo\n"
+"stty echo\n"
+msgstr ""
+"stty -echo\n"
+"read -p \"Old Password: \" oldp; echo\n"
+"read -p \"New Password: \" np1; echo\n"
+"read -p \"Retype New Password: \" np2; echo\n"
+"stty echo\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:515
+#, no-wrap
+msgid ""
+"if [ \"$np1\" != \"$np2\" ]; then\n"
+" echo \"Passwords do not match.\"\n"
+" exit 1\n"
+"fi\n"
+msgstr ""
+"if [ \"$np1\" != \"$np2\" ]; then\n"
+" echo \"Passwords do not match.\"\n"
+" exit 1\n"
+"fi\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:520
+#, no-wrap
+msgid ""
+"ldappasswd -D uid=\"$USER\",ou=people,dc=example,dc=org \\\n"
+" -w \"$oldp\" \\\n"
+" -a \"$oldp\" \\\n"
+" -s \"$np1\"\n"
+msgstr ""
+"ldappasswd -D uid=\"$USER\",ou=people,dc=example,dc=org \\\n"
+" -w \"$oldp\" \\\n"
+" -a \"$oldp\" \\\n"
+" -s \"$np1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:529
+msgid ""
+"This script does hardly any error checking, but more important it is very "
+"cavalier about how it stores your passwords. If you do anything like this, "
+"at least adjust the `security.bsd.see_other_uids` sysctl value:"
+msgstr ""
+"Este script apenas verifica errores, pero lo más importante es el poco "
+"cuidado con el que almacena sus contraseñas. Si haces algo como esto, "
+"establece al menos el valor de `security.bsd.see_other_uids`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:533
+#, no-wrap
+msgid "# sysctl security.bsd.see_other_uids=0\n"
+msgstr "# sysctl security.bsd.see_other_uids=0\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:540
+msgid ""
+"A more flexible (and probably more secure) approach can be used by writing a "
+"custom program, or even a web interface. The following is part of a Ruby "
+"library that can change LDAP passwords. It sees use both on the command "
+"line, and on the web."
+msgstr ""
+"Se puede utilizar un enfoque más flexible (y probablemente más seguro) "
+"escribiendo un programa personalizado o incluso una interfaz web. Lo "
+"siguiente es parte de una librería de Ruby que puede cambiar las contraseñas "
+"LDAP. Se puede usar por línea de comandos y en la web."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:542
+#, no-wrap
+msgid "Ruby Script for Changing Passwords"
+msgstr "Script en Ruby para Cambiar las Contraseñas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:552
+#, no-wrap
+msgid ""
+"require 'ldap'\n"
+"require 'base64'\n"
+"require 'digest'\n"
+"require 'password' # ruby-password\n"
+msgstr ""
+"require 'ldap'\n"
+"require 'base64'\n"
+"require 'digest'\n"
+"require 'password' # ruby-password\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:555
+#, no-wrap
+msgid ""
+"ldap_server = \"ldap.example.org\"\n"
+"luser = \"uid=#{ENV['USER']},ou=people,dc=example,dc=org\"\n"
+msgstr ""
+"ldap_server = \"ldap.example.org\"\n"
+"luser = \"uid=#{ENV['USER']},ou=people,dc=example,dc=org\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:560
+#, no-wrap
+msgid ""
+"# get the new password, check it, and create a salted hash from it\n"
+"def get_password\n"
+" pwd1 = Password.get(\"New Password: \")\n"
+" pwd2 = Password.get(\"Retype New Password: \")\n"
+msgstr ""
+"# get the new password, check it, and create a salted hash from it\n"
+"def get_password\n"
+" pwd1 = Password.get(\"New Password: \")\n"
+" pwd2 = Password.get(\"Retype New Password: \")\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:563
+#, no-wrap
+msgid ""
+" raise if pwd1 != pwd2\n"
+" pwd1.check # check password strength\n"
+msgstr ""
+" raise if pwd1 != pwd2\n"
+" pwd1.check # check password strength\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:569
+#, no-wrap
+msgid ""
+" salt = rand.to_s.gsub(/0\\./, '')\n"
+" pass = pwd1.to_s\n"
+" hash = \"{SSHA}\"+Base64.encode64(Digest::SHA1.digest(\"#{pass}#{salt}\")+salt).chomp!\n"
+" return hash\n"
+"end\n"
+msgstr ""
+" salt = rand.to_s.gsub(/0\\./, '')\n"
+" pass = pwd1.to_s\n"
+" hash = \"{SSHA}\"+Base64.encode64(Digest::SHA1.digest(\"#{pass}#{salt}\""
+")+salt).chomp!\n"
+" return hash\n"
+"end\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:572
+#, no-wrap
+msgid ""
+"oldp = Password.get(\"Old Password: \")\n"
+"newp = get_password\n"
+msgstr ""
+"oldp = Password.get(\"Old Password: \")\n"
+"newp = get_password\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:575
+#, no-wrap
+msgid ""
+"# We'll just replace it. That we can bind proves that we either know\n"
+"# the old password or are an admin.\n"
+msgstr ""
+"# We'll just replace it. That we can bind proves that we either know\n"
+"# the old password or are an admin.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:579
+#, no-wrap
+msgid ""
+"replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,\n"
+" \"userPassword\",\n"
+" [newp])\n"
+msgstr ""
+"replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,\n"
+" \"userPassword\",\n"
+" [newp])\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:584
+#, no-wrap
+msgid ""
+"conn = LDAP::SSLConn.new(ldap_server, 389, true)\n"
+"conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)\n"
+"conn.bind(luser, oldp)\n"
+"conn.modify(luser, [replace])\n"
+msgstr ""
+"conn = LDAP::SSLConn.new(ldap_server, 389, true)\n"
+"conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)\n"
+"conn.bind(luser, oldp)\n"
+"conn.modify(luser, [replace])\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:589
+msgid ""
+"Although not guaranteed to be free of security holes (the password is kept "
+"in memory, for example) this is cleaner and more flexible than a simple `sh` "
+"script."
+msgstr ""
+"Aunque no se garantiza que esté a salvo de agujeros de seguridad (la "
+"contraseña se guarda en memoria, por ejemplo), esto es más limpio y más "
+"flexible que un simple script `sh`."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:591
+#, no-wrap
+msgid "Security Considerations"
+msgstr "Consideraciones de Seguridad"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:594
+msgid ""
+"Now that your machines (and possibly other services) are authenticating "
+"against your LDAP server, this server needs to be protected at least as well "
+"as [.filename]#/etc/master.passwd# would be on a regular server, and "
+"possibly even more so since a broken or cracked LDAP server would break "
+"every client service."
+msgstr ""
+"Ahora que tus máquinas (y posiblemente otros servicios) se están "
+"autenticando contra su servidor LDAP, este servidor tiene que estar "
+"protegido, así como [.filename]#/etc/master.passwd# estaría en un servidor "
+"normal, y posiblemente aún más puesto que un servidor LDAP corrupto o "
+"comprometido rompería todos los servicios del cliente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:597
+msgid ""
+"Remember, this section is not exhaustive. You should continually review "
+"your configuration and procedures for improvements."
+msgstr ""
+"Recuerda, esta sección no es exhaustiva. Debes revisar continuamente tu "
+"configuración y procedimientos para mejorarlos."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:599
+#, no-wrap
+msgid "Setting Attributes Read-only"
+msgstr "Establecer Atributos de Solo Lectura"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:603
+msgid ""
+"Several attributes in LDAP should be read-only. If left writable by the "
+"user, for example, a user could change his `uidNumber` attribute to `0` and "
+"get `root` access!"
+msgstr ""
+"Varios atributos en LDAP deberían ser de sólo lectura. Si el usuario pudiera "
+"escribirlos, por ejemplo, un usuario podría cambiar su `uidNumber` a `0` ¡y "
+"obtener acceso `root`!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:607
+msgid ""
+"To begin with, the `userPassword` attribute should not be world-readable. "
+"By default, anyone who can connect to the LDAP server can read this "
+"attribute. To disable this, put the following in [.filename]#slapd.conf#:"
+msgstr ""
+"Para empezar, el atributo `userPassword` no debe ser legible por todo el "
+"mundo. Por defecto, cualquiera que pueda conectarse al servidor LDAP puede "
+"leer este atributo. Para deshabilitar esto, usa la siguiente configuración "
+"en el archivo [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:609
+#, no-wrap
+msgid "Hide Passwords"
+msgstr "Ocultar Contraseñas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:620
+#: documentation/content/en/articles/ldap-auth/_index.adoc:646
+#, no-wrap
+msgid ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attrs=userPassword\n"
+" by self write\n"
+" by anonymous auth\n"
+" by * none\n"
+msgstr ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attrs=userPassword\n"
+" by self write\n"
+" by anonymous auth\n"
+" by * none\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:624
+#: documentation/content/en/articles/ldap-auth/_index.adoc:653
+#, no-wrap
+msgid ""
+"access to *\n"
+" by self write\n"
+" by * read\n"
+msgstr ""
+"access to *\n"
+" by self write\n"
+" by * read\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:629
+msgid ""
+"This will disallow reading of the `userPassword` attribute, while still "
+"allowing users to change their own passwords."
+msgstr ""
+"Esto evitará que se pueda leer el atributo `userPassword`, a la vez que "
+"seguirá permitiendo a los usuarios cambiar sus propias contraseñas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:633
+msgid ""
+"Additionally, you'll want to keep users from changing some of their own "
+"attributes. By default, users can change any attribute (except for those "
+"which the LDAP schemas themselves deny changes), such as `uidNumber`. To "
+"close this hole, modify the above to"
+msgstr ""
+"Además, querrás evitar que los usuarios cambien algunos de sus atributos. De "
+"forma predeterminada, los usuarios pueden cambiar cualquier atributo ("
+"excepto aquellos en los que los esquemas LDAP mismos niegan cambios), como "
+"`uidNumber`. Para cerrar este agujero, modifica lo anterior a"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:635
+#, no-wrap
+msgid "Read-only Attributes"
+msgstr "Atributos de Solo Lectura"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:649
+#, no-wrap
+msgid ""
+"access to attrs=homeDirectory,uidNumber,gidNumber\n"
+" by * read\n"
+msgstr ""
+"access to attrs=homeDirectory,uidNumber,gidNumber\n"
+" by * read\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:658
+msgid "This will stop users from being able to masquerade as other users."
+msgstr "Esto evitará que los usuarios puedan hacerse pasar por otros usuarios."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:660
+#, no-wrap
+msgid "`root` Account Definition"
+msgstr "Definición de la Cuenta `root`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:665
+msgid ""
+"Often the `root` or manager account for the LDAP service will be defined in "
+"the configuration file. OpenLDAP supports this, for example, and it works, "
+"but it can lead to trouble if [.filename]#slapd.conf# is compromised. It "
+"may be better to use this only to bootstrap yourself into LDAP, and then "
+"define a `root` account there."
+msgstr ""
+"Habitualmente la cuenta `root` o la cuenta del gestor para el servicio de "
+"LDAP estará definida en el fichero de configuración. Por ejemplo, OpenLDAP "
+"soporta esto y funciona, pero puede dar lugar a problemas si [."
+"filename]#slapd.conf# se ve comprometido. Sería mejor usar esto sólo para "
+"entrar en LDAP y después definir ahí una cuenta `root`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:669
+msgid ""
+"Even better is to define accounts that have limited permissions, and omit a "
+"`root` account entirely. For example, users that can add or remove user "
+"accounts are added to one group, but they cannot themselves change the "
+"membership of this group. Such a security policy would help mitigate the "
+"effects of a leaked password."
+msgstr ""
+"Es incluso mejor definir cuentas que tengan permisos limitados y omitir "
+"completamente la cuenta `root`. Por ejemplo, los usuarios que pueden crear o "
+"eliminar cuentas de usuario se añaden a un grupo, pero ellos mismos no "
+"pueden cambiar la pertenencia a este grupo. Esta política de seguridad "
+"ayudaría a mitigar los efectos de una contraseña que se haya podido filtrar."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:671
+#: documentation/content/en/articles/ldap-auth/_index.adoc:677
+#, no-wrap
+msgid "Creating a Management Group"
+msgstr "Crear un Grupo de Mantenimiento"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:675
+msgid ""
+"Say you want your IT department to be able to change home directories for "
+"users, but you do not want all of them to be able to add or remove users. "
+"The way to do this is to add a group for these admins:"
+msgstr ""
+"Supongamos que quieres que tu departamento de TI pueda cambiar los "
+"directorios home de los usuarios, pero no quieres que todos puedan añadir o "
+"eliminar usuarios. La forma de hacerlo es agregar un grupo para estos "
+"administradores:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:690
+#, no-wrap
+msgid ""
+"dn: cn=homemanagement,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: posixGroup\n"
+"cn: homemanagement\n"
+"gidNumber: 121 # required for posixGroup\n"
+"memberUid: uid=tuser,ou=people,dc=example,dc=org\n"
+"memberUid: uid=user2,ou=people,dc=example,dc=org\n"
+msgstr ""
+"dn: cn=homemanagement,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: posixGroup\n"
+"cn: homemanagement\n"
+"gidNumber: 121 # required for posixGroup\n"
+"memberUid: uid=tuser,ou=people,dc=example,dc=org\n"
+"memberUid: uid=user2,ou=people,dc=example,dc=org\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:695
+msgid "And then change the permissions attributes in [.filename]#slapd.conf#:"
+msgstr ""
+"Y luego cambia los atributos de los permisos en [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:697
+#, no-wrap
+msgid "ACLs for a Home Directory Management Group"
+msgstr "ACLs para el Grupo de Administración del Directorio Home"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:707
+#, no-wrap
+msgid ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attr=homeDirectory\n"
+" by dn=\"cn=homemanagement,dc=example,dc=org\"\n"
+" dnattr=memberUid write\n"
+msgstr ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attr=homeDirectory\n"
+" by dn=\"cn=homemanagement,dc=example,dc=org\"\n"
+" dnattr=memberUid write\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:712
+msgid "Now `tuser` and `user2` can change other users' home directories."
+msgstr ""
+"Ahora el usuario `tuser` y el `user2` pueden cambiar los directorios home "
+"del otro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:716
+msgid ""
+"In this example we have given a subset of administrative power to certain "
+"users without giving them power in other domains. The idea is that soon no "
+"single user account has the power of a `root` account, but every power root "
+"had is had by at least one user. The `root` account then becomes "
+"unnecessary and can be removed."
+msgstr ""
+"En este ejemplo hemos concedido un subconjunto de poderes administrativos a "
+"algunos usuarios sin darles poder en otros dominios. La idea es que pronto "
+"ninguna cuenta de usuario tenga el poder de la cuenta de `root`, pero cada "
+"poder que tenga root lo tiene como mínimo algún otro usuario. Entonces la "
+"cuenta `root` se hace innecesaria y se puede eliminar."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:718
+#, no-wrap
+msgid "Password Storage"
+msgstr "Almacenamiento de Contraseña"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:722
+msgid ""
+"By default OpenLDAP will store the value of the `userPassword` attribute as "
+"it stores any other data: in the clear. Most of the time it is base 64 "
+"encoded, which provides enough protection to keep an honest administrator "
+"from knowing your password, but little else."
+msgstr ""
+"OpenLDAP almacenará por defecto el valor del atributo `userPssword` de la "
+"misma forma que cualquier otro dato: en plano. La mayoría de las veces está "
+"codificado en base 64 lo que proporciona suficiente protección para evitar "
+"que un administrador honesto conozca tu contraseña, pero poco más."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:725
+msgid ""
+"It is a good idea, then, to store passwords in a more secure format, such as "
+"SSHA (salted SHA). This is done by whatever program you use to change "
+"users' passwords."
+msgstr ""
+"Por lo tanto, es buena idea almacenar las contraseñas en un formato más "
+"seguro, como SSHA (salted SHA). Esto lo hace cualquier programa que uses "
+"para cambiar las contraseñas de los usuarios."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:730
+#, no-wrap
+msgid "Useful Aids"
+msgstr "Consideraciones Útiles"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:733
+msgid ""
+"There are a few other programs that might be useful, particularly if you "
+"have many users and do not want to configure everything manually."
+msgstr ""
+"Hay otros programas que pueden ser útiles, especialmente si tienes muchos "
+"usuarios y no quieres configurarlo todo manualmente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:736
+msgid ""
+"package:security/pam_mkhomedir[] is a PAM module that always succeeds; its "
+"purpose is to create home directories for users which do not have them. If "
+"you have dozens of client servers and hundreds of users, it is much easier "
+"to use this and set up skeleton directories than to prepare every home "
+"directory."
+msgstr ""
+"package:security/pam_mkhomedir[] es un módulo de PAM que siempre funciona; "
+"su propósito es crear directorios home para los usuarios que no los tienen. "
+"Si tienes docenas de servidores cliente y cientos de usuarios, es mucho más "
+"fácil usarlo y configurar un directorio tipo plantilla para cada directorio "
+"home."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:740
+msgid ""
+"package:sysutils/cpu[] is a man:pw[8]-like utility that can be used to "
+"manage users in the LDAP directory. You can call it directly, or wrap "
+"scripts around it. It can handle both TLS (with the `-x` flag) and SSL "
+"(directly)."
+msgstr ""
+"package:sysutils/cpu[] es una utilidad tipo man:pw[8] que se puede usar para "
+"gestionar usuarios en el directorio LDAP. Puedes llamarlo directamente o "
+"envolverlo en un script. Puede gestionar tanto TLS (con el flag `-x`) como "
+"SSL (directamente)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:744
+msgid ""
+"package:sysutils/ldapvi[] is a great utility for editing LDAP values in an "
+"LDIF-like syntax. The directory (or subsection of the directory) is "
+"presented in the editor chosen by the `EDITOR` environment variable. This "
+"makes it easy to enable large-scale changes in the directory without having "
+"to write a custom tool."
+msgstr ""
+"package:sysutils/ldapvi[] es una utilidad de gran ayuda para editar valores "
+"LDAP en una sintaxis similar a LDIF. El directorio (o subsección del "
+"directorio) se muestra en el editor elegido por la variable de entorno "
+"`EDITOR`. Esto facilita la realización de cambios de directorio a gran "
+"escala sin escribir una herramienta personalizada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:747
+msgid ""
+"package:security/openssh-portable[] has the ability to contact an LDAP "
+"server to verify SSH keys. This is extremely nice if you have many servers "
+"and do not want to copy your public keys across all of them."
+msgstr ""
+"package:security/openssh-portable[] tienen la capacidad de contactar con un "
+"servidor LDAP para verificar claves SSH. Esto es realmente útil si tienes "
+"muchos servidores y no quieres copiar tus claves públicas a todos ellos."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:752
+#, no-wrap
+msgid "OpenSSL Certificates for LDAP"
+msgstr "Certificados OpenSSL para LDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:756
+msgid ""
+"If you are hosting two or more LDAP servers, you will probably not want to "
+"use self-signed certificates, since each client will have to be configured "
+"to work with each certificate. While this is possible, it is not nearly as "
+"simple as creating your own certificate authority, and signing your servers' "
+"certificates with that."
+msgstr ""
+"Si alojas dos o más servidores LDAP, probablemente no quieras utilizar "
+"certificados autofirmados, ya que cada cliente deberá estar configurado para "
+"funcionar con cada certificado. Si bien esto es posible, no es tan simple "
+"como crear tu propia autoridad de certificación y firmar con ella los "
+"certificados de tus servidores."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:758
+msgid ""
+"The steps here are presented as they are with very little attempt at "
+"explaining what is going on-further explanation can be found in man:"
+"openssl[1] and its friends."
+msgstr ""
+"Los pasos se muestran aquí tal cual, sin ninguna intención de explicar lo "
+"que hacen - se puede encontrar más información en man:openssl[1] y amigos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:761
+msgid ""
+"To create a certificate authority, we simply need a self-signed certificate "
+"and key. The steps for this again are"
+msgstr ""
+"Para crear una autoridad de certificación, simplemente necesitamos un "
+"certificado autofirmado y una clave. De nuevo, las instrucciones son"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:763
+#, no-wrap
+msgid "Creating a Certificate"
+msgstr "Crear un Certificado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:772
+#, no-wrap
+msgid ""
+"% openssl genrsa -out root.key 1024\n"
+"% openssl req -new -key root.key -out root.csr\n"
+"% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt\n"
+msgstr ""
+"% openssl genrsa -out root.key 1024\n"
+"% openssl req -new -key root.key -out root.csr\n"
+"% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:778
+msgid ""
+"These will be your root CA key and certificate. You will probably want to "
+"encrypt the key and store it in a cool, dry place; anyone with access to it "
+"can masquerade as one of your LDAP servers."
+msgstr ""
+"Estos serán tu clave CA y certificado root. Probablemente quieras cifrar la "
+"clave y almacenarla en un lugar freso y seco; cualquier persona con acceso a "
+"ella puede hacerse pasar por uno de tus servidores LDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:781
+msgid ""
+"Next, using the first two steps above create a key [.filename]#ldap-server-"
+"one.key# and certificate signing request [.filename]#ldap-server-one.csr#. "
+"Once you sign the signing request with [.filename]#root.key#, you will be "
+"able to use [.filename]#ldap-server-one.*# on your LDAP servers."
+msgstr ""
+"A continuación, utilizando los dos pasos anteriores, crea la clave [."
+"filename]#ldap-server-one.key# y la solicitud de firma de certificado [."
+"filename]#ldap-server-one.csr#. Una vez que firmes la solicitud con la clave "
+"[.filename]#root.key#, podrás usar [.filename]#ldap-server-one.*# en tus "
+"servidores LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:785
+msgid ""
+"Do not forget to use the fully qualified domain name for the \"common name\" "
+"attribute when generating the certificate signing request; otherwise clients "
+"will reject a connection with you, and it can be very tricky to diagnose."
+msgstr ""
+"No olvides utilizar un fully qualified domain name (nombre de dominio "
+"completamente cualificado) para el atributo \"common name\" al generar la "
+"solicitud de firma del certificado; de lo contrario, los clientes rechazarán "
+"la conexión y esto puede ser muy difícil de diagnosticar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:788
+msgid "To sign the key, use `-CA` and `-CAkey` instead of `-signkey`:"
+msgstr "Para firmar la clave utiliza `-CA` y `_CAkey` en lugar de `-signkey`:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:790
+#, no-wrap
+msgid "Signing as a Certificate Authority"
+msgstr "Firmar como Autoridad Certificadora"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:799
+#, no-wrap
+msgid ""
+"% openssl x509 -req -days 1024 \\\n"
+"-in ldap-server-one.csr -CA root.crt -CAkey root.key \\\n"
+"-out ldap-server-one.crt\n"
+msgstr ""
+"% openssl x509 -req -days 1024 \\\n"
+"-in ldap-server-one.csr -CA root.crt -CAkey root.key \\\n"
+"-out ldap-server-one.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:804
+msgid ""
+"The resulting file will be the certificate that you can use on your LDAP "
+"servers."
+msgstr ""
+"El archivo resultante será el certificado que puedes utilizar en sus "
+"servidores LDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:805
+msgid ""
+"Finally, for clients to trust all your servers, distribute [.filename]#root."
+"crt# (the __certificate__, not the key!) to each client, and specify it in "
+"the `TLSCACertificateFile` directive in [.filename]#ldap.conf#."
+msgstr ""
+"Por último, para que los clientes confíen en todos tus servidores, "
+"distribuye [.filename]#root.crt# (el __certificado__, ¡no la clave!) a cada "
+"cliente y especifícalo en la directiva `TLSCACertificateFile` de [."
+"filename]#ldap.conf#."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[]\n"
+#~ "include::shared/{{% lang %}}/teams.adoc[]\n"
+#~ "include::shared/{{% lang %}}/mailing-lists.adoc[]\n"
+#~ "include::shared/{{% lang %}}/urls.adoc[]"