jueves, 7 de febrero de 2008

Mis pequeños problemillas

El universo paralelo de linux
Introducción Dos tipos de servicios:
1. Servicios de Internet:
Servicios de ejecución remota: telnet, ssh
Servicios de transferencia de ficheros: ftp, sftp
Servicio de DNSServicio de Proxy
Servicio de correo electrónico: SMTP, POP, . . .
Servicio Web
2. Servicios de intranet:
Sistemas de archivos de red (NFS),Servicio de información de red (NIS),Servicio de directorio (LDAP),Compartición Windows/Linux (Samba )
Ejecución remota y transferencia de ficheros.
Permiten acceder a un sistema remoto y transferir cheros de/hacia este sistema. Aplicaciones clásicas1. telnet (TELetype NETwork) permite conectarnos a otros ordenadoresde la red como terminal remoto2. ftp (File Transfer Protocol permite intercambiar cheros entre distintos ordenadores de la red Problema: la información se transere en claro El uso de telnety ftp se desaconseja Reemplazarlos por ssh, scp, sftp1.
ssh (Secure Shell ) permite conectarnos a otro sistema encriptandotoda la información2. scp, sftp permiten la transferencia de cheros de forma encriptada scp similar a cp y sftp similar a ftp
2.1. Servicio de telnet y ftp Los servicios TCP (telnet, ftp, talk, nger, etc.) son normalmente lanzados por el superdemonio de red inetd (o xinetd) El chero de conguración es el /etc/inetd.conf Ejemplo de línea telnet
stream tcp nowait telnetd /usr/sbin/in.telnetd cuando inetd reciba una petición al puerto telnet abre un sockettipo stream y ejecutar fork() y exec() del programa /usr/sbin/in.telnetd,bajo la identidad del usuario telnetd nowait indica que el servidor puede continuar procesando conexiones en el socket.
Versión mejorada de inetd: xinetd
3Para mayor control usar TCP Wrapper (programa tcpd) Permite conceder/denegar acceso a determinados hosts/redes mediantelos chero /etc/hosts.allow y /etc/hosts.deny
Servicio de telnet Instalación de un servidor telnet Descargar el paquete telnetd El paquete actualiza el /etc/inetd.conf,Por defecto usa TCP wrappers,El servidor escucha el puerto 23 Desinstalar el servicio telnet Desinstalar el paquete telnetd, o Comentar la línea correspondiente en /etc/inetd.conf
Servicio de FTP Transfiere ficheros a/desde un host remoto Permite usuarios registrados o anónimos (anonymous)Utiliza dos puertos: 21 (conexión de control) y 20 (conexión de datos)
Dos modos de funcionamiento: 1. Activo (modo por defecto en el comando ftp) El servidor inicia la conexión de datos desde su puerto 20 aun puerto > 1023 del cliente Problema con los firerewalls en el cliente
2. Pasivo (modo recomendable, por defecto en navegadores) El cliente inicia las conexiones de control y datos No se utiliza el puerto 20 No tiene problema con los firewall
4Instalación de un servidor ftp básico1. Instalar el paquete ftpd El paquete actualiza el /etc/inetd.conf. Por defecto usa TCP wrappers Podemos denegar el acceso ftp a ciertos usuarios incluyéndolos en el fichero /etc/ftpusers.
Servicio de FTP avanzadoServidores avanzados de FTP Proporcionan numerosas facilidades, tanto para ftp normal cono anónimo.Existen numerosos servidores comerciales u open source: Wu-FTPD,Pure-FTPd, ProFTPD, wzdftpd, vsftpd.Estos servidores proporcionan normalmente: Operación a través de inetd o standalone, Servidores FTP virtuales (varios servidores de FTP anónimos enel mismo host) Usuarios FTP virtuales (cuentas ftp diferentes de las cuentas delsistema) Facilidades para registro y monitorización de accesos Facilidades para controlar y limitar accesos Comunicación encriptada
SSHSSH: Shell seguroPermite comunicarnos de forma segura con un servidor remoto Permite abrir sesiones o transferir cheros (scp o sftp) Reemplazo de rlogin, telnet o ftp Todos los datos viajan encriptados Dos versiones SSH-1 y SSH-2: Recomendable SSH-2 Versión open-source OpenSSHPaquetes Debian: Ciente: openssh-client Servidor: openssh-serverModos de autenticación mediante SSHSSH soporta 4 modos de autenticación:
1. Si el nombre del host remoto desde el cual un usuario se conecta al servidor esta listado en ~/.rhosts, ~/.shosts, /etc/hosts.equiv o/etc/shosts.equiv el usuario remoto puede entrar sin contraseñaMétodo absolutamente desaconsejado
2. Igual que el anterior pero la clave pública del host remoto debe apareceren /etc/ssh_known_hosts o ~/.ssh/known_hosts6No demasiado seguro (si el host remoto se ve comprometido, elservidor local queda comprometido)
3. La clave pública del usuario remoto debe estar en ~/.ssh/authorized_keysEl usuario remoto debe tener acceso a su clave privadaMétodo más seguro, pero un poco incomodo
4. Acceso mediante contraseña (modo por defecto)Menos seguro que el anterior
Opciones para autenticación
Fichero de conguración del servidor ssh: /etc/ssh/sshd_config
Opción M Dfto. Signicado
RhostsRSAAuthentication 2 no Sí yes permite autenticación por host(SSH-1)HostbasedAuthentication 2 no Sí yes permite autenticación por host(SSH-2)IgnoreRhosts 2 yes No usa los ficheros~/.rhostsy ~/.shost
IgnoreUserKnownHosts 2 no Ignora el chero ~/.ssh/known_hosts
RSAAuthentication 3 yes Autenticación de clave pública deusuario (SSH-1)PubkeyAuthentication 3 yes Autenticación de clave pública deusuario (SSH-2)PasswordAuthentication 4 yes Autenticación mediante contraseña UsePAM 2,3,4 no Usa PAM para autenticación
Otras opciones de conguración del servidor en /etc/ssh/sshd_config
Opción Dfto. Signicado
Port 22 Puerto (puede ser interesante cambiarlo a>1024)Protocol 2,1 Protocolo aceptado (más seguro sólo 2)ListenAddress Todas Dirección local por la que escucha PermitRootLogin yes Permite acceder al root
X11Forwarding no Permite forwarding X11 Para más opciones man sshd_config
Opciones para el cliente Fichero de conguración del cliente ssh: /etc/ssh/ssh_config o ~/.ssh/configEn este chero se especican opciones para los comandos ssh, scp o sftp.Algunas de estas opciones se pueden especicar en el momento de ejecutar el comando, p.e.
$ ssh -p port servidor # Indica otro puerto
Algunas opciones:
Opción Dfto. Signicado
Hosts Host para los que se aplican las opciones (*implica todos)Port 22 Puerto por defecto Protocol 2,1 Protocolo usado por defecto
Cipher[s] Mecanismos de cifrado usados
ForwardX11 no Reenvío X11
Para más opciones man ssh_config y man ssh.Otros comandos ssh-keygen generación y gestión de claves públicas/privadas para SSH. Permite claves RSA o DSA (DSA sólo SSH-2, por defecto RSA-2)
Ficheros (para SSH-2) Clave privada: ~/.ssh/id_rsa o ~/.ssh/id_dsa (~/.ssh/identitypara SSH-1)
Clave pública: ~/.ssh/id_rsa.pub o ~/.ssh/id_dsa.pub (~/.ssh/identity.pubpara SSH-1)
 La clave privada debe tener una passphrase de longitud arbitraria Puede cambiarse con la opción -p
ssh-agent Agente de autenticación Mantiene en memoria la clave privada Evita tener que escribir la passphrase cada vez que usemos ssh Habitualmente, si entramos en X11 se activa automáticamente Opción use-ssh-agent de /etc/X11/Xsession.options (verman xsession.options) Para activarlo en consola usar (como usuario)eval $(ssh-agent) Define las variables SSH_AUTH_SOCK y SSH_AGENT_PID
ssh-add Añade las claves privadas al agente Uso:ssh-add [opciones ] [-t life ] [fichero ]
Por defecto añade los ficheros ~/.ssh/id_rsa, ~/.ssh/id_dsa y~/.ssh/identity, pidiendo las correspondientes passphrases. Pueden añadirse múltiples claves. En una conexión se prueban las diferentes claves hasta que coincide Algunas opciones: -l Muestra las identidades añadidas -t life Especifica un tiempo de vida de la identidad.
Servicio de tiempoNTP (Network Time Protocol ): protocolo para sincronizar los relojes de lossistemas en redes con latencia variablePermiten tener los sistemas sincronizados con elevada precisiónImportante para diversas aplicaciones (p.e. NFS) y para gestión de logsVersión actual NTPv4; en desarrollo NTPv5Utiliza transporte UDP, puerto 123 Para más información: http://ntp.isc.org3.1. Funcionamiento básico Usa un sistema jerárquico (stratum levels )
Stratum 0: relojes de alta precisión (atómicos)
Stratum 1: ordenadores conectados directamente a los relojes Stratum0, p.e. vía conexión RS-232)
Stratum 2: envían solicitudes NTP a los sistemas Stratum 1 a travésde Internet; pueden comunicarse con varios Stratum 1 y también entreellos
Stratum 3 o superior: se sincronizan usando los de Stratum inferior
3.2. Aplicaciones NTP en LinuxDos aplicaciones básicas:1. ntpdate: obtiene la hora de un servidor NTPNormalmente se usa en el arranque del sistemaPuede meterse en un cron para obtener sincronización, pero no obtiene una precisión elevadaEjemplo:# ntpdate pool.ntp.org2. ntpd (demonio NTP): mantiene sincronizado el sistema con los servidoresNTP, y proporciona servicio NTP Elevada precisión y bajo consumo de recursos Necesita que el error en el reloj sea pequeño (sincronización en el arranque o con ntpdate)Fichero de configuración: /etc/ntp.conf3. ntpq: monitoriza el demonio ntpd.
Sistemas de archivos de red (NFS)NFS (Network File System) permite compartir sistemas de cheros en la red.Introducido por Sun MicroSystems en 1985, y soportado por todos los UnicesVersiones principales: NFSv2 y NFSv3 NFSv4 en desarrollo (incluido en kernel 2.6,ver www.citi.umich.edu/projects/nfsv4/)NFSv2 y 3: protocolo sin estado: no hay pérdida de información si e lservidor cae NFSv4 incorpora estado: mecanismo complejo de recuperación de caídas.Comunicación mediante TCP o UDP normalmente UDP (NFSv4 usa TCP)
Dos tipos de servidores en Linux: servidor en espacio de usuario: más lento y con problemas servidor en modo kernel: más rápido, menos características (versión por defecto)Para más información:capítulo 17 (The Network File System) del libro UNIX System AdministrationHandbook (3a ed.), Evi Nemeth et.al.Linux NFS-HOWTOnfs.sourceforge.net124.1.
Características principales Ejemplo de funcionamiento Procesos implicados NFS se basa en RPC (Remote Procedure Call )el servicio portmap (también llamado rpcbind ) debe estar disponible y activo convierte números de programas RPC en números de puertos utiliza el puerto 111 necesario para aplicaciones que usen RPC el comando rpcinfo nos muestra información RPC en Debian, paquete portmap.Otros demonios necesarios:
rpc.nfsd: implementa la parte de usuario del servidor NFS (atendery resolver las peticiones de acceso del cliente a archivos situados en eldirectorio remoto)
rpc.mountd: proceso que recibe la petición de montaje desde un clienteNFS y chequea para mirar si coincide con un sistema de ficheros actualmente exportado, y si el cliente tiene permisos sucientes paramontar dicho directorio
rpc.rquotad: proporciona información de cuotas a usuarios remotos
rpc.statd: implementa el protocolo NSM (Network Status Monitor );proporciona un servicio de noticación de reinicio, cuando NFS cae; lousa el servicio de bloqueo de cheros lockd
rpc.lockd: servicio de bloqueo de cheros (NFS lock manager, NLM);no necesario en kernels modernos (>= 2.4) en los que el boqueo esrealizado por el kernel
NFSv4 no usa portmap, ni los demonios rpc.mountd y rpc.statd Usa autenticación basada en Kerberos mediante los siguientes servicios: rpcsec_gss (cliente rpc.gssd, servidor rpc.svcgssd): autenticación de la conexión cliente-servidor rpc.idmapd: mapeo entre UIDs (o GIDs) y nombres de usuario (onombres de grupos)
4.2. Instalación de NFS en DebianAntes de utilizar NFS, ya sea como servidor o como cliente, el kernel debe tener compilado el soporte NFS podemos comprobarlo consultando los tipos de filesystems soportadospor el sistema de cheros virtual (VFS) en /proc/filesystems# cat /proc/filesystems ext2 nodev proc nodev devpts nodev nfs
Si no está tendríamos que recompilar el kernel activando el soporte NFS.Veremos como instalar un servidor y con cliente NFS en DebianServidor NFS1. Instalar el paquete nfs-kernel-server y nfs-commonnfs-kernel-server proporciona rpc.nfsd, rpc.mountd, y paraNFSv4 rpc.svcgssdnfs-common proporciona rpc.lockd, rpc.statd, y para NFSv4rpc.gssd y rpc.idmapd
2. Congurar los directorios a exportar: chero /etc/exports
Ejemplo de chero /etc/exports/projects (ro) proj*.usc.es(rw)/home 193.144.84.0/24(rw,root_squash,sync)/pub (ro,all_squash)exporta /projects de sólo lectura para todo el mundo y lectura/escritura para los sistemas proj*.usc.esAlgunas opciones de la exportación:
rw/ro exporta el directorio en modo lectura/escritura o sólolectura
root_squash mapea los requerimientos del UID/GID 0 alusuario anónimo (por defecto usuario nobody, con UID/GID65534); es la opción por defecto
no_root_squash no mapea root al usuario anónimo
all_squash mapea todos los usuarios al usuario anónimo
squash_uids/squash_gids especica una lista de UIDs oGIDs que se deberían trasladar al usuario anónimo squash_uids=0-15,20,25-50
anonuid/anongid fija el UID/GID del usuario anónimo (pordefecto 65534) subtree_check/no_subtree_check si se exporta un subdirectorio(no un lesystem completo) el servidor comprueba que el chero solicitado esté en el árbol de directorios exportado
sync modo síncrono: requiere que todas las escrituras se completenantes de continuar; es opción por defecto
async modo asíncrono: no requiere que todas las escrituras se ompleten; más rápido, pero puede provocar pérdida de datos n una caída
secure los requerimientos deben provenir de un puerto pordebajo de 1024
insecure los requerimientos pueden provenir de cualquier puertoPara más opciones man exports Cada vez que se modica este chero se debe ejecutar el comando exportfs para actualizar el servidor# exportfs -ra ver man exportfs para opciones del comando
3. Iniciar el demonio:# /etc/init.d/nfs-kernel-server start
4. Comprobar los directorios exportados con showmount# showmount --exports localhost
showmount muestra información de un servidor NFS: directorios que exporta, directorios montados por algún cliente y clientes que montan los directorios
5. Podemos ver las estadísticas del servidor NFS con nfsstat Cliente NFS El cliente NFS en Linux está integrado en el nivel del Sistema de FicherosVirtual (VFS) del kernel no necesita un demonio particular de gestión (en otros UNIX, demonio biod)
Instalación:1. Instalar (si no está ya instalado) el paquete nfs-common2. Montar los directorios remotos con mount -t nfs o añadir una entradaen fstab (ver Tema 4: Montado de los sistemas de ficheros)Ejemplo de uso con mount:# mount -t nfs 193.144.84.0:/home /mnt/homeEjemplo de entrada en fstab193.144.84.0:/home /mnt/home nfs rw 0 0Automount se usa frecuentemente con NFS (ver la parte de Autofsen Tema 4: Montado de los sistemas de ficheros)Opciones particulares de montado con NFS:rsize=n /wsize=n especican el tamaño del datagrama utilizado porlos clientes NFS cuando realizan peticiones de lectura/escritura (pueden ajustarse para optimizar)
hard el programa accediendo al sistema de ficheros remoto se colgará cuando el servidor falle; cuando el servidor esté disponible, el programa continuará como si nada (opción más recomendable)
soft cuando una petición no tiene respuesta del servidor en un tiempo fijado por timeo=t el cliente devuelve un código de error al procesoque realizó la petición (puede dar problemas)Para ver más opciones, ver nfs(5)
4.3. Consideraciones de seguridad en NFSNFS no fue diseñado pensando en la seguridad:Los datos se transmiten en claro Usa el UID/GID del usuario en el cliente para gestionar los permisosen el servidor: El usuario con UID n en el cliente obtiene permisos de acceso alos recursos del usuario con UID n en el servidor (aunque sean usuarios distintos) Un usuario con acceso a root en un cliente podría acceder a loscheros de cualquier usuario en el servidor (no a los de root, si se usa la opción root_squash)Precauciones básicas:
1. Usar NFS sólo en Intranets seguras, donde los usuarios no tengan accesode administrador en sus sistemas
2. Evitar el acceso a NFS desde fuera de la IntranetBloquear los puertos TCP/UDP 111 (portmap) y 2049 (nfs)
3. Usar NFSv4 con RPCSEC_GSS, que incluye autenticación
4. Usar versiones seguras de NFS (Secure NFS) o otros sistemas de ficheros(Self-certifying File System, SFS)Ver NFS howto y UNIX Security Checklist
5. Compartición de la configuración Necesidad de mantener una conguración única a través de múltiples sistemas Compartición de los cheros de conguración Ficheros a compartir: /etc/passwd, /etc/shadow, /etc/group, etc.
Mecanismos de compartición: Copia de cheros de un servidor central al resto de los equipos mediante rdist o rsync Utilización de un servidor de dominio, que centralice esa información
NIS: Network Information Service LDAP: Lightweight Directory Access Protocol
5.1. Concepto de dominio Dominio conjunto de equipos interconectados que comparten informaciónadministrativa (usuarios, grupos, contraseñas, etc.) centralizada Necesidad de uno (o varios) servidores que almacenen físicamente dicha información y que la comunique al resto cuando sea necesario Normalmente se usa un esquema cliente/servidor p.e. un usuario se conecta en un sistema cliente y este valida las credenciales del usuario en el servidor En Windows 2000, la implementación del concepto de dominio se realiza mediante el denominado Directorio Activo (Active directory ) Basado en LDAP y DNSEn UNIX, el servicio clásico de gestión de dominios es NIS. NIS se considera bastante obsoleto Existen implementaciones libre del protocolo LDAP para Unix (openLDAP) más potente y escalable que NIS para la implementación de dominios6. Servicio de Información de Red NIS Desarrollado por Sun Microsystem en los años 80Nombre original Yellow Pages (modicado por razones legales)Muy popular como sistema de administración de dominios en UNIXA principios de los años 90, versión NIS+ para Solaris 2.x muy diferente de NIS incorpora soporte para encriptación y autenticación de datos complejo y poco soportadoPara más información: The Linux NIS(YP)/NYS/NIS+ HOWTO Debian NIS HOWTO Introducción a NIS y NFS19
6.1. Funcionamiento básico de NISBase de datos distribuida Un servidor (master) mantiene los cheros de conguración de los sistemas(/etc/passwd, /etc/group, etc.) cada archivo de conguración se convierte en una o más tablas(mapas NIS) de una base de datos esos mapas se guardan en un formato binario llamado DBM (DataBaseManagement) el servidor NIS maestro debería tener ambas, las tablas ASCII ylas DBM en una red debe haber al menos una máquina actuando como unservidor NIS maestroLos clientes hablan directamente con el servidor NIS para leer la información almacenada en sus bases de datos DBMPueden existir servidores NIS esclavos: tienen copias de las bases de datos NIS reciben estas copias del servidor NIS maestro cada vez que serealizan cambios a las bases de datos maestrasUn servidor maestro y sus servidores esclavos y clientes constituyen undominio NIS una red puede tener múltiples servidores NIS, cada uno sirviendoa un dominio NIS diferente Esquema de un dominio NIS20
6.2. Comandos básicos de NIS NIS incluye un conjunto amplio de comandos y demonios, algunos de losc uales son:
ypserv demonio de servidor
ypbind demonio de cliente
domainname establece el nombre del dominio
ypinit congura un servidor como maestro o esclavo
ypxfr descarga un mapa desde servidor maestro (en los esclavos)
yppush ejecutado en el maestro, hace que los esclavos actualicen sus mapas
ypwhich muestra el sombre del servidor NISypcat muestra las entradas de un mapa
yppasswd cambia la contraseña en la base de datos de NISypchfn cambia el campo GECOS en la base de datos de NISypchsh cambia el login shell en la base de datos de NIS21
6.3. Instalación de NIS en Debian El proceso de puesta en marcha de NIS depende de la distribución veremos como instalar un servidor maestro y un cliente en DebianServidor maestro1. Instalar el paquete nis a) Indicar un nombre de dominio NIS (que no tiene que corresponder con el dominio de RED)El nombre de dominio puede cambiarse con domainname
b) La conguración puede tardar, ya que intenta iniciarse como clienteNIS y se queda buscando un servidor
2. Cambiar el chero /etc/default/nisdebemos poner NISSERVER=master
3. En el chero /etc/ypserv.securenets añadir el número de la red local, para permitir acceso exclusivo a los sistemas de esa red 255.255.255.0 192.168.0.0
4. Ejecutar /usr/sbin/ypserv para iniciar el servidor
5. Editar (si es necesario) el chero /var/yp/Makefilepermite congurar características generales así como las tablas apartir de las cuales se crean los mapas NIShaciendo make en ese directorio se crean los mapas que se guardanen /var/yp/dominiocada vez que se modique alguna tabla (p.e. añadiendo un nuevousuario), debemos hacer make para actualizar los mapas NIS
6. Ejecutar /usr/lib/yp/ypinit -m para que el sistema se congure comoservidor maestrono añadir ningún servidor NIS más (Ctrl-D)
7. Podemos comprobar que funciona bien haciendo un ypcat de algunode los mapas (p.e. ypcat passwd)
8. Por último, el servidor debe configurarse también como cliente seguir los pasos de la siguiente sección
Cliente NIS1. Eliminar de los cheros locales los usuarios, grupos y otra informaciónque queramos que sea accesible por NIS (sólo en los clientes)2. Instalar el paquete nis e indicar el nombre del dominio NIS3. Si se desea, cambiar /etc/yp.conf para especicar el servidor NIS concretopor defecto, busca el servidor mediante un broadcast4. Modicar el archivo /etc/nsswitch.conf para que busque passwd,group y shadow por NIS:
passwd: files nis group: files nis shadow: files nis
El formato y opciones de ese chero lo vimos en el Tema 5: Ficherosde conguración de redAlternativamente, se puede dejar el modo compat añadiendo alnal de los cheros passwd, shadow y group del cliente un +, paraindicar que vamos a usar NISeste método permite incluir/excluir determinados usuariosver NIS-HOWTO: Setting up a NIS Client using Traditional NIS6.4. Fichero /etc/netgroup
NIS introduce el concepto de netgroupsg rupos de usuarios, máquinas y redes que pueden ser referenciadas como un conjuntose definen en el fichero /etc/netgroup, en principio, sólo en el servidor NIS maestro Formato de una entrada en netgroup
netgroup_name (host, user, NIS_domain), ...host nombre de una máquina en el grupouser nombre de login de un usuario de la máquina host23NIS_domain dominio NIS nombre del dominio NIS Pueden dejarse entradas en blanco o con un guión:Una entrada en blanco implica cualquier valor, p.e. (doc19, , ) indica todos los usuarios del host doc
Una entrada con un guión (-) implica campo sin valor, p.e. (-, pepe, ) indica el usuario pepe y nada más Ejemplo de un fichero /etc/netgroupsysadmins (-,pepe,) (-,heidis,) (-,jnguyen,) (-,mpham,)servers (numark,-,) (vestax,-,)clients (denon,-,) (technics,-,) (mtx,-,)research (-,boson,) (-,jyom,) (-,weals,) (-,jaffe,)allusers sysadmins researchallhosts servers clients
Estos netgroups pueden usarse en varios cheros del sistema para denirpermisos:con NIS en modo compat, p.e. añadiendo +@sysadminds en /etc/passwd daríamos permiso de acceso a los usuarios denidos como sysadminsen el chero /etc/exports, para indicar grupos de máquinas a las que exportar un directorio por NFS/home allhosts(rw,root_squash,sync)en los cheros /etc/hosts.allow y /etc/hosts.deny de los TCPWrappersetc.
7. Servicio de directorio: LDAPLDAP: Protocolo Ligero de Acceso a Directorios (Lightweight Directory AccessProtocol )Protocolo de red para consulta y modificación de datos de directorios X.50024 X.500: Estándares de la ITU-T para servicios de directorio Define, entre otros, un protocolo de acceso a directorios llamado DAP (Directory Access Protocol ) DAP definido sobre la pila completa de niveles OSI: costoso ycomplejo LDAP es una alternativa ligera al protocolo DAP Opera directamente sobre TCP/IP Actualmente, la mayoría de servidores de directorio X.500 incorporanLDAP como uno de sus protocolo de acceso
Diferentes implementaciones del protocolo LDAP Microsoft Server 2003 Active Directory, Novell eDirectory, Sun Java System Directory Server, IBM Tivoli Directory Server, Apache Directory Server, Fedora Directory Server, Red Hat Directory Server, OpenLDAPMás información sobre LDAP1. LDAP Linux HOWTO2. IBM RedBooks: Understanding LDAP - Design and Implementation3. Recursos, ayudas, . . . : ldapman.org7.1. OpenLDAPImplementación open source del protocolo LDAPBasado en software desarrollado en la Universidad de MichiganIncluye cuatro componentes principales
slapd - demonio LDAP stand-alone (servidor)
slurpd - demonio de replicación y actualización de LDAP
librerías que implementan el protocolo LDAP
utilidades, herramientas, y clientes básicos
Más información sobre la conguración de OpenLDAP:1. OpenLDAP Administrator's Guide2. Integración de redes con OpenLDAP, Samba, CUPS y PyKota
7.2. Modelo de datos de LDAPUn directorio es una base de dato optimizada para lectura, navegación y búsqueda la información se almacena de manera jerárquica generalmente no se soportan transacciones complejas ni sistemas de recuperación las actualizaciones son cambios simples proporcionan respuestas rápidas a grandes volúmenes de búsquedasel directorio puede estar replicado y/o distribuido entre varios sistemas(p.e. DNS)LDAP organiza el directorio como una estructura jerárquica de entradas(nodos) en forma de árbol Cada entrada posee un conjunto de atributos, que pueden ser de diferentes tipos cada atributo se identica por su tipo y uno o más valores, los tipos son normalmente palabras nemotécnicas, como uid (identicador de usuario), cn (common name), c (country), dc (domaincomponent), etc. los diferentes atributos de un nodo están determinados por la clase a la que pertenece las clases permiten denir entradas con diferente información: clases para personas, para equipos, administrativas, etc. las clases se denen mediante cheros de esquema (schema).Cada nodo debe poseer un nombre único: nombre distinguido o dn(distinguished name) el dn identica de forma unívoca cada objeto en la base de datos Ejemplo: árbol de usuarios y grupos en LDAP, basado en nombres de dominios de Internet:cada nodo puede tener varios atributos, p.e. el nodo pepe podría tenerlos siguientes atributos:dn: cn=Jose Pena,ou=People,dc=midominio,dc=comobjectClass: accountuid: pepesn: Penadescription: alumnomail: pepe@midominio.com el formato en el que se muestran los atributos del objeto se denomina LDIF (LDAP Data Interchange Format ) formato de intercambio de datos para importar y exportar datosa un servidor LDAP
7.3. Instalación de un servidor LDAPDescribiremos como montar un servidor LDAP simple que nos permita lagestión de usuarios y gruposel servidor mantendrá la lista de usuarios y grupos del dominioen los clientes la autenticación de usuarios y los permisos se basará en el servidor LDAPPasos para la instalación del servidor en Debian
1. Instalar los siguientes paquetes:
a) slapd: servidor OpenLDAP
b) ldap-utils: utilidades del paquete OpenLDAPincluye comandos como ldapsearch, ldapadd
El comando slapcat permite ver la estructura creada Podemos hacer búsquedas sencillas con ldapsearch# ldapsearch -x -b dc=midominio,dc=com (cn=admin)
2. Ficheros de conguración:a) Fichero /etc/ldap/ldap.conf Fichero de conguración global para los clientes LDAP Permite especicar la base por defecto, el servidor LDAP, etc.(cambiarlo para poner nuestra conguración, comprobar quetiene permisos 644)Para más info, ver man ldap.confb) Fichero /etc/ldap/sldap.conf Fichero de conguración del demonio slapd En principio, no es necesario cambiarlo (comprobar que tienepermisos 600)
3. Crear la estructura de la base de datos: crearemos los nodos de Peopley Group del árbol LDAPa) Crear el siguiente chero estructura.ldif en formato LDIF:28dn: ou=People,dc=midominio,dc=comobjectClass: topobjectClass: organizationalUnitou: Peopledn: ou=Group,dc=midominio,dc=comobjectClass: topobjectClass: organizationalUnitou: Groupb) Añadir los nodos a la base de datos:# ldapadd -x -D 'cn=admin,dc=midominio,dc=com' -W -f estructura.ldif-x autenticación simple sin SASL (Simple Authentication andSecurity Layer )-D nombre distinguido con el que nos conectamos a LDAP(ponemos el del administrador)-W pide la contraseña de forma interaciva-f ichero a cargar
4. Añadir un usuario y un grupo a la base de datos
a) Crear un chero como este, que tiene la información para un usuarioy un grupo (½no useis acentos!):dn: cn=Jose Pena,ou=People,dc=midominio,dc=comobjectClass: topobjectClass: accountobjectClass: posixAccountobjectClass: shadowAccountuid: pepecn: Jose PenauidNumber: 2000gidNumber: 2000homeDirectory: /home/pepeloginShell: /bin/bashgecos: Jose Pena, Despacho 22,,dn: cn=pepe,ou=Group,dc=midominio,dc=comobjectClass: top29objectClass: posixGroupcn: pepegidNumber: 2000
dene un usuario pepe y un grupo pepe con información similar a la aparece en el fichero /etc/passwd
puede añadirse más información, como la que aparece en el -chero /etc/shadow: campos shadowMax, shadowExpire, shadowWarning,etc.
b) Añadir el chero con:# ldapadd -x -D 'cn=admin,dc=midominio,dc=com' -W-f user-group.ldif
c) Probarlo haciendo búsquedas, tipo:# ldapsearch -x uid=pepe
d) Añadir una contraseña al usuario: puede hacerse directamente metiendoun campo user Password en el chero anterior, pero es preferiblehacerlo mediante el comando ldappasswd
# ldappasswd -x 'cn=Jose Pena,ou=People,dc=midominio,dc=com'
cn=admin,dc=midominio,dc=com -W -S
5. Si queremos migrar la información de los cheros /etc o NIS a LDA Ppodemos usar el paquete MigrationTools (ver www.padl.com/OSS/MigrationTools.html)
6. Por último, también podemos querer instalar el servidor como cliente,por lo que debemos seguir los pasos indicados en la sección de instalación de un cliente
Fichero de conguración slapd.conf
Fichero de conguración del demonio slapd
Tiene dos partes:1. Directivas globales: distintos tipos de opciones del servidor, entre ellas los esquemas que el directorio debe conocer:
nis.schema define los atributos de objetos para las cuentas de usuario, grupos, etc.
se basa en los esquemas básicos core.schema y cosine.schema
inetorgperson.schema añade objetos con más información personalpara los usuarios
2. Directivas especícas para las distintas bases de datos Incluye el sufijo, directorio donde guardar la base, y el tipo de database a usar (por defecto bdb, Berkeley Database)También un conjunto de reglas de acceso de la forma:access to [by ]+ es una expresión que especica a qué datos del directoriose aplica la regla. Tres opciones:
a) puede indicarse todo el directorio mediante un asterisco (*)
b) un subconjunto de entradas cuyo nombre distinguido contieneun cierto sufijo (por ejemplo, dn=".*,dc=midominio,dc=com")c) un atributo concreto de dichos objetos (por ejemplo, dn=".*,ou=People,dc=midominio, indica a quién (a qué usuario(s)) se especica la regla; puede tomar diferentes valores, siendo los más comunes los siguientes:
 self el propietario de la entrada
dn="..." el usuario representado por el nombre distinguido
users cualquier usuario acreditado
anonymous cualquier usuarios no acreditado
* cualquier usuario indica qué operación concede la regla:
none sin acceso auth utilizar la entrada para validarse compare comparar search búsqueda read lectura write modificaciónPor ejemplo, la regla por defecto para userPassword permite quelos usuarios puedan autenticarse y cambiar sus propias contraseñasy el administrador las de todos
7.4. Instalación de un cliente LDAP Describiremos como como congurar un cliente para que acceda a la información almacenada en el directorio de LDAP del servidor
Dos pasos:
1. Congurar el Name Service Switch (chero /etc/nsswitch.conf)
2. Configurar el módulo de autenticación (PAM, Pluggable AuthenticationModules )
Los módulos necesarios para esta configuración pueden descargarse dela página de PADL (www.padl.com) o directamente como paquetesDebianEn algunas distros (RedHat) existe la herramienta authconfig que facilita esta configuración
Configurar el Name Service Switch
El NSS se encarga, entre otras, de realizar la correspondencia entre los nú-meros y nombres de usuario permite gestionar los permisos de acceso de usuarios a ficheros se congura a través del chero /etc/nsswitch.confla conguración de ese chero la vimos en el tema 5Pasos (hacerlos en un sistema diferente del servidor):
1. Instalar el paquete libnss-ldap En la conguración indicar la IP del servidor LDAP y el DN dela base del directorio LDAP esa conguración se guarda en el chero /etc/libnss-ldap.conf2. Modicar las líneas de passwd, group y shadow del chero nsswitch.conf
passwd: files ldap group: files ldap shadow: files ldap esto indica al NSS que busque la información primero en los cheros y, si no la encuentra, en el servidor LDAP
3. Probar que funciona:a) Hacer un finger al usuario denido en LDAP32# finger pepeLogin: pepe Name: Jose PenaDirectory: /home/pepe Shell: /bin/bash...b) Crear el directorio /home/pepe y cambiarle el propietario a pepe
c) Hacer un su - pepe para ver que podemos cambiar al usuario pepe en el clienteCongurar el módulo de autenticación.Aunque el usuario es válido en el cliente, todavía no podemos autenticarnos(entrar en la cuenta)Debemos congurar el servicio PAM.
PAM (Pluggable Authentication Module ) biblioteca de autenticacióngenérica que cualquier aplicación puede utilizar para validar usuarios,utilizando por debajo múltiples esquemas de autenticación alternativos(cheros locales, Kerberos, LDAP, etc.)permite añadir nuevos mecanismos de autenticación (Kerberos,LDAP,. . . ) sin tener que modicar los servicios de entrada al sistema como login, ftp, ssh, etc.PAM utiliza módulos que proporcionan autenticación en los serviciosde entrada al sistema: Módulos de autenticación (auth): comprobación de contraseñas (utilizado por el proceso de login para averiguar si lascredenciales tecleadas por el usuario (nombre y contraseña)son correctas) Módulos de cuentas (account): controlan que la autenticaciónsea permitida (que la cuenta no haya caducado, que el usuariotenga permiso de iniciar sesiones a esa hora del día, etc.) Módulos de contraseña (password): permiten cambiar contraseñas Módulos de sesión (session): conguran y administran sesionesde usuarios (tareas adicionales que son necesitadas parapermitir acceso, como el montaje de directorios, actualizacióndel chero lastlog, etc.)
Las librerías de PAM están en /lib/security y los cheros deconguración en /etc/pam.d/ (en versiones viejas, se congurabaa través del chero /etc/pam.conf)Existe un chero de conguración para cada servicio que usa PAM
También existen cheros comunes que son incluidos por los cheros de conguración: common-auth, common-account, common-passwordy common-session
Conguración de PAM para usar LDAP en el cliente seguimos lossiguientes pasos:
1. Instalar el paquete libpam-ldapCambiar el Root login account al DN del administrador LDAP
El resto de opciones dejarlas por defectoLa conguración es en el chero /etc/pam_ldap.conf Para más información, ver la página de manual de pam_ldap.conf NOTA sobre la conguración: en el último paso de la instalación nospide la clave del administrador de LDAP esta clave se guarda en plano en el chero /etc/pam_ldap.secret,y se usa para que el root del sistema pueda modicar directamentelas contraseñas de los usuarios si no se quiere tener ese chero con la clave, dejar vacío el campo clave y en el chero /etc/pam_ldap.conf comentar la línea que empieza por rootbinddn
2. Cambiar los cheros common-auth, common-account y common-password,añadiendo la siguiente línea:
sufficient pam_ldap.so cambiando por auth, account o password según corresponda
3. En el chero common-auth añadir use_first_pass después de pam_unix.so esto evita que a los usuarios no-LADP se les pida la contraseña dos veces
4. Podemos crear directorios home al vuelo: añadir lo siguiente al principio de common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
al entrar el usuario en la cuenta, si no existe su HOME, se crea
5. Probar que funciona:
a) Entrar en la cuenta como un usuario LDAP
b) Cambiar la contraseña del usuarioInstalación del paquete nscd una vez que todo funciona, en el cliente podemos instalar el paquete nscd Name Service Cache Daemon
Hace caché para los nombres leidos del servidor LDAP
7.5. Migración desde cheros o NISS i tenemos un sistema congurado mediante cheros (passwd, shadow, etc.)o NIS, migrar a LDAP puede ser laboriosolos scripts del paquete MigrationTools son de gran ayuda Migración desde cherosPasos para migrar los usuarios denidos en /etc/passwd a LDAP
1. Instalar el paquete migrationtools
2. Modicar el chero /usr/share/migrationtools/migrate_common.ph para indicar el dominio y la base LDAP$DEFAULT_MAIL_DOMAIN = "midominio.com"$DEFAULT_BASE = "dc=midominio,dc=com"353. Utilizar los diferentes scripts del directorio /usr/share/migrationtools para incorporar la información del sistema al directorio migrate_base.pl genera entradas correspondientes a las unidades organizativas por defecto: People, Group, Hosts, etc. (ya lotenemos) Otros scripts generan entradas asociadas a diferentes cheros del sistema Script Migra
migrate_passwd.pl /etc/passwd /etc/shadow
migrate_group.pl /etc/group
migrate_hosts.pl /etc/hosts
migrate_fstab.pl /etc/fstab. . .
Estos scripts generan cheros LDIF que podemos añadir a la baseLDAP con ldapadd
Ejemplo: migración de los usuarios# ./migrate_passwd.pl /etc/passwd ./passwd.ldif
 debemos editar el chero generado para eliminar los usuariosdel sistema (root, nobody, etc.) luego, lo añadimos con:# ldapadd -x -D cn=admin,dc=midominio,dc=com-W -f ./passwd.ldif
7.6. Conguración de LDAP con múltiples servidoresPodemos congurar varios servidores LDAP que mantengan imágenes sincronizadas de la información del directorio equilibran la carga de las consultas, y mejora la tolerancia a fallos Esquema de maestro único y múltiples esclavos el maestro mantiene la copia principal sobre la que se hacen los cambios
2Puede dar problemas con los nombres acentuados
 si un cliente intenta hacer un cambio en un esclavo, este lo redirige automáticamente al maestro cada vez que se produce un cambio en el directorio del maestro, el servicio slapd escribe dicho cambio, en formato LDIF, en un chero de log el demonio slurpd lee dichos cambios e invoca las operaciones de modicación correspondientes en todos los esclavosPara congurarlo debemos hacer que el maestro y los esclavos partan de un estado de directorio común copiar manualmente la base de datos LDAP del maestro a todos losesclavosEn el maestro y en los esclavos debemos modicar el chero /etc/ldap/slapd.conf
Maestro: añadir una directiva replica por cada esclavo, donde se indiqueel nombre del esclavo y una cuenta con permiso de escrtitura enel LDAP del esclavo (bindn)replica uri=ldap://esclavo.midominio.com:389binddn="cn=Replicator,dc=midominio,dc=com"bindmethod=simple credentials=CONTRASEÑA_PLANA
 indicar el chero de log donde se guardan los cambiosreplogfile /var/lib/ldap/replog
Esclavo: añadir una línea updatedn indicando la cuenta con la que el servicio slurpd del servidor maestro va a realizar las modicacionesen la réplica del esclavo esa cuenta debe tener permisos de escritura en la base de datos del esclavo, y debe coindidir con la indicada en el campo binddn del maestro añadir una línea updateref para indicar al servidor esclavo que cualquier petición directa de modicación que venga de un cliente debe ser redireccionada al servidor maestroupdatedn "cn=Replicator,dc=midominio,dc=com"updateref ldap://maestro.midominio.com Para más detalles ver: OpenLDAP Administrator's Guide: Replication withslurpd7.7. Herramientas de administración de LDAPAdministrar LDAP desde línea de comandos resulta muy engorroso Existen numerosas herramientas visuales que facilitan la gestión deLDAP Algunas de ellas son:
1. phpldapadmin - interfaz basada en web para administrar servidores LDAP
2. gosa - herramienta de administración, basada en PHP, para gestión de cuentas y sistemas en LDAP
3. directory-administrator - herramienta gráca de gestión de directoriosLDAP
4. ldap-account-manager - webfrontend para gestión de cuentas enun directorio LDAP
5. gq - cliente LDAP basado en GTK+/GTK2 (bastante simple)
6. cpu - herramientas de gestión para consola: proporciona comandostipo useradd/userdel para usar con
Compartición Linux-Windows: Samba Samba permite a un sistema UNIX conversar con sistemas Windows a travésde la red de forma nativael sistema Unix aparece en el Entorno de red de Windowslos clientes Windows pueden acceder a sus recursos de red e impresoras compartidasel sistema UNIX puede integrarse en un dominio Windows, bien comoControlador Primario del Dominio (PDC) o como miembro del dominioVeremos una conguración básica de Samba; para saber más:
1. The Samba Homepage
2. The Ocial Samba-
3 HOWTO and Reference Guide3. The Unocial Samba HOWTO
4. The Linux Samba-OpenLDAP Howto5. Using Samba, 2nd Edition, O'Reilly & Associates6. Integración de redes con OpenLDAP, Samba, CUPS y PyKota7. Curso de Integración de Sistemas Linux/Windows8.1. Funcionamiento de SambaSamba implementa los protocolos NetBIOS y SMBNetBIOS: protocolo de nivel de sesión que permite establecer sesionesentre dos ordenadoresSMB (Server Message Block ): permite a los sistemas Windows compartircheros e impresoras (llamado Common Internet File System, CIFSpor Microsoft)Samba ofrece los siguientes serviciosServicios de acceso remoto a cheros e impresorasAutenticación y autorizaciónServicio de resolución de nombres.
Demonios SambaSamba utiliza dos demonios: smbd y nmdb
smdb permite la compartición de archivos e impresoras sobre una redSMB, y proporciona autenticación y autorización de acceso para clientesSMB; ofrece los dos modos de compartición de recursos existentesen Windows modo basado en usuarios o modo user (propio de los dominiosWindows NT o 2000) modo basado en recursos o modo share (propio de Windows3.11/95)nmbd permite que el sistema Unix participe en los mecanismos de resolución de nombres propios de Windows (WINS), lo que incluye anuncio en el grupo de trabajo gestión de la lista de ordenadores del grupo de trabajo contestación a peticiones de resolución de nombres anuncio de los recursos compartidosOtras utilidades SambaAdicionalmente a los dos programas anteriores, Samba ofrece varias utilidades;algunas de las más relevantes son:smbclient interfaz que permite a un usuario de un sistema Unix conectarsea recursos SMB y listar, transferir y enviar cherosswat (Samba Web Administration Tool ) utilidad para congurar Sambade forma local o remota utilizando un navegador websmbfs sistema de cheros SMB para Linux: permite montar un recursoSMB ofrecido por un servidor SMB (un sistema Windows o un servidorSamba) en un directorio localwinbind permite al sistema UNIX resolver nombres y grupos desde unservidor Windows8.2. Instalación básica de SambaVeremos una instalación básica de Samba en nuestro sistema Debian:permitirá desde un Windows acceder a los directorios de usuarios40Instalación de los paquetesEl paquete básico a instalar es samba que incluye los demonios de Sambainstala también el paquete samba-common, que incluye utilidades comosmbpasswd y testparmOtros paquetes de Samba son:smbclient herramientas para el cliente Sambasmbfs comandos para montar y desmontar smbfsswat Samba Web Administration ToolwinbindSólo instalaremos samba y samba-commonla instalación nos pide un nombre de Grupo de Trabajo/Dominio indicar un nombre, que debemos usar en el sistema Windows8.3. Conguración de SambaLa conguración de Samba se realiza en el chero /etc/samba/smb.confestablece las características del servidor Samba, así como los recursosque serán compartidos en la redEjemplo sencillo:[global]workgroup = MIGRUPO[homes]comment = Home Directories[pub]path = /espacio/pubEstructura del archivo smb.confEl chero /etc/samba/smb.conf se encuentra divido en secciones, encabezadospor una palabra entre corchetesEn cada sección guran opciones de conguración, de la forma etiqueta= valor, que determinan las características del recurso exportado porla sección41Existen tres secciones predenidas: global, homes y printersOtras secciones (como pub en el ejemplo anterior) denen otros recursospara compartirSecciones predenidas:[global] dene los parámetros de Samba a nivel global del servidor, porejemplo, el programa utilizado para que un usuario pueda cambiar suclave (passwd program)[homes] dene automáticamente un recurso de red por cada usuario conocidopor Samba; este recurso, por defecto, está asociado al directoriohome del usuario en el ordenador en el que Samba está instalado[printers] dene un recurso compartido por cada nombre de impresoraconocida por SambaNiveles de SeguridadSamba ofrece dos modos de seguridad, correspondientes a los dos modos decompartición de recursos ya vistosModo share: cada vez que un cliente quiere utilizar un recurso ofrecidopor Samba, debe suministrar una contraseña de acceso asociada a dichorecursoModo user : el cliente establece una sesión con el servidor Samba (medianteusuario y contraseña); una vez Samba valida al usuario, el clienteobtiene permiso para acceder a los recursos ofrecidos por SambaEl nivel de seguridad se especica con la opción security, la cual pertenecea la sección [global]security = share user server domain ADSLos niveles user, server, domain y ADS corresponden todos ellos al modo deseguridad userNivel user: el encargado de validar al usuario es el sistema Unix dondeSamba se ejecuta; es necesario que existan los mismos usuarios y conidénticas contraseñas en los sistemas Windows y en el servidor SambaNivel server: Samba delega la validación del usuario en otro ordenador,normalmente un sistema Windows 2000 (método no recomendado)42Nivel domain: el ordenador en el que se delega la validación debe ser unControlador de Dominio (DC), o una lista de DCs; el sistema Sambaactúa como miembro de un dominioNivel ADS: en Samba-3 permite unirse a un dominio basado en ActiveDirectory como miembro nativoEl modo por defecto es user8.4. Otros comandos SambaLa suite Samba incluye otros comandos, como son:testparm permite chequear el chero smb.conf para ver si es correctonet herramienta básica para administrar Samba y servidores SMB remotos;funciona de forma similar al comando net de DOSsmbpasswd permite cambiar la contraseña usada en las sesiones SMB;si se ejecuta como root también permite añadir y borrar usuarios delchero de contraseñas de Sambasmbstatus muestra las conexiones Samba activassmbclient permite a un usuario de un sistema Unix conectarse a recursosSMB y listar, transferir y enviar cheros8.5. PrácticasInstalar Samba en Linux y acceder a los directorios de usuario desde Windows20001. En el sistema Linux:a) Instalar los paquetes de Sambab) Examinar el chero de conguración por defecto, y modicarlo:jar el nivel de seguridad a userpermitir leer y escribir en los los HOME de los usuariosc) Para algún usuario existente, usar smbpasswd para añadir el usuarioal chero de contraseñas de Samba y ponerle una contraseña2. En el sistema Windows 2000a) Poner el grupo de trabajo al mismo que el indicado en Samba43b) Crear usuarios con el mismo nombre y contraseña que el usado enSambac) Acceder como ese usuario y ver que podemos ver y crear cherosen el HOME del sistema