Linux Avanzado Tema 12: TCP/IP, NFS, Samba, FTP, DHCP, DNS, Proxy. Configuración de un servidor NFS Uso de NFS en un cliente Si el servidor está correctamente configurado y el cliente tiene los permisos adecuados, el montaje de un sistema de archivos remoto con NFS solamente requiere el comando mount: mount -t nfs my.nfs.server.com:/path/on/server /path/on/client o una entrada adecuada en /etc/fstab: my.nfs.server.com:/path/on/server /path/on/client nfs rw,soft 0 0 La opción soft le indicará al kernel que envíe un error de E/S (EIO) a los procesos de usuario en caso de dificultades en la red. La opción predeterminada hard provocará que los procesos se cuelguen mientras el servidor NFS permanece inaccesible. Además, los programas auxiliares rpc.lockd, rpc.statd y rpc.quotad se pueden ejecutar en cliente y/o servidor. Configuración de un servidor NFS (parte uno) Un servidor NFS requiere tres programas distintos, así como tres programas opcionales. Cuando un cliente NFS monta un sistema de archivos NFS, se contacta con los siguientes daemons de servidor, la mayoría de los cuales se deben ejecutar de forma independiente (en contraposición a su inicio a través de inetd): • portmap: a veces llamado portmapper o rpc.bind. • rpc.mountd: a veces mounted. • rpc.nfsd: a veces nfsd. Además, existen tres programas auxiliares opcionales: rpc.lockd, rpc.statd y rpc.quotad que, respectivamente, proporcionan un bloqueo global, aceleran la familia de llamadas al sistema lstat (usada por ls -l, etc.) y dan soporte a las cuotas. Configuración de un servidor NFS (parte dos) Todos los servidores relacionados con NFS usan TCPwrappers (tcpd) para el control de acceso y, por lo tanto, pueden requerir entradas en /etc/host.allow. Por lo general, ni nfsd ni portmap requieren otra configuración además de /etc/hosts.allow. El archivo de configuración de mountd es (indirectamente) /etc/exports. Indica qué sistemas de archivos pueden ser montados por qué clientes. Con la implementación Linux de NFS, /etc/exports no es directamente analizado por mountd. En cambio, el comando exportfs -a analiza /etc/exports y escribe el resultado en /var/lib/nfs/xtab, donde mountd lo puede leer. Existen otros indicadores para exportfs que permiten desincronizar estos dos archivos. Es decir, es posible agregar o quitar temporariamente directorios exportados sin modificar los registros semipermanentes en /etc/exports. Los administradores de otros servidores similares a Unix deben tener en cuenta que la sintaxis del archivo /etc/exports de Linux difiere considerablemente de la de SunOS o BSD. Configuración de /etc/hosts.allow y /etc/hosts.deny El archivo de configuración /etc/hosts.allow describe los hosts que tienen permiso para conectarse a un sistema Linux. Esta configuración no es específica de NFS, sino que es necesario que un sistema tenga permiso para poder conectarse y usar un servidor NFS. Por su parte, /etc/hosts.deny es una lista de hosts que tienen prohibido conectarse. De una manera un poco irracional, primero se buscan los hosts permitidos y luego los denegados, y se le concede acceso a todo aquello que no esté asociado. Esto no significa que los mecanismos de inicio de sesión de los servidores no funcionen; sin embargo, un administrador cauteloso podría denegar todo aquello que no esté expresamente permitido (un poco de paranoia viene bien) usando: 1 # /etc/hosts.deny ALL:ALL EXCEPT localhost:DENY Si se configura /etc/hosts.deny de manera de denegar todo (excepto conexiones desde LOCALHOST), solo tendrán permiso aquellas conexiones expresamente permitidas. Por ejemplo: #/etc/hosts.allow# Allow localhost and intra-net domain to use all servers ALL : 127.0.0.1, 192.168. # Let everyone ssh here except 216.73.92.* and .microsoft.com sshd: ALL EXCEPT 216.73.92. .microsoft.com : ALLOW # Let users in the *.example.net domain ftp in ftpd: .example.net Configuración de /etc/exports El siguiente es un archivo /etc/export de muestra: # sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash) Por lo general, a root (uid 0) en el cliente se lo considera nobody (uid 65534) en el servidor; esto se denomina aplastamiento de raíz ya que protege los archivos de propiedad de raíz (no de grupo ni editables) para evitar su modificación por parte de los clientes NFS. La etiqueta no_root_squash deshabilita este comportamiento y permite el acceso completo del usuario raíz entrusty a la partición /. Esto puede resultar para la instalación y configuración de software. La partición /usr será de solo lectura para todos los hosts excepto para aquellos que estén en el netgroup "confiable". Cuando /home/joe está montado por pc001, se considera que todos los usuarios remotos (independientemente de uid/gid) tienen uid=150 y gid=100. Esto es útil si el cliente NFS remoto es una estación de trabajo de usuario único o incompatible con diferentes usuarios (p. ej., DOS). Por lo general, Linux (y otros sistemas operativos similares a Unix) reserva el uso de los puertos TCP y UDP 1-1023 (denominados puertos seguros) a los procesos que se ejecutan como raíz. Para garantizar el inicio del usuario raíz como montaje NFS remoto, el servidor NFS generalmente requiere que los clientes remotos usen puertos seguros al montar sistemas de archivos NFS. Sin embargo, esta convención no es respetada por ciertos sistemas operativos (en particular, Windows). En esos casos, la opción Insecure (inseguro) permite al cliente NFS usar cualquier puerto TCP/UDP. Esto suele ser necesario en el caso de clientes Windows. Utilidades de NFS nfsstat muestra una serie temporal de estadísticas relacionadas con NFS (cliente y/o servidor) sobre la máquina local de un modo similar a iostat y vmstat. El comando showmount consulta mountd y muestra cuáles son los clientes que montan sistemas de archivos. Como NFS es un protocolo sin estado y el daemon mountd no se consulta con frecuencia, el resultado de showmount puede ser incorrecto. Desgraciadamente, no existe una manera de forzar la corrección de showmount. Sin embargo, en caso de incorrección, el error de showmount casi siempre consiste en mostrar montajes obsoletos**** y no en omitir montajes activos, lo cual es relativamente inofensivo. En este contexto, "sin estado" significa que los daemons nfsd que proporcionan los datos de archivo no mantienen en la memoria qué archivos están abiertos ni qué clientes tienen montadas qué particiones. Cada una de las solicitudes (readblock, writeblock, etc.) contiene toda la información necesaria para su compleción (id. de partición proporcionado por mountd, número de inodo, número de bloque, datos de lectura, escritura, etc.). El protocolo HTTP es similar en este sentido. Una ventaja de la falta de estado es que si se reinicia el servidor, los clientes solamente notarán un breve período de acceso interrumpido. Configuración de un servidor Samba Configuración de un servidor Samba El servidor Samba smbd proporciona servicios de archivos y de impresión (principalmente para clientes Windows). Si bien es posible iniciarlo desde inetd, generalmente se lo ejecuta como un 2 daemon independiente smbd -D. nmbd es el servidor de nombres de NetBios (o servidor WINS). También se lo puede ejecutar desde inetd, pero, generalmente, se lo ejecuta como un daemon independiente nmbd -D. Samba puede actuar como servidor en un grupo de trabajo Windows y como controlador de dominio principal. El archivo de configuración tanto de smbd como de nmbd es /etc/samba/smb.conf. En la página man smb.conf se describen abundantes parámetros de configuración. El archivo lmhosts se usa para asignar nombres de NetBios a direcciones IP. Su formato es similar (pero no idéntico) al archivo /etc/hosts. Existen excelentes instructivos sobre la configuración de Samba, así como varios libros sobre el tema. Esta sección toca las ideas básicas y contiene indicadores de documentación más completa. Configuración de un recurso compartido de archivos de directorio principal El siguiente fragmento de código smb.conf permite a los usuarios acceder a sus directorios principales (locales) desde clientes Samba remotos: [homes]comment = Home Directories browseable = no Por lo general, el fragmento está incluido en el archivo smb.conf predeterminado. Configuración de un recurso compartido de impresión con CUPS De los numerosos sistemas de impresión Unix, CUPS es el menos anticuado y, probablemente, el más popular en la actualidad. Dependiendo de la distribución, CUPS puede estar habilitado en el smb.conf predeterminado. El siguiente es un ejemplo simple de un recurso compartido de impresión CUPS: [global]load printers = yes printing = cups printcap name = cups [printers] comment = All Printers path = /var/spool/samba browseable = no public = yes guest ok = yes writable = no printable = yes printer admin = root [print$] comment = Printer Drivers path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root CUPS puede proporcionar archivos ppd (descripción de impresora Postscript) y controladores de Windows para clientes que, si se configuran correctamente, permiten a los usuarios remotos aprovechar toda la gama de características de una impresora (color vs. blanco y negro, resolución, selección de bandeja de papel, impresión doble cara vs. una cara, etc.). Los sistemas de impresión Unix tradicionales son, en comparación, muy complicados. Si desea obtener más información, consulte la página man cupsaddsmb. Autenticación Samba (a diferencia de NFS) requiere que cada uno de los usuarios se autentique en el servidor. Como con cualquier servicio de autenticación de red, hay que asegurarse de que las contraseñas no pasen por la red sin cifrar. Para obtener más detalles, consulte la sección relativa al cifrado de contraseñas en la página man smb.conf. Existen varios mecanismos que puede usar Samba para autenticar usuarios remotos (clientes). Por naturaleza, la mayoría de ellos son incompatibles con el hash de contraseña Unix estándar. La excepción notable se da cuando las contraseñas se pasan en línea sin cifrar, lo cual es siempre una mala idea. Si se cifran contraseñas en línea, smbpasswd generalmente se usará para establecer una contraseña Samba inicial para los usuarios. La opción "Unix password sync" permite que smbpasswd cambie las contraseñas Unix cada vez que los usuarios cambien su contraseña Samba. 3 Por otro lado, el módulo pam_smb configurado puede autenticar usuarios Linux usando la base de datos Samba directamente. Y si estas opciones no fueran suficientes, se puede usar LDAP para autenticar usuarios Samba o Linux. Depuración de Samba Al configurar un servidor Samba, el comando testparm (osmbtestparm) puede resultar muy útil. Analizará el archivo smb.conf e informará problemas. El comando nmblookup hace en Samba lo que nslookup hace en DNS; consulta el directorio NetBios. Si desea obtener más detalles, consulte la página man nmblookup. Configuración del cliente Samba El comando smbclient proporciona un acceso similar a FTP a un recurso compartido de archivos Samba. Un acceso transparente a los recursos compartidos de archivos SMB es más complicado; para obtener más información, consulte la página man smbmount o el paquete sharit'. Configuración de los servidores de protocolo de transferencia de archivos Acerca de FTP FTP es un protocolo de red tradicional de uso generalizado. Por lo general, FTP se ejecuta en dos puertos separados, 20 y 21. El puerto 21 actúa como una secuencia de control (para transmitir comandos e información de inicio de sesión), mientras que el puerto 20 actúa como una secuencia de datos por donde se transmite el contenido de los archivos. A FTP no se lo suele considerar un protocolo muy seguro debido a que, en su modo de funcionamiento predeterminado, la información de control—contraseñas de inicio de sesión—se transmiten sin cifrar. En realidad, las secuencias de datos también están cifradas, pero FTP comparte esa característica con NFS y Samba (con canales de datos seguros, SSH/SCP es una mejor opción). Sin embargo, es posible disponer en capas el puerto de control de FTP a través de SSH de manera de proteger la información de control. Los clientes FTP tradicionales proporcionan su propio entorno shell para transmitir comandos de control y configurar conexiones. A veces se usan front-ends GUI para dotar a las transferencias FTP de interfaces fáciles de usar. Sin embargo, en la actualidad, muchas herramientas no dedicadas incorporan FTP (generalmente todos los programas, desde los administradores de archivos hasta los editores de texto, están felices cuando trabajan con archivos proporcionados por un servidor FTP). FTP anónimo Con el uso más extendido de FTP, la seguridad no suele ser un problema. Probablemente los servidores FTP se usen con "FTP anónimo", es decir, datos que están disponibles para todo el mundo y que, por lo tanto, no requieren tanta seguridad. Convencionalmente, se configura un nombre de usuario de anónimo para permitir acceso, y se solicita una contraseña de identificación (por lo general, una dirección de correo electrónico) que no se verifica. A veces se requiere un nombre de usuario y una contraseña, pero esta combinación se proporciona sin ninguna autenticación de usuario profunda (por ejemplo, con gente que se ofrece como voluntaria para un proyecto determinado). La mayoría de los exploradores Web y muchos administradores y herramientas de archivos son compatibles con los servidores FTP de manera transparente. Estas herramientas suelen usar una URL FTP para solicitar un archivo (o para cargar un archivo en un servidor). Por ejemplo, la herramienta de línea de comandos wget recupera archivos de servidores FTP usando el siguiente código: $ wget ftp://example.net/pub/somefile $ wget ftp://user:passwd@example.net/pub/somefile Por lo general, los administradores de archivos montan un servidor FTP de manera que sea esencialmente idéntico a un sistema de archivos local o a una unidad de NFS o Samba (sin 4 embargo, aquí no se usa el sistema mount y /etc/fstab; a estas seudoparticiones se las suele nombrar con su URL). Elección de servidores FTP Debido a la antigüedad y la omnipresencia de FTP, existe un sorprendente número de implementaciones disponibles e instaladas para varias distribuciones Linux. La configuración del servidor FTP que se decida usar hace necesario consultar la documentación que acompaña al servidor específico. Entre los servidores FTP Linux más populares cabe incluir los siguientes: • wu-ftpd. • vsftpd. • ProFTPd. • BSD ftpd. • TUX FTP. Además, existen muchos servidores de uso menos generalizado. En casi todos los casos, la configuración del servidor se aloja en un archivo como /etc/FOOftpd.conf (con un valor adecuado de "FOO"). Personalmente, me gusta vsftpd, que es rápido y evita problemas de seguridad conocidos ("vs" significa "muy seguro "). Archivo de configuración FTPd de muestra Debido a la abundancia de servidores, las sintaxis de configuración difieren. Sin embargo, algunos conceptos extraídos de /etc/vsftpd.conf ilustran los tipos de opciones que proporcionan los otros servidores. Con vsftpd, cada opción toma la formaoption=value; las marcas hash habituales corresponden a las líneas de comentarios. La mayoría de los otros archivos de configuración FTPd son similares. • anonymous_enable: controla si se permiten los inicios de sesión anónimos. • anon_world_readable_only: si está activado, los usuarios anónimos solo podrán descargar archivos de legibilidad mundial. • chroot_local_user: si está activado, se colocará a los usuarios locales en una cárcel chroot() en su directorio principal después del inicio de sesión. • pasv_enable: el servidor usa el estilo "FTP pasivo" en que los clientes inician los puertos (ayuda con los firewalls en los clientes). • ssl_enable: si está activado, vsftpd será compatible con las conexiones seguras SSL. • tcp_wrappers: si está activado, las conexiones entrantes se alimentarán a través del control de acceso (como /etc/hosts.allow y /etc/hosts.deny). Iniciación de un servidor FTP En el caso más simple, el servidor FTP se puede iniciar de la misma manera que cualquier daemon: % sudo vsftpd En este punto, el servidor detectará las conexiones entrantes de acuerdo con las reglas configuradas en el archivo de configuración correspondiente. También es posible iniciar un servidor FTP desde un "superservidor de red" como inetd o xinetd. En los tutoriales para el examen 202 del LPI se analizarán estos superservidores. Si el daemon se inicia de manera individual, incluso con scripts de inicio adecuados – tanto como para un nivel de ejecución específico como para /etc/rcS.d/–, usted tendrá un control más preciso del comportamiento del servidor FTP. Sistema de nombres de dominio (DNS) Acerca de DNS 5 El sistema de nombres de dominio permite a los usuarios de aplicaciones TCP/IP referirse a los servidores por nombre simbólico en vez de por dirección IP numérica. El software Berkeley Internet Name Domain (BIND) provee un daemon de servidor llamado named que responde pedidos de información sobre la dirección IP asignada a un nombre simbólico (un una búsqueda inversa u otra información). Del lado del cliente del sistema DNS, un resolutor es un conjunto de bibliotecas que pueden utilizar las aplicaciones para comunicarse con los servidores DNS. El paquete BIND viene con varias utilidades para el cliente que ayudan a configurar, consultar y depurar un servidor BIND 9: dig, nslookup, host, y rndc(anteriormente ndc). En esencia, estas utilidades llaman a las mismas bibliotecas que otras aplicaciones de clientes, pero dan información directa sobre las respuestas proporcionadas por los servidores DNS. Acerca de BIND Al momento de esta redacción, la versión actual de BIND es 9.3.1. La primera versión estable de la serie BIND 9 salió en octubre de 2000. Puede encontrar BIND 8, que aún se mantiene por los parches de seguridad (actualmente de la versión 8.4.6), en algunas instalaciones más antiguas, pero como norma, actualice a BIND 9 donde sea posible. Los sistemas muy antiguos podrían tener instalado BIND 4, pero debe actualizarlos lo antes posible ya que BIND 4 ya no se soporta en las versiones actuales. Todas las versiones de BIND se pueden obtener del Consorcio de Sistemas de Internet (ISC; ver Recursos para obtener un enlace). La documentación y otros recursos sobre BIND también están en ese sitio. Debido a que los objetivos LPI requieren específicamente conocimientos de la configuración de BIND 8, y aquí cubrimos BIND 9, la recomendamos que revise la información de BIND 8 en el sitio USC antes de dar el examen LPI 202. Otros recursos Al igual que con la mayoría de las herramientas de Linux, siempre es útil examinar las páginas del manual para ver toda utilidad tratada. Las versiones y los conmutadores pueden cambiar entre la utilidad o la versión del kernel o con las distintas distribuciones de Linux. Para obtener información más detallada, el Proyecto de documentación Linux (ver Recursos para obtener un enlace) tiene una cantidad de instructivos útiles. Se han publicado una variedad de buenos libros sobre redes Linux, en particular TCP/IP Network Administration de O'Reilly es bastante útil (fíjese qué edición es la más actual cuando lea esto; verRecursos para obtener un enlace). Para obtener específicamente información sobre DNS y BIND, DNS and BIND, Fourth Edition de O’Reilly es un buen recurso (ver Recursos para obtener un enlace); en 622 páginas cubre más detalles de los que puede abarcar este tutorial. También hay otros libros sobre BIND de diversos editores. Cómo comprender las consultas del sistema de nombres de dominio La topología de DNS DNS es un sistema jerárquico de zonas de dominio. Cada zona brinda un conjunto limitado de respuestas sobre mapeos de nombres de dominio, aquellos dentro de su propio subdominio. Cierto servidor consulta un servidor más general cuando no conoce un mapeo y, de ser necesario, sigue las sugerencias de redireccionamiento hasta que encuentra la respuesta correcta (o determina que no se puede encontrar una respuesta, lo que produce un error). Cuando un servidor local named encuentra la respuesta a una consulta DNS, almacena en caché esa respuesta durante una cantidad de tiempo configurable (generalmente en el orden de horas en vez de segundos o días). Al almacenar en caché las consultas DNS, la demanda general de red se reduce considerablemente, sobre todo en los servidores de dominio de nivel superior (TLD). El artículo sobre DNS que figura en Wikipedia (ver la sección Recursos para obtener un enlace) es un punto de partida excelente para comprender la arquitectura general. Este tutorial toma prestado un diagrama de dominio público de ese sitio (ver la Figura 1 a continuación). Un diagrama de una consulta DNS hipotética facilita comprender el proceso de búsqueda general. Suponga que su máquina desea contactar el nombre simbólico de dominio www.wikipedia.org. Para encontrar la dirección IP correspondiente, su máquina consultaría primero el servidor de 6 nombres que ha configurado para la máquina de un cliente. Este servidor de nombres local puede ejecutarse en la misma máquina que la aplicación del cliente; puede ejecutarse en un servidor DNS en su LAN local; o puede proporcionarlo su proveedor de servicios de Internet. En casi todos los casos, es una instancia del named del BIND. Este servidor de nombres local primero verifica su caché, pero suponiendo que no haya información almacenada en caché disponible, realizará los pasos que se muestran en el siguiente diagrama: Figura 1. Ejemplo de recursividad de DNS Comprenda que en este diagrama, el “DNS Recurser” es el servidor DNS real (named), no la aplicación del cliente que le habla. DNS utiliza TCP y UDP en el puerto 53 para atender solicitudes. Casi todas las consultas DNS consisten en una solicitud UDP individual del cliente seguida de una respuesta UDP individual del servidor. Cómo sabe una aplicación dónde encontrar un servidor DNS Configurar el acceso de la aplicación de cliente a su servidor (o servidores) DNS es bastante sencillo. Toda la configuración está dentro del archivo /etc/resolve.conf, cuya tarea principal es especificar direcciones IP para uno o más servidores DNS "locales". Puede configurar /etc/resolve.conf manualmente con servidores DNS conocidos; sin embargo, si usa DHCP para configurar un cliente, el proceso de enlace agregará automáticamente esta información a /etc/resolve.conf (aún puede leerla o incluso modificarla después de que DHCP la configure, pero se restablecerá al reiniciar la máquina). El código de biblioteca modificado por /etc/resolv.conf se llama "solucionador DNS". Si se configura más de un servidor DNS en un archivo /etc/resolv.conf, se consultarán servidores DNS secundarios y terciarios si el servidor primario no da respuesta dentro del tiempo de espera especificado. Se puede configurar un máximo de tres servidores DNS. La entrada básica dentro de un archivo /etc/resolv.conf contiene las entradas nameserver <IPaddr>. Algunas otras entradas le permiten modificar las respuestas recibidas. Por ejemplo, las directivas domain y search le permiten expandir los nombres sin puntos en ellos (como por ejemplo máquinas de la LAN local). La directiva options le permite modificar tiempos de espera por servidor DNS, activar el depurador, decidir cuándo anexar nombres de dominio completos, y modificar otros aspectos del comportamiento del solucionador DNS. Por ejemplo, una de mis máquinas está configurada con: Listado 1. Modificación de opciones para configurar servidores DNS # cat /etc/resolv.conf search gnosis.lan nameserver 0.0.0.0 nameserver 192.168.2.1 nameserver 151.203.0.84 options timeout:3 La primera directiva la permite a esta máquina saber que las máquinas de la LAN local usan el dominio privado gnosis.lan, así que el nombre simple bacchus se puede resolver como bacchus.gnosis.lan. Se puede listar más de un dominio separado por espacio en la directiva search. A continuación, indico varios servidores DNS para probar. El primero es la máquina local misma, que se puede llamar 0.0.0.0 o por su dirección IP oficial, pero no con una dirección de bucle invertido. La siguiente directiva nameserver lista el router de la oficina hogareña que conecta mi 7 LAN con Internet (y provee servicios DHCP y DNS). El servidor de nombres terciario lo proporciona mi proveedor de servicios de Internet. También configuro una opción para utilizar un tiempo de espera de tres segundos en cada servidor de nombres en lugar de los cinco segundos predeterminados. Utilidades de cliente DNS BIND 9 viene con cuatro utilidades de cliente principales. Tres de ellas: dig, nslookup y host -realizan funciones similares, más o menos en orden de detalle descendente. Las tres utilidades son simplemente utilidades de línea de comandos para ejercitar el solucionador DNS. Básicamente hacen lo que muchas aplicaciones de cliente hacen internamente; estas utilidades tan sólo proveen datos de salida sobre los resultados de las búsquedas en STDOUT. La más poderosa de las tres utilidades,dig, también tuene la mayor cantidad de opciones para limitar o configurar su salida. Estas utilidades se usan con mayor frecuencia para buscar una dirección IP de un nombre de dominio simbólico, pero puede realizar búsquedas inversas u otros tipos de registro que no sean registros “A” predeterminados. Por ejemplo, el comandohost -t MX gnosis.cx le muestra servidores de correo asociados a gnosis.cx. Algunos ejemplos podrían ser de ayuda: Listado 2. Consulta de host en google.com $ host google.com google.com has address 72.14.207.99 google.com has address 64.233.187.99 Listado 3. Consulta de host MX en gnosis.cx $ host -t MX gnosis.cx gnosis.cx mail is handled by 10 mail.gnosis.cx. Para la utilidad:nslookup Listado 4. nslookup usando servidor predeterminado (máquina local) $ nslookup gnosis.cx Server: 0.0.0.0 Address: 0.0.0.0#53 Non-authoritative answer: Name: gnosis.cx Address: 64.41.64.172 O una búsqueda inversa usando la utilidad dig y especificando un servidor de nombres no predeterminado: Listado 5. Indagar búsqueda inversa especificando un servidor de nombres no predeterminado $ dig @192.168.2.2 -x 64.233.187.99 ; <<>> DiG 9.2.4 <<>> @192.168.2.2 -x 64.233.187.99 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 3950 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;99.187.233.64.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 187.233.64.in-addr.arpa. 2613 IN SOA ns1.google.com. dns-admin.google.com. 2004041601 21600 3600 1038800 86400 ;; Query time: 1 msec ;; SERVER: 192.168.2.2#53(192.168.2.2) ;; WHEN: Thu Nov 10 02:00:27 2005 ;; MSG SIZE rcvd: 104 La utilidad BIND 9 restante para recordar es rndc. La utilidad rndc controla el funcionamiento de un servidor de nombres. Sustituye la utilidad ndc que se brindaba en versiones BIND anteriores. Si se invoca rndc sin opciones de línea de comando o argumentos, imprime un breve resumen de comandos soportados. Ver la manpage para rndc para obtener información completa sobre su uso. 8 Configuración BIND básica y ejecución de un name server Configuraciones BIND Cuando ejecuta el daemon con nombre para brindar un servidor DNS, puede elegir entre tres modos de operación: maestro,esclavo y almacenamiento en caché únicamente. El mismo daemon con nombre busca en sus archivos de configuración, principalmente /etc/bind/named.conf, para determinar su modo de operación. En modo maestro, el servidor con nombre actúa como la fuente autoritativa de toda la información sobre su zona. La información de dominio proporcionada por el servidor se carga de un archivo de disco local que se modifica o actualiza en forma manual. Cada zona de DNS debería tener exactamente un servidor maestro. En modo esclavo, el servidor con nombre trasfiere su información de zona desde el servidor maestro para su zona. Técnicamente, un servidor multi zona puede ser maestro de una zona y esclavo de otra, pero con mayor frecuencia una instalación Lan tiene una única jerarquía de servidores entre los servidores maestro y esclavo o de almacenamiento en caché únicamente. Un servidor esclavo transfiere información de zona completa desde su servidor maestro, para que las respuestas proporcionadas por un servidor esclavo se sigan considerando autoritativas. En el modo almacenamiento en caché únicamente, el servidor con nombre no guarda archivos de zona. Cada consulta depende de otro servidor con nombre para obtener una respuesta inicial, pero para minimizar el uso de ancho de banda, el servidor de almacenamiento en caché únicamente almacena en caché consultas anteriores. Sin embargo, toda consulta nueva se debe responder mediante una consulta enviada por la red. Los servidores de almacenamiento en caché únicamente son más comunes en máquinas locales donde las aplicaciones de cliente a menudo pueden realizar una búsqueda sin tráfico de red. En la configuración de /etc/resolv.conf que ofrecí como ejemplo antes en Listado 1, 0.0.0.0 es un servidor de almacenamiento en caché únicamente, 192.168.2.1 es un servidor esclavo, y 151.203.0.84 es un servidor maestro. No puede saber con seguridad solo basándose en el orden o en las direcciones IP utilizadas, pero el uso de la dirección pseudo IP 0.0.0.0 de la máquina local sugiere que está ejecutando un servidor de almacenamiento en caché únicamente. Cómo configurar named.conf Hay algunas funciones estándar que tienen casi todos los archivos /etc/bind/named.conf. Una directiva inicial optionsconfigura alguna información básica. Después, varias directivas zone brindan información sobre cómo manejar diversas solicitudes de zonza. Los dominios indicados en las directivas zone como direcciones IP representan porciones iniciales de rangos de dirección IP, pero si indican “hacia atrás”. Los nombres simbólicos también pueden definir zonas, permitiendo otros subdominios especificados. Los archivos named.conf (y otros archivos de configuración BIND) siguen convenciones de formato tipo C, en gran parte. Los comentarios de bloque estilo C (/* comment */) y los comentarios de línea estilo C++ (// comment) se permiten, al igual que los comentarios de línea estilo shell (# comment). Las directivas son seguidas por instrucciones divididas por punto y coma entre llaves. Para empezar, aquí hay algunas opciones comunes. Mi /etc/bind/named.conf local comienza con: Listado 6. Mi named.conf local comienza así ncluir "/etc/bind/named.conf.options"; Pero también puede utilizar la directiva options directamente: Listado 7. Configuración de opciones named.conf options { directory "/var/bind"; forwarders { 192.168.2.1; 192.168.3.1}; // forward only; } 9 Esta configuración permite a los archivos especificados sin ruta completa ser ubicados en un directorio relativo; también le dice al servidor con nombre local que busque primero en 192.168.2.1 y 192.168.3.1 resultados no almacenados en caché. La directiva forward only (comentada aquí) indica buscar sólo en esos servidores de nombres en la LAN local en lugar de consultar a los servidores raíz en Internet. Una directiva especial zone está presente en casi todos los archivos named.conf: Listado 8. Zona hint para servidores raíz zone "." { type hint; file "/etc/bind/db.root"; }; El contenido de db.root (a veces llamado named.ca por la "autoridad certificadora") es especial. Señala servidores raíz canónicos, los registradores de dominio mismos. Sus valores rara vez cambian, pero puede obtener la versión oficial más reciente en ftp.rs.internic.net. Este no es un archivo que modifica un administrador común. Más allá de la pista zona raíz, un archivo named.conf debe contener algunas zonas maestro y/o esclavo. Por ejemplo, para el bucle invertido local: Listado 9. Configuración de zona de bucle invertido zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; Curiosamente, un servidor con nombre podría actuar como maestro para un dominio (y brindar búsqueda inversa): Listado 10. Configuración de zona externa zone "example.com" { type master; file "example.com.hosts"; // file relative to /var/bind }; // Reverse lookup for 64.41.* IP addresses (backward IP address) zone "41.64.in-addr.arpa" { type master; file "41.64.rev"; }; Para una configuración de esclavo, podría utilizar en cambio: Listado 11. Configuración de zona externa (esclavo) zone "example.com" { type slave; file "example.com.hosts"; // file relative to /var/bind masters { 192.168.2.1; }; }; // Reverse lookup for 64.41.* IP addresses (backward IP address) zone "41.64.in-addr.arpa" { type slave; file "41.64.rev"; masters { 192.168.2.1; }; }; Otros archivos de configuración El archivo named.conf hace referencia a una cantidad de otros archivos de configuración con la directiva file. Estos nombres dependen de su configuración específica, pero en general contienen diversos registros de recursos que se definen en RFC 1033 (Guía de operaciones para administradores de dominios; ver Recursos para obtener un enlace). Los registros de recursos estándar son: SOA Inicio de autoridad. Parámetros que afectan a toda una zona. NS Servidor de nombres. El nombre del servidor de un dominio. A Dirección. Nombre de host a dirección IP. 10 PTR Indicador. Dirección IP a nombre de host. MX Intercambio de correo. Dónde entregar correo para un dominio. CNAME Nombre canónico. Alias del nombre de host. TXT Texto. Almacena valores arbitrarios. El formato de un registro es: <name><time-to-live>IN <type> <data>. El nombre y el tiempo de vida son opcionales y predeterminados conforme a los últimos valore sutilizados. La cadena literal INsignifica que siempre se utiliza Internet en la práctica. Los archivos de registro de recursos también pueden contener directivas, que comienzan con un signo de dólar. El más común quizás sea $TTL, que fija un tiempo de vida predeterminado. Por ejemplo, un archivo de registro algo trivial para el localhost 127.* se ve así: Listado 12. Archivo de registro trivial # cat /etc/bind/db.127 ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 1.0.0 IN PTR localhost. Otras directivas son: $ORIGIN, que fija el nombre de dominio utilizado para completar todo nombre de dominio relativo;$INCLUDE, que lee un archivo externo; y $GENERATE, que crea una serie de registros de recursos que cubren una gama de direcciones IP. Crear y mantener zonas DNS Archivos de zona inversa Los archivos de zona inversa (a menudo indicados con una extensión .rev) contienen mapeos de direcciones IP de zonas específicas a nombres simbólicos. Por ejemplo, podría tener un archivo /var/bind/41.64.rev que contiene: Listado 13. Reverse zone file for 64.41.* $TTL 86400 ; IP address to hostname @ IN SOA example.com. mail.example.com. ( 2001061401 ; Serial 21600 ; Refresh 1800 ; Retry 604800 ; Expire 900 ) ; Negative cach TTL IN NS ns1.example.com. IN NS ns2.example.com. ; Define names for 64.41.2.1, 64.41.2.2, etc. 1.2 IN PTR foo.example.com. 2.2 IN PTR bar.example.com. 3.2 IN PTR baz.example.com. Archivos de zona hacia adelante Los archivos de zona hacia adelante (a menudo llamados domain.hosts) contienen los registros cruciales "A" para nombres simbólicos de mapeo a direcciones IP. Por ejemplo, podría tener una archivo /var/bind/example.com.hosts que contiene lo siguiente: Listado 14. Reenviar archivo de zona para example.com $TTL 86400 ; Hostname to IP address @ IN SOA example.com. mail.example.com. ( 2001061401 ; Serial 21600 ; Refresh 1800 ; Retry 604800 ; Expire 900 ) ; Negative cach TTL IN NS ns1.example.com. IN NS ns2.example.com. localhost IN A 127.0.0.1 foo IN A 11 64.41.2.1 www IN CNAME foo.example.com bar IN A 64.41.2.2 bar IN A 64.41.2.3 Cómo asegurar un servidor DNS Cómo asegurar un servidor DNS Al igual que con muchos servicios, es buena idea ejecutar BIND en una jaula chroot. , Esto limita el accedo de BIND a otros archivos o recursos del sistema si existiera una vulnerabilidad o un error en BIND. Encuentre un tutorial más detallado sobre ejecutar BIND con chroot en el instructivo "Chroot-BIND HOWTO" (ver Recursos para obtener un enlace). La utilidad general de este procedimiento es que no es bueno ejecutar BIND co usuario raíz, o incluso como un usuario común especial como “nadie". A menudo se crea el usuario "named" para ejecutar BIND. Los archivos utilizados por este usuario especial se colocan en un directorio local como /chroot/named/ y subdirectorios relativos apropiados. BIND 9 brinda soporte mucho más limpio para chroot de lo que lo hacía BIND 8; una compilación limpia debería ser suficiente sin conmutadores especiales o ajustes Makefile. DNSSEC Además de asegurar la máquina local que ejecuta BIND, también es deseable brindar garantías de seguridad para el protocolo DNS mismo. Las Extensiones de Seguridad DNS (DNSSEC) son un conjunto de extensiones que brindan autenticidad e integridad DNS está basado en UPD en vez de TCP, y por ende no tiene un mecanismo para verificar una fuente paquete. Esta limitación hace posibles ataques de suplantación e intercepción. En otras palabras, los solicitantes de DNS pueden recibir información maliciosa, por ejemplo para redirigir comunicación al host de un intruso. Al agregar Firmas Transaccionales (TSIG) a solicitudes DNS, DNSSEC puede evitar la suplantación de respuestas DNS. Cada servidor BIND 9 que desea comunicarse en forma segura debe activar DNSSEC, pero el protocolo mejorado es compatible en forma inversa. Lo primero que deben hacer los servidores DNS (los que desean comunicarse de manera segura) es generar key pairs. Esto funciona de manera muy similar a las claves SSH para host y servidor. Por ejemplo: Listado 15. Generación de claves DNSSEC dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n HOST \ primary-secondary.my.dom # ls Kprimary-secondary.my.dom.* Kprimary-secondary.my.dom.+157+46713.key Kprimary-secondary.my.dom.+157+46713.private Como sugieren los nombres de archivo, esto general claves públicas y privadas para el host configurado, y la clave pública se distribuye a otros servidores. Obtenga una buena introducción a DNSSEC en "The Basics of DNSSEC" en la Red O'Reilly (verRecursos para obtener un enlace). Recursos • El artículo sobre DNS que se encuentra en Wikipedia es un buen punto de partida para comprender la arquitectura general. • DNS and BIND, Fourth Edition por Paul Albitz y Cricket Liu (O'Reilly, 2001) cubre minuciosamente los temas relacionados con DNS y BIND. • TCP/IP Network Administration, Third Edition por Craig Hunt (O'Reilly, abril de 2002) es un recurso excelente sobre redes Linux. • El instructivo Chroot-BIND HOWTO muestra cómo configurar BIND para ejecutarse en una jaula chroot. 12 • El instructivo Basics of DNSSEC ofrece una buena introducción a DNSSEC. • Vea 700 Grupos de usuarios de Linux (LUG) en todo el mundo; muchos LUGs tienen grupos de estudio locales y a distancia para los exámenes LPI. • El Proyecto de Documentación Linux Tiene una variedad de documentos útiles, especialmente sus instructivos. • Encuentre más tutoriales para desarrolladores Linux en la zona developerWorks Linux. Servicios web Acerca de Apache y Squid Servidor Web Apache Apache es el servidor Web dominante en Internet en su conjunto; su predominio es aún mayor entre los servidores Linux. Existen algunos otros servidores Web de propósitos especiales (algunos ofrecen un mejor rendimiento para tareas específicas), pero el servidor Apache es siempre la opción predeterminada. Apache viene preinstalado en la mayoría de las distribuciones Linux y, a menudo, ya está funcionando después de ser lanzado durante la inicialización, aun cuando usted no haya configurado específicamente un servidor Web. Si Apache no está instalado, utilice el sistema de instalación normal de su distribución para instalarlo, o descargue el último servidor HTTP del Apache HTTP Server Project (Proyecto de Servidor HTTP Apache). Los módulos aportan muchas otras capacidades, muchas de las cuales se distribuyen con Apache en sí y otras pueden obtenerse de terceros. Aunque el último Apache se encuentra en el nivel 2.x desde 2001, el Apache 1.3.x sigue siendo de uso generalizado y la serie 1.3.x sigue manteniéndose para la corrección de errores y las actualizaciones de seguridad. Existen algunas diferencias de configuración menores entre 1.3 y 2.x; hay algunos módulos disponibles para 1.3 que no están disponibles para 2.x. Las últimas versiones a la fecha de este tutorial son 1.3.34 (estable), 2.0.55 (estable) y 2.1.9 (beta). Como norma, un nuevo servidor debería utilizar la última versión disponible de la serie 2.x. A menos que usted tenga una necesidad especifica para utilizar un módulo no habitual más antiguo, 2.x proporciona buena estabilidad, más capacidades y un mejor rendimiento general (para algunas tareas, como soporte PHP, el 1.3 sigue teniendo un mejor rendimiento). Con miras al futuro, las nuevas funcionalidades tendrán sin duda un mejor soporte en 2.x que en 1.3.x. Servidor proxy Squid Squid es un servidor proxy-caché para clientes Web que soporta los protocolos HTTP, FTP, TLS, SSL y HTTPS. Ejecutando un caché en una red local, o al menos más cerca de su red que los recursos consultados, se puede mejorar la velocidad y reducir el ancho de banda de la red. Cuando las máquinas atendidas por el mismo servidor Squid solicitan el mismo recurso varias veces, el recurso es prestado desde una copia local del servidor en lugar de que el pedido salga por múltiples routers de red que pueden potencialmente desacelerar o sobrecargar a los servidores de destino. Usted puede configurar a Squid como proxy explícito que debe configurarse en cada cliente Web (navegador) o configurarlo para que intercepte todos los pedidos Web que salen de una LAN y almacenar en caché todo ese tráfico. Puede configurar a Squid con diversas opciones respecto de la duración y las condiciones en que habrán de mantenerse las páginas almacenadas en caché. Otros recursos Tal como ocurre con la mayoría de las herramientas Linux, siempre es útil examinar las páginas man para conocer las utilidades que se analizan. Las versiones y switches podrían cambiar entre las distintas versiones de utilidad o kernel o con diferentes distribuciones de Linux. Si desea 13 información más detallada, el Proyecto de Documentación de Linux contiene una serie de documentos útiles, en especial los instructivos. Se han publicado una serie de libros sobre redes Linux; en mi opinión,TCP/IP Network Administration (Administración de redes TCP/IP) de O’Reilly,, escrito por Craig Hunt, es especialmente útil. (Vea Recursos más adelante en este tutorial si desea los vínculos.) También se han escrito buenos libros sobre cómo trabajar con Apache. Algunos se refieren a la administración general mientras que otros cubren módulos determinados o configuraciones especiales de Apache. Consulte en la librería de su preferencia la gama de títulos disponibles. Implementación de un servidor Web Una multitud daemons El inicio de Apache es similar al inicio de cualquier otro daemon. Por lo general, usted prefiere colocar su inicio en los scripts de inicialización del sistema pero, en principio, puede iniciar el Apache en cualquier momento. En la mayoría de los sistemas, al Apache se lo llama httpd, aunque también puede llamárselo apache2. Es probable que el servidor esté instalado en /usr/sbin/, pero otras ubicaciones son posibles dependiendo de la distribución y de cómo haya instalado usted el servidor. En la mayoría de las ocasiones, usted iniciará el Apache sin opciones pero vale la pena tener en cuenta las opciones -d serverroot y -f config. La primera opción le permite especificar una ubicación en los discos locales desde la cual se brindará contenido; la segunda le permitirá especificar un archivo de configuración no predeterminado. Un archivo de configuración puede anular la opción f utilizando la directiva ServerRoot (la mayoría lo hace). De forma predeterminada, los archivos de configuración son apache2.conf o httpd.conf, dependiendo de las opciones de compilación. Estos archivos podrían estar en /etc/apache2/, /etc/apache/, /etc/httpd/conf/, /etc/httpd/apache/conf, o en algunas otras ubicaciones dependiendo de la versión, la distribución de Linux y la forma en que usted instaló o compiló Apache. La verificación de man apache2 o man httpd debería darle detalles específicos del sistema. El daemon de Apache es poco común si se lo compara con otros servidores en el sentido de que, por lo general, crea varias copias ejecutables de sí mismo. La copia principal sencillamente engendra las otras, mientras que estas copias secundarias atienden los pedidos entrantes reales. El objetivo de tener múltiples copias ejecutables es actuar como "pool" (grupo) para los pedidos que pueden llegar en paquetes; las copias adicionales del daemon se inician cuando resulta necesario, de acuerdo con varios parámetros de configuración. Por lo general, la copia principal se ejecuta como raíz pero las otras copias se ejecutan como usuario más restringido por razones de seguridad. Por ejemplo: Listado 1. Las numerosas caras de copias ejecutables múltiples de Apache # ps axu | grep apache2 root 6620 Ss Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6621 S Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6622 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL www-data 6624 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL dqm 313 S+ 03:44 0:00 man apache2 root 637 S+ 03:59 0:00 grep apache2 En muchos sistemas, el usuario restringido no será nadie. En el Listado 1, es www-data. Inclusión de los archivos de configuración Como se mencionó antes, la conducta de Apache se ve afectada por directivas de su archivo de configuración. Para los sistemas Apache2, es muy probable que el principal archivo de configuración resida en /etc/apache2/apache2.conf pero, a menudo, este archivo contiene múltiples instrucciones Include (incluir) para agregar información de configuración de otros archivos, posiblemente mediante patrones de comodines. En términos generales, es probable que una configuración de Apache contenga cientos de directivas y opciones (la mayoría de las cuales no se documentaron específicamente en este tutorial). 14 También es muy probable que se incluyan algunos archivos. Usted podría ver httpd.conf para las configuraciones del "usuario", para utilizar los archivos de configuración anteriores a Apache 1.3 que utilizan ese nombre. En general, los hosts virtuales se especifican en archivos de configuración independientes, compatibilizados en un comodín, como se muestra a continuación: Listado 2. Especificación de hosts virtuales # Include the virtual host configurations (incluye las configuraciones de host virtuales): Incluye /etc/apache2/sites-enabled/[^.#]* Con Apache 2.x, los módulos también se especifican por lo general en archivos de configuración independientes (a menudo en el mismo archivo en 1.3.x). Por ejemplo, un sistema propio incluye: Listado 3. Desde /etc/apache2/apache2.conf # Include module configuration (incluye la configuración del módulo): Incluye /etc/apache2/mods-enabled/*.load Incluye /etc/apache2/mods-enabled/*.conf En realidad, para utilizar un módulo en un servidor Apache ejecutable hacen falta dos pasos en el archivo de configuración, cargarlo y habilitarlo: Listado 4. Carga de un módulo Apache opcional # cat /etc/apache2/mods-enabled/userdir.load LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so # cat /etc/apache2/mods-enabled/userdir.conf <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule> Los comodines de las líneas Include (Incluir) insertarán todos los archivos .load y .conf en el directorio /etc/apache2/mods-enabled/. Observe el patrón general: las directivas básicas son comandos de una línea con algunas opciones; las directivas más complejas anidan comandos que utilizan una etiqueta abrir/cerrar tipo XML. Para cada directiva, usted sólo deberá saber si es una línea o estilo abrir/cerrar – no puede elegir el estilo que desea a voluntad. Archivos de registro Una clase importante de directivas de configuración se refieren al registro de las operaciones de Apache. Usted podrá mantener diferentes tipos de información y niveles de detalle para las operaciones de Apache. Llevar un registro de errores siempre es una buena idea; podrá especificarlo con la siguiente directiva única: Listado 5. Especificación de un registro de errores # Global error log. ErrorLog /var/log/apache2/error.log Podrá personalizar otros registros de acceso al servidor, de referenciador y de cualquier otra información apropiada para su configuración individual. La operación de registro se configura con dos directivas. Primero, una directiva LogFormat utiliza un conjunto de variables especiales para especificar lo que va en el archivo de registro; segundo, una directiva CustomLog le dice a Apache que registre realmente los eventos en el formato especificado. Usted podrá especificar un número 15 ilimitado de formatos independientemente de que se utilicen o no. Esto le permite activar y desactivar detalles del registro de acuerdo con las necesidades que pudieran surgir. Las variables de un LogFormat son similares a las variables shell, pero con un % inicial. Algunas variables tienen letras únicas, mientas que otras tienen nombres largos rodeados de corchetes, tal como se muestra en el Listado 6. Listado 6. Variables de LogFormat LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog /var/log/apache2/referer_log combined Consulte un libro o la documentación completa de Apache si desea una lista de todas las variables. Entre las más comunes se encuentran: %h para la dirección IP del cliente solicitante, %t para la fecha y hora del pedido, %>s para el código de estado de HTTP, y la variable mal escrita %{Referer} para el sitio referenciador que llegó a la página atendida . El nombre utilizado en las directivas LogFormat y CustomLog es arbitrario. En el Listado 6, se utilizó el nombre combined pero también podría ser myfoobarlog. Sin embargo, hay algunos nombres que habitualmente se utilizan y que vienen con archivos de configuración de muestra, como combined, common, referer y agent. Por lo general, estos formatos específicos reciben el soporte directo de las herramientas analizadoras de registros. Mantenimiento de un servidor Web Hosts virtuales, multi-homing y opciones por directorio Los directorios individuales servidos por un servidor Apache pueden tener sus propias opciones de configuración. Sin embargo, la configuración principal puede limitar las opciones que pueden configurarse localmente. Si desea una configuración por directorio, utilice la directiva AccessFileName y especifique el nombre de archivo de configuración local de .htaccess. Las limitaciones de configuración local se especifican dentro de una directiva <Directory>.Por ejemplo: Listado 7. Ejemplo de directiva de directorio #Let's have some Icons, shall we? Alias /icons/ "/usr/share/apache2/icons/" <Directory "/usr/share/apache2/icons"> Options Indexes AllowOverride None Order allow,deny Allow from all </Directory> MultiViews A menudo, trabajando en conjunto con las opciones por directorio, Apache puede atender a los hosts virtuales. Múltiples nombres de dominio pueden ser atendidos desde el mismo proceso Apache, cada uno de los cuales accede a un directorio apropiado. Usted puede definir los hosts virtuales con la directiva <VirtualHost>; coloque los archivos de configuración en un directorio incluido, como /etc/apache2/sites-enabled/ o en un archivo de configuración principal. Por ejemplo, usted podría especificar: Listado 8. Configuración de hosts virtuales <VirtualHost "foo.example.com"> ServerAdmin webmaster@foo.example.com DocumentRoot /var/www/foo ServerName foo.example.com <Directory /var/www/foo> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> CustomLog /var/log/apache2/foo_access.log 16 combined </VirtualHost> <VirtualHost "bar.example.org"> DocumentRoot /var/www/bar ServerName bar.example.org </VirtualHost> <VirtualHost *> DocumentRoot /var/www </VirtualHost> La opción final * toma cualquier pedido HTTP que no esté dirigido a uno de los nombres especificados explícitamente (como los dirigidos por dirección IP o dirigidos como un dominio simbólico no especificado que también resuelve a la máquina servidor). Para que los dominios virtuales funcionen, DNS debe definir cada alias con un registro CNAME. Los servidores multi-homed suenan de manera similar al hosting virtual pero el concepto es diferente. Utilizando multi-homing, usted podrá especificar las direcciones IP a las que está conectada una máquina para permitir los pedidos Web. Por ejemplo, usted podría brindar acceso HTTP sólo a la LAN local y no al mundo exterior. Si usted especifica una dirección para escuchar, también puede indicar un puerto no predeterminado. El valor predeterminado para BindAddress es *, que significa aceptar los pedidos de cada dirección IP bajo la cual se puede acceder al servidor. El siguiente podría ser un ejemplo mixto: Listado 9. Configuración de multi-homing BindAddress 192.168.2.2 Listen 192.168.2.2:8000 Listen 64.41.64.172:8080 En este caso, aceptaremos todos los pedidos del cliente provenientes de la LAN local (que utilizan la dirección 192.168.2.2) en el puerto predeterminado 80 y en el puerto especial 8000. Esta instalación de Apache también monitoreará los pedidos HTTP del cliente que provienen de la dirección WAN, pero sólo en el puerto 8080. Limitación del acceso Web Usted puede habilitar el acceso al servidor por directorio con los comandos Order, Allowfrom, y Deny from que están dentro de una directiva <Directory>. Es posible especificar las direcciones denegadas o permitidas mediante nombres de host parciales o direcciones IP. Order le permite establecer una prioridad entre la lista de aceptación y la lista de denegación. En muchos casos, usted necesitará un control más ajustado que el que puede obtener con el simple hecho de permitir que determinados hosts accedan a su servidor Web. Para habilitar los requisitos de inicio de sesión del usuario, utilice la familia de comandos Auth*, que se encuentra también dentro de la directiva <Directory>. Por ejemplo, para configurar la Autenticación Básica, usted podría utilizar una directiva como la que aparece en el Listado 10. Listado 10. Configuración de la Autenticación Básica <Directory "/var/www/baz"> AuthName "Baz" AuthType Basic AuthUserFile /etc/apache2/http.passwords AuthGroupFile /etc/apache2/http.groups Require john jill sally bob </Directory> También puede especificar la Autenticación Básica dentro de un archivo .htaccess por directorio. La Autenticación “Digest” es más segura que la Básica, pero se encuentra mucho menos implementada en los servidores. Sin embargo, la debilidad de la Autenticación Básica (que transmite contraseñas en texto claro) de todos modos se resuelve mejor con una capa SSL. El soporte al cifrado SSL del tráfico Web es suministrado por el módulo mod_ssl. Cuando se utiliza SSL, los datos transmitidos entre el servidor y el cliente se cifran con una contraseña que se negocia de forma dinámica y que es resistente a la interceptación. Todos los navegadores importantes soportan SSL. Si desea más información sobre cómo configurar Apache 2.x con mod_ssl, vea la descripción en el sitio Web de Apache (diríjase a Recursos para ver el vínculo). 17 Implementación de un servidor proxy Instalación y ejecución de Squid En la mayoría de las distribuciones, usted puede instalar Squid utilizando los procedimientos de instalación normal. Obtenga la versión fuente de Squid en el sitio Web de Squid Web Proxy Cache (diríjase a Recursos para ver el vínculo). Construyendo a partir de la fuente, utilice la secuencia básica ./configure; make; make install. Una vez instalado, podrá ejecutarlo de manera sencilla como raíz, /usr/sbin/squid (o desde la ubicación que utilice su distribución, quizá /usr/local/sbin/). Por supuesto que para que resulte mucho más útil, usted probablemente querrá configurar el archivo de configuración de Squid en /etc/squid/squid.conf, /usr/local/squid/etc/squid.conf, o en el lugar en el que su sistema ubique con precisión a squid.conf. Tal como ocurre con casi todos los daemons, podrá utilizar un archivo de configuración diferente, en este caso con la opción -f. Puertos, direcciones IP, http_access y ACL (Listas de control de acceso) Las opciones de configuración más importantes para Squid son las opciones http_port que usted elige. Usted puede monitorear todos los puertos que desee, adjuntando opcionalmente cada uno a una dirección de IP o nombre de host determinados. El puerto predeterminado para Squid es 3128, que permite que cualquier dirección de IP se conecte al servidor Squid. Para almacenar en caché sólo para una LAN, especifique la dirección de IP local, de la siguiente manera: Listado 11. Almacenamiento en caché de Squid sólo para una LAN # default (disabled) # http_port 3128 # LAN only http_port 192.168.2.2:3128 Usted también puede habilitar el almacenamiento en caché a través de otros servidores Squid utilizando icp_port yhtcp_port. Los protocolos IPC y HTCP se utilizan para que los caché se comuniquen entre sí en lugar de hacerlo mediante los servidores y clientes Web. Para almacenar en caché los multicasts, utilice mcast_groups. Para permitir que los clientes se conecten a su servidor Squid, tendrá que darles permiso para poder hacerlo. A diferencia de un servidor Web, el servidor Squid no es absolutamente generoso con sus recursos. En el caso simple, sólo podemos utilizar un par de patrones de subred/máscara de red o CIDR (Classless Internet Domain Routing) para controlar los permisos: Listado 12. Permisos de acceso simples de Squid http_access deny 10.0.1.0/255.255.255.0 http_access allow 10.0.0.0/8 icp_access allow 10.0.0.0/8 Usted puede utilizar la directiva acl para nombrar la listas de control de acceso (ACL). Puede nombrar las ACL tipo src que sencillamente especifican rangos de dirección como se ve en el Listado 12, pero también puede crear otros tipos de ACL. Por ejemplo: Listado 13. Permisos de acceso ajustados acl mynetwork src 192.168/16 acl asp urlpath_regex \.asp$ acl bad_ports port 70 873 acl javascript rep_mime_type -i ^application/x-javascript$ # what HTTP access to allow classes http_access deny asp # don't cache active server pages http_access deny bad_ports # don't cache gopher or rsync http_access deny javascript # don't cache javascript content http_access allow mynetwork # allow LAN everything not denied El Listado 13 muestra sólo un pequeño subconjunto de los tipos de ACL disponibles. Vea una muestra de squid.conf si desea ejemplos de muchos otros. O consulte la documentación sobre control de acceso (Capítulo 6) de la Guía del Usuario de Squid (diríjase a Recursos para ver el vínculo). 18 En el Listado 13, decidimos no no almacenar en caché las direcciones URL que terminan en .asp (el contenido es probablemente dinámico), no almacenar en caché los puertos 70 y 873 y no almacenar en caché los objetos JavaScript devueltos. Fuera de lo que se deniega, las máquinas de la LAN (el rango /16 dado) tendrán todos sus pedidos almacenados en caché. Observe que cada ACL definida tiene un nombre único pero arbitrario (utilice nombres que tengan sentido; Squid no reserva los nombres). Modalidades de almacenamiento en caché La manera más simple de ejecutar Squid es en el modo proxy. Si sigue este procedimiento, los clientes deberán configurarse explícitamente para utilizar el caché. Los clientes del navegador Web tienen pantallas de configuración que les permiten especificar un puerto y dirección proxy en lugar de una conexión http directa. Este sistema simplifica al máximo la configuración de Squid pero obliga a los clientes a realizar algún trabajo de configuración si desean beneficiarse con el caché de Squid. También podrá configurar a Squid para que sea ejecutado como un caché transparente. Para ello, deberá configurar el ruteo basado en políticas (fuera de Squid en sí, utilizando ipchains o ipfilter) o usar su servidor Squid como una puerta de enlace. Suponiendo que usted está en condiciones de dirigir los pedidos externos a través del servidor Squid, el servidor deberá configurarse de la siguiente manera. Es probable que necesite recompilar Squid con la opción --enable-ipftransparent; sin embargo, en la mayoría de las instalaciones Linux, no debería ser necesario. Para configurar el servidor para el almacenamiento en caché transparente (una vez que tiene los paquetes redireccionados), agregue algo similar al Listado 14 a su squid.conf: Listado 14. Configuración de Squid para el almacenamiento en caché transparente httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on Configuración DHCP Aspectos generales del protocolo Como muchos protocolos de red, el Protocolo de configuraciónn dinámica de host (DHCP) es una interfaz cliente/servidor. El cliente DHCP es un programa mucho más fácil, tanto en su estructura interna como en su configuración, que el servidor DHCP. Esencialmente, la función de un cliente DHCP es difundir un mensaje DHCPDISCOVER en su subred física local y luego esperar una respuesta. El mensaje DHCPDISCOVER PUEDE incluir opciones con sugerencias de valores para la dirección de red y la duración de la concesión. Los servidores que reciben un mensaje DHCPDISCOVER deberían responder a la dirección MAC solicitante con un mensaje DHCPOFFER. El cliente, a su vez, responde con un mensaje DHCPREQUEST a uno de los servidores oferentes, por lo general el primer (y único) servidor que responde. Los parámetros de configuración de un cliente son recibidos en un mensaje DHCPACK. En ese punto, el cliente ya ha recibido una dirección IP asignada, y sus comunicaciones pasarán, por decirlo de alguna manera, del nivel de enlace de datos (Ethernet) al nivel de red (IP). Proceso cliente Por lo general, un cliente DHCP se debe configurar únicamente con la información que se desea obtener. Por ejemplo, las distribuciones basadas en Debian suelen usar el cliente DHCP, dhclient, que se configura con el archivo /etc/dhcp3/dhclient.conf. El archivo de muestra incluido en el paquete del cliente dhcp3 tiene todas las opciones de configuración deshabilitadas con comentarios, excepto una. La única opción habilitada podría tener el siguiente aspecto: Listado 1. Opción de dhclient.conf request subnet-mask, broadcast-address, 19 time-offset, routers, domain-name, domain-name-servers, host-name, netbios-name-servers, netbios-scope; En este ejemplo, con la configuración predeterminada, el cliente básicamente dice: "pido todo lo que se pueda". En los mensajes de negociación, el mensaje DHCPACK del servidor contiene información de todos estos valores solicitados que el cliente usará una vez recibidos. La dirección IP del cliente está implícita en la lista ya que esa configuración siempre es objeto de negociación. Además de especificar las opciones de tiempo de espera y de tiempo de concesión (y algunas otras), el cliente puede (en la mayoría de los casos no está obligado a hacerlo) imponer ciertas restricciones a las direcciones IP que desea usar. Para excluir una dirección en particular, es posible usar reject 192.33.137.209;. Para especificar de manera expresa la dirección que desea utilizar el cliente, usefixed-address 192.5.5.213;. Es posible que el cliente rechace una oferta de concesión con el mensaje DHCPDECLINE; sin embargo, los servidores intentarán cumplir las solicitudes cuando fuera posible. Un servidor DHCP también puede realizar la asignación fija de una dirección IP específica a una dirección MAC; es más frecuente que la configuración de una dirección IP por máquina se lleve a cabo con la configuración del servidor que con la configuración del cliente. Para tener un registro de las concesiones adquiridas, dhclient mantiene una lista con las concesiones que se le asignaron en el archivo /var/lib/dhcp3/dhclient.leases (la ruta de acceso puede variar según la distro); así, una concesión DHCP vigente no se perderá si un sistema se desconecta de la red física o se reinicia. Proceso servidor El servidor DHCP necesita conocer un poco más sus opciones ya que proporciona diversa información a los clientes en las concesiones CDP; además, debe asegurarse de que las direcciones IP se asignen de manera única exclusiva a cada cliente. Por lo general, el servidor DHCP se ejecuta como daemon, dhcpd, y obtiene la información de su configuración de /etc/dhcpd.conf (la ruta de acceso puede variar según la distro). Es posible que un solo daemon dhcpd gestione múltiples subredes, generalmente cuando existen múltiples redes físicas que se conectan a un servidor; sin embargo, es más frecuente que un servidor gestione una subred. El listado 2 es un ejemplo bastante completo de la configuración de un servidor. Listado 2. Opciones de configuración de dhcpd.conf # default/max lease in seconds: day/week default-lease-time 86400; max-lease-time 604800; option subnet-mask 255.255.255.0; option broadcast-address 192.168.2.255; option routers 192.168.2.1; # DNS locally, fallback to outside local domain option domain-name-servers 192.168.2.1, 151.203.0.84; option domain-name "example.com"; # Set the subnet in which IP address are pooled subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.100 192.168.2.199; } # Assign a fixed IP to a couple machines by MAC address group { use-host-decl-names true; host first.example.com { hardware ethernet 00:00:c1:a2:de:10; fixed-address 192.168.2.200; } host second.example.com { hardware ethernet 00:dd:cc:a1:78:34; fixed-address 192.168.2.201; } Cuando un cliente envía un mensaje de difusión a un servidor que se ejecuta con esta configuración, este recibirá una concesión en 192.168.2.200 ó 192.168.2.201, si tiene la dirección MAC especificada, o recibirá una concesión en una dirección disponible dentro del grupo 192.168.2.100-192.168.2.199. El cliente también puede usar el mensaje DHCPINFORM para indicarle al servidor que ya tiene una dirección IP asignada (por configuración manual), pero que desea obtener otro tipo de información 20 de configuración. Tenga presente que informar a un servidor que un cliente está usando una dirección IP específica no es lo mismo que solicitar una dirección IP específica. En el último caso, el servidor puede conceder o no la solicitud dependiendo de las concesiones existentes. En el primer caso, el servidor no tiene voz en la decisión, y no se puede otorgar una concesión per se (sin embargo, los servidores intentarán evitar la asignación de direcciones IP que estén en uso a nuevos clientes solicitantes). Cuando expira la concesión, los clientes y los servidores deben negociar nuevas concesiones para que los parámetros de configuración sigan siendo válidos. Se pueden usar concesiones más cortas cuando haya grandes posibilidades de que cambie la información de configuración de un servidor (por ejemplo, DNS dinámico a través de una WAN externa). Un cliente puede extinguir una concesión enviando el mensaje DHCPRELEASE, pero esto no es suficiente para lograr un correcto funcionamiento (después de todo, los clientes a veces se bloquean, se reinician o se desconectan sin tener la oportunidad de enviar el mensaje). En ausencia de un mensaje de liberación, la concesión es mantenida por el servidor según los términos de duración en que se otorgó la concesión, por lo que una máquina reiniciada generalmente seguirá usando la concesión anterior (que se almacenará en dhclient.leases tanto en el servidor como en el cliente). Configuración NIS Cuándo usar NIS La mayoría de las utilidades asociadas con NIS siguen llevando el prefijo yp debido al nombre anterior del protocolo, "Sun Yellow Pages". Por cuestiones legales relativas a la marca, el servicio pasó a llamarse NIS. NIS permite que una red de máquinas comparta información como usuarios y grupos (el contenido de /etc/passwd y /etc/group, respectivamente), dando a los usuarios derechos en cualquier máquina dentro de un dominio NIS. NIS funciona de manera similar a DNS al definir dominios donde se distribuye información y permitir que los servidores maestros y esclavos distribuyan información jerárquicamente dentro de un dominio. De hecho, NIS se podría usar en lugar de DNS distribuyendo la información de nombres de dominio encontrada en /etc/hosts, aunque esto rara vez suceda en la práctica. NIS tiene cierta flexibilidad: en principio, cualquier tipo de información puede colocarse en una base de datos NIS (que está en formato DBM, pese a que la herramienta makedbm del paquete de servidor NIS convierte los archivos planos en este formato, generalmente "tras bambalinas "). También existe un servicio llamado NIS+ con el que se buscó reemplazar a NIS y que incluye el cifrado y la autenticación de datos; sin embargo, NIS+ no es compatible con versiones anteriores de NIS y su uso no es muy extendido. Antes de comenzar Para ejecutar cualquiera de las utilidades NIS, es necesario ejecutar el daemon /sbin/portmap, que convierte los números del programa RPC en números de puerto del protocolo TCP/IP (o UDP/IP), debido a que los clientes NIS hacen llamadas RPC. Si bien la mayoría de las distribuciones de Linux inician /sbin/portmap en sus scripts de inicio, se recomienda verificar si este daemon se está ejecutando con % ps -ax | grep portmap. Si no está en ejecución, instale /sbin/portmap e inclúyalo en los scripts de inicio de su sistema. Utilidades del cliente NIS (daemon ypbind) Un cliente NIS incluye las herramientas ypbind, ypwhich, ypcat, yppoll y ypmatch. El daemon ypbind se debe ejecutar como raíz y, por lo general, es iniciado como parte de los scripts de inicio del sistema (si bien esto no es obligatorio). Las otras herramientas están basadas en los servicios de ypbind, pero se ejecutan a nivel de usuario. La versión anterior de ypbind difundía una solicitud de enlace en la red local; sin embargo, esto permite que un servidor NIS malicioso responda la solicitud y proporcione a los clientes información de usuario y de grupo errónea. Es preferible configurar servidores específicos para que ypbind se conecte antes que usar el archivo /etc/yp.conf. Si se configuran múltiples servidores (o si se usa la difusión a pesar del peligro), ypbind puede cambiar los servidores enlazados cada 15 21 minutos según cuál de ellos puede responder más rápidamente. Estos servidores deberían estar organizados en una configuración maestro/esclavo, pero el cliente no tiene que conocer este dato ni preocuparse por él. Por ejemplo, la configuración ypbind puede tener el siguiente aspecto: Listado 3. /etc/yp.conf ypserver 192.168.2.1 ypserver 192.168.2.2 ypserver 192.168.1.100 ypserver 192.168.2.200 Antes que se ejecute /usr/sbin/ypbind, es necesario establecer el nombre de dominio NIS de la red, que puede ser cualquier nombre que se elija para el servidor NIS y que, por lo general, debería ser diferente del nombre de dominio DNS. Establezca el nombre de dominio NIS usando (incluya el nombre real): % ypdomainname my.nis.domain. Utilidades del cliente NIS (otra configuración) Si desea usar NIS como parte de la búsqueda del nombre de dominio, debe modificar /etc/host.conf de manera que incluya NIS en el orden de búsqueda; por ejemplo, buscar un nombre en primer lugar en /etc/hosts, luego en NIS y, por último, en DNS: Listado 4. Modificación del orden de búsqueda % cat /etc/host.conf order hosts,nis,bind Para habilitar usuarios distribuidos NIS, modifique el archivo /etc/passwd del cliente de manera que incluya +::::::. La información de base de datos NIS actúa como una plantilla para los intentos de inicio de sesión con este patrón "sin rellenar". Es posible ajustar la información de usuario si así lo desea; por ejemplo: Listado 5. /etc/passwd detallado +user1:::::::+user2:::::::+user3:::::::+@sysadmins:::::::-ftp+:*::::::/etc/NoShell De esta manera, solo se permite el acceso a user1, user2 y user3, así como a todos los miembros del netgroup sysadmin, pero se proporcionan los datos de cuenta de todos los otros usuarios de la base de datos NIS. Las fuentes NIS se configuran en /etc/nsswitch.conf. El nombre podría indicar que se hace referencia estricta a una búsqueda de servidor de nombres cuando, en realidad, se describen diversos tipos de información. Básicamente, esta configuración describe el orden en que se busca en las fuentes de información. El nombre nis significa información obtenida en un servidor NIS; el nombre files implica usar un archivo de configuración local apropiado. El nombre dns se usa para la opción hosts. Además, es posible especificar qué hacer si una fuente inicial no contiene la información deseada: return implica abandonar (y a menos que NIS no responda en absoluto, continue implica buscar el dato en la siguiente fuente). Por ejemplo: Listado 6. /etc/nsswitch.conf passwd: compat group: compat shadow: compat 22 hosts: dns [!UNAVAIL=return] files networks: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=continue] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files services: nis [NOTFOUND=return] files Utilidades de usuario del cliente NIS Las utilidades ypwhich, ypcat, yppoll y ypmatch se usan a nivel de usuario para consultar información sobre NIS: • ypwhich imprime el nombre de un servidor NIS. • ypcat imprime los valores de todas las claves de una base de datos NIS. • yppoll imprime la versión y el servidor maestro de un mapa NIS. • ypmatch imprime los valores de una o más claves de un mapa NIS. Consulte las páginas man correspondientes a la utilidad en cuestión para obtener más información acerca de su uso. Utilidades del servidor NIS (ypinit, ypserv) El servidor NIS usa el daemon ypserv para proporcionar bases de datos NIS a los clientes y se configura en el archivo /etc/ypserv.conf. Como se mencionó anteriormente, es posible ejecutar los servidores NIS maestro y esclavo dentro de un dominio. El conjunto de bases de datos NIS se inicializa en un servidor maestro usando (solo la primera vez que se ejecuta; luego use make -C /var/yp): % /usr/lib/yp/ypinit -m. Un servidor esclavo no es sino un cliente NIS que obtiene sus bases de datos del servidor maestro (y ejecuta ypserv). Para copiar la información del servidor maestro en el servidor esclavo que se ejecuta localmente, use % /usr/lib/yp/ypinit -s my.nist.domain. En el servidor maestro, las bases de datos NIS se generan a partir de información incluida en (algunos de) los siguientes archivos de configuración: • /etc/passwd, • /etc/group, • /etc/hosts, • /etc/networks, • /etc/services, • /etc/protocols, • /etc/netgroup, • /etc/rpc. Las bases de datos que se exportan son configuradas en /var/yp/Makefile, que también propaga los cambios al momento de su regeneración. Los servidores esclavos recibirán una notificación de cualquier cambio que se produzca en los mapas NIS al momento de su regeneración (a través del programa yppush) y automáticamente recuperarán los cambios necesarios para poder sincronizar sus bases de datos. Los clientes NIS no necesitan hacer esto ya que se comunican continuamente con el servidor NIS para leer la información almacenada en sus bases de datos DBM. Configuración LDAP Cuándo usar LDAP En principio, el Protocolo ligero de acceso a directorios es similar en cuanto a su objetivo a NIS. Ambos distribuyen cierta información estructurada desde el cliente hasta el servidor; sin embargo, LDAP va más allá estructurando de forma jerárquica qué información se distribuye entre qué clientes, redirigiendo solicitudes a otros servidores LDAP si fuera necesario e incorporando mecanismos de seguridad. Además, LDAP proporciona mecanismos y herramientas para que los clientes actualicen la información almacenada en los servidores LDAP y, a su vez, la distribuyan entre otros clientes que la soliciten (conforme a los permisos correspondientes). 23 Instalación Antes de ejecutar OpenLDAP, la implementación de software libre generalmente usada en Linux (si bien existen implementaciones comerciales), es necesario instalar varias bibliotecas necesarias (o verificar su existencia): • Es posible obtener los servicios de Seguridad del nivel de transporte (TLS) desde el proyecto OpenSSL Project (o a través de los mecanismos de instalación de su distribución de Linux). • Los servicios de autenticación Kerberos son opcionales, pero muy recomendables. Es posible usar MIT Kerberos oHeimdal Kerberos. • El nivel de seguridad y autenticación simple se puede instalar como parte de la distro básica, pero también se puede obtener desde Cyrus SASL. • Se recomienda usar Sleepycat Software Berkeley DB, aunque probablemente existan otras implementaciones DBM compatibles. • Es deseable, por no decir obligatorio, usar Posix threads y TCP wrappers. Una vez satisfechos estos requisitos previos, descargue la biblioteca OpenLDAP y realice el baile más o menos habitual: Listado 7. Danza de instalación de OpenLDAP habitual % ./configure % make depend % make % make test # make sure things went OK % su root -c 'make install' Después de la instalación básica, es necesario configurar la configuración slapd, que suele estar en /usr/local/etc/openldap/slapd.conf. La configuración debe incluir los componentes del dominio: Listado 8. Componentes de dominio a incluir en slapd.conf database bdb suffix "dc=eng,dc=uni,dc=edu,dc=eu" rootdn "cn=Manager,dc=eng,dc=uni,dc=edu,dc=eu" rootpw <secret> directory /usr/local/var/openldap-data Para encontrar un valor para <secret>, use la utilidad slappasswd con la siguiente cadena codificada en base64 cifrada para su "<secret>": Listado 9. Descubrimiento del "secreto" % slappasswd New password: ******* Re-enter new password: ******** {SSHA}YzPqL5Jio2+17NFIy/pAz8pqS5Ko13fH Para obtener más información acerca de los permisos, la replicación y otras opciones de slapd.conf, observe con atención las páginas man detalladas. La iniciación del daemon slapd es similar a la iniciación de cualquier otro daemon; para comprobar su funcionamiento, useldapsearch: Listado 10. Prueba de funcionamiento de slapd su root -c /usr/local/libexec/slapd ldapsearch -x -b '' -s base '(objectclass=*)' 24 namingContexts Si todo salió bien, debería aparecer un código similar al del listado 11: Listado 11. Respuesta de slapd en funcionamiento dn:namingContexts: dc=eng,dc=uni,dc=edu,dc=eu Agregado de datos con un archivo LDIF El formato de datos usado en LDAP es un formato binario; sin embargo, para exportar e importar datos en una base de datos LDAP, se usa una serialización ASCII llamada Formato de intercambio de datos LDAP (LDIF). En LDIF, los datos binarios se representan como codificación base64. OpenLDAP incluye herramientas para exportar datos desde los servidores LDAP a LDIF (ldapsearch), para importar datos desde LDIF a los servidores LDAP (ldapadd) y para aplicar un conjunto de cambios descriptos en LDIF a los servidores LDAP (ldapmodify y ldapdelete). Además, LDIF es uno de los formatos que se usan para importar y exportar datos de la libreta de direcciones de Mozilla Application Suite y otras herramientas de usuario de nivel de aplicación. Incluso Microsoft Windows 2000 Server y Windows Server 2003 incluyen una herramienta LDIF, LDIFDE, para transferir datos desde y hasta Active Directory (Directorio activo). Para agregar información manualmente a un servidor LDAP, primero es necesario crear un archivo LDIF: Listado 12. Creación del archivo LDIF de muestra, example.ldif dn: dc=example,dc=com objectclass: dcObject objectclass: organization o: Example Company dc: example dn: cn=Manager,dc=example,dc=com objectclass: organizationalRole cn: Manager Luego agréguelo usando% ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif. Por supuesto que el dominio example.com se debe reemplazar por un dominio adecuado para su sitio. Normalmente, las jerarquías y los nombres de dominio LDAP coinciden con aquellos usados por los nombres DNS familiares. Se le pedirá que ingrese el valor rootpw especificado en slapd.conf. Consulta de bases de datos LDAP Existe una herramienta, slurpd (Standalone LDAP Update Replication Daemon), que se utiliza para replicar una base de datos de información completa; sin embargo, para el caso de valores de datos individuales, se usa una herramienta como ldapsearch o bien (más probablemente) se incorpora la compatibilidad con LDAP en alguna aplicación que se ejecute. La herramientaslapcatsirve para volcar una base de datos LDAP en LDIF. Por ejemplo, muchos Mail User Agents (MUA) pueden usar LDAP para buscar información de dirección y de contacto. Dentro de algunas aplicaciones, incluso aquellas que se pueden programar usando lenguajes de scripting o de aplicación, es posible acceder a los recursos LDAP con URL LDAP, que toman la siguiente forma: ldap://host:port/dn?attributes?scope?filter?extensions. La mayoría de estos campos son opcionales. El nombre de host predeterminado es localhost; el puerto predeterminado es 389. El nombre distintivo raíz predeterminado es la cadena vacía. Si necesita información de autenticación, especifíquela en la porción extensions de la URL. 25 Además de las URL LDAP, muchos servidores y clientes LDAP son compatibles con las URL LDAPS, no estándar pero ampliamente usadas. Las URL LDAPS usan conexiones SSL en lugar de conexiones de texto simple y usan un puerto predeterminado 636: ldaps://host:port/dn?attributes?scope?filter?extensions. Recursos Aprender • Lea las especificaciones formales de DHCP (RFC 2131) para conocer este protocolo. • Lea "The Linux NIS(YP)/NYS/NIS+ HOWTO" para conocer NIS. • La especificación formal de LDAP es RFC 2251. • TCP/IP Network Administration, tercera edición , de Craig Hunt, (O'Reilly, abril de 2002) es un excelente recurso sobre las redes Linux. • Esta lista de más de 700 grupos de usuarios Linux de todo el mundo lo ayudará a encontrar grupos de estudio locales y remotos para los exámenes de LPI. • Si desea obtener información más detallada, el proyecto Linux Documentation Project tiene una gran variedad de documentos útiles, entre los que se destacan sus instructivos. • En la zona Linux de developerWorks encontrará más recursos para desarrolladores Linux. • Manténgase al día con los eventos técnicos y las transmisiones por Internet de developerWorks. Autor: David Mertz es Turing completo, pero probablemente no apruebe la Prueba de Turing. Para conocer más acerca de su vida, consulte su página Web personal. David escribe las columnas developerWorks Charming Python y XML Matters desde el año 2000. Consulte su libroText Processing in Python [Procesamiento de texto en Python]. Compilación y edición: Ing. Sergio Aguilera. Facultad de Tecnología Informática. Universidad de Belgrano. sergio.aguilera@ub.edu.ar Todos los Derechos Reservados a IBM Corp. – Marzo 2012. 26 27