lunes, 26 de enero de 2009

Servicio de directorio: LDAP

Servicio de directorio: LDAP

LDAP: Protocolo Ligero de Acceso a Directorios (Lightweight Directory Access Protocol)

OpenLDAP



Modelo de datos de LDAP

Un 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úsquedas
  • el 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 identifica por su tipo y uno o más valores
    • los tipos son normalmente palabras nemotécnicas, como uid (identificador de usuario), cn (common name), c (country), dc (domain component), etc.
    • los diferentes atributos de un nodo están determinados por la clase a la que pertenece
    • las clases permiten definir entradas con diferente información: clases para personas, para equipos, administrativas, etc.
    • las clases se definen mediante ficheros de esquema (schema)
  • Cada nodo debe poseer un nombre único: nombre distinguido o dn (distinguished name)
    • el dn identifica 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:
Image LDAParbol
  • cada nodo puede tener varios atributos, p.e. el nodo pepe podría tener los siguientes atributos:
    dn: cn=Jose Pena,ou=People,dc=midominio,dc=com
    objectClass: account
    uid: pepe
    sn: Pena
    description: alumno
    mail: 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 datos a un servidor LDAP



Instalación de un servidor LDAP

Describiremos como montar un servidor LDAP simple que nos permita la gestión de usuarios y grupos
  • el servidor mantendrá la lista de usuarios y grupos del dominio
  • en los clientes la autenticación de usuarios y los permisos se basará en el servidor LDAP

Pasos para la instalación del servidor en Debian

  1. Instalar los siguientes paquetes:
    1. slapd: servidor OpenLDAP
    2. ldap-utils: utilidades del paquete OpenLDAP
      • incluye 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 configuración:
    1. Fichero /etc/ldap/ldap.conf
      • Fichero de configuración global para los clientes LDAP
      • Permite especificar la base por defecto, el servidor LDAP, etc. (cambiarlo para poner nuestra configuración, comprobar que tiene permisos 644)
      • Para más info, ver man ldap.conf
    2. Fichero /etc/ldap/sldap.conf
      • Fichero de configuración del demonio slapd
      • En principio, no es necesario cambiarlo (comprobar que tiene permisos 600)
  3. Crear la estructura de la base de datos: crearemos los nodos de People y Group del árbol LDAP
    1. Crear el siguiente fichero estructura.ldif en formato LDIF:
          dn: ou=People,dc=midominio,dc=com
      objectClass: top
      objectClass: organizationalUnit
      ou: People

      dn: ou=Group,dc=midominio,dc=com
      objectClass: top
      objectClass: organizationalUnit
      ou: Group
    2. 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 and Security Layer)
      • -D nombre distinguido con el que nos conectamos a LDAP (ponemos el del administrador)
      • -W pide la contraseña de forma interaciva
      • -f fichero a cargar
  4. Añadir un usuario y un grupo a la base de datos
    1. Crear un fichero como este, que tiene la información para un usuario y un grupo (¡no useis acentos!):
          dn: cn=Jose Pena,ou=People,dc=midominio,dc=com
      objectClass: top
      objectClass: account
      objectClass: posixAccount
      objectClass: shadowAccount
      uid: pepe
      cn: Jose Pena
      uidNumber: 2000
      gidNumber: 2000
      homeDirectory: /home/pepe
      loginShell: /bin/bash
      gecos: Jose Pena, Despacho 22,,

      dn: cn=pepe,ou=Group,dc=midominio,dc=com
      objectClass: top
      objectClass: posixGroup
      cn: pepe
      gidNumber: 2000
      • define 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 fichero /etc/shadow: campos shadowMax, shadowExpire, shadowWarning, etc.
    2. Añadir el fichero con:
      # ldapadd -x -D ´cn=admin,dc=midominio,dc=com´ -W -f user-group.ldif
    3. Probarlo haciendo búsquedas, tipo:
      # ldapsearch -x uid=pepe
    4. Añadir una contraseña al usuario: puede hacerse directamente metiendo un campo userPassword en el fichero anterior, pero es preferible hacerlo mediante el comando ldappasswd
    # ldappasswd -x ´cn=Jose Pena,ou=People,dc=midominio,dc=com´ -D ´cn=admin,dc=midominio,dc=com´ -W -S
  5. Si queremos migrar la información de los ficheros /etc o NIS a LDAP podemos 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 configuración slapd.conf

Fichero de configuració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 personal para los usuarios
  2. Directivas específicas 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 especifica a qué datos del directorio se aplica la regla. Tres opciones:
      1. puede indicarse todo el directorio mediante un asterisco (*)
      2. un subconjunto de entradas cuyo nombre distinguido contiene un cierto sufijo (por ejemplo, dn=".*,dc=midominio,dc=com")
      3. un atributo concreto de dichos objetos (por ejemplo, dn=".*,ou=People,dc=midominio,dc=com" attr=userPassword)
    • indica a quién (a qué usuario(s)) se especifica 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ón
    • Por ejemplo, la regla por defecto para userPassword permite que los usuarios puedan autenticarse y cambiar sus propias contraseñas y el administrador las de todos

Instalación de un cliente LDAP

Describiremos como como configurar un cliente para que acceda a la información almacenada en el directorio de LDAP del servidor
  • Dos pasos:
    1. Configurar el Name Service Switch (fichero /etc/nsswitch.conf)
    2. Configurar el módulo de autenticación (PAM, Pluggable Authentication Modules)
  • Los módulos necesarios para esta configuración pueden descargarse de la página de PADL (www.padl.com) o directamente como paquetes Debian
  • En 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 configura a través del fichero /etc/nsswitch.conf
  • la configuración de ese fichero la vimos en el tema 5
Pasos (hacerlos en un sistema diferente del servidor):
  1. Instalar el paquete libnss-ldap
    • En la configuración indicar la IP del servidor LDAP y el DN de la base del directorio LDAP
      • esa configuración se guarda en el fichero /etc/libnss-ldap.conf
  2. Modificar las líneas de passwd, group y shadow del fichero nsswitch.conf
    passwd: files ldap
    group: files ldap
    shadow: files ldap
    • esto indica al NSS que busque la información primero en los ficheros y, si no la encuentra, en el servidor LDAP
  3. Probar que funciona:
    1. Hacer un finger al usuario definido en LDAP
        # finger pepe
      Login: pepe Name: Jose Pena
      Directory: /home/pepe Shell: /bin/bash
      ...
    2. Crear el directorio /home/pepe y cambiarle el propietario a pepe
    3. Hacer un su - pepe para ver que podemos cambiar al usuario pepe en el cliente

Configurar 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 configurar el servicio PAM
PAM (Pluggable Authentication Module)
biblioteca de autentificación genérica que cualquier aplicación puede utilizar para validar usuarios, utilizando por debajo múltiples esquemas de autentificación alternativos (ficheros locales, Kerberos, LDAP, etc.)
  • permite añadir nuevos mecanismos de autentificación (Kerberos, LDAP,...) sin tener que modificar los servicios de entrada al sistema como login, ftp, ssh, etc.
  • PAM utiliza módulos que proporcionan autentificación en los servicios de entrada al sistema:
    • Módulos de autentificación (auth): comprobación de contraseñas (utilizado por el proceso de login para averiguar si las credenciales tecleadas por el usuario (nombre y contraseña) son correctas)
    • Módulos de cuentas (account): controlan que la autenticación sea permitida (que la cuenta no haya caducado, que el usuario tenga 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): configuran y administran sesiones de usuarios (tareas adicionales que son necesitadas para permitir acceso, como el montaje de directorios, actualización del fichero lastlog, etc.)
  • Las librerías de PAM están en /lib/security y los ficheros de configuración en /etc/pam.d/ (en versiones viejas, se configuraba a través del fichero /etc/pam.conf)
  • Existe un fichero de configuración para cada servicio que usa PAM
  • También existen ficheros comunes que son incluidos por los ficheros de configuración: common-auth, common-account, common-password y common-session

Configuración de PAM para usar LDAP

en el cliente seguimos los siguientes pasos:
  1. Instalar el paquete libpam-ldap
    • Cambiar el Root login account al DN del administrador LDAP
    • El resto de opciones dejarlas por defecto
    • La configuración es en el fichero /etc/pam_ldap.conf
    • Para más información, ver la página de manual de pam_ldap.conf
    NOTA sobre la configuración: en el último paso de la instalación nos pide la clave del administrador de LDAP
    • esta clave se guarda en plano en el fichero /etc/pam_ldap.secret, y se usa para que el root del sistema pueda modificar directamente las contraseñas de los usuarios
    • si no se quiere tener ese fichero con la clave, dejar vacío el campo clave y en el fichero /etc/pam_ldap.conf comentar la línea que empieza por rootbinddn
  2. Cambiar los ficheros 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 fichero 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:
    1. Entrar en la cuenta como un usuario LDAP
    2. Cambiar la contraseña del usuario

Instalació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

Sistemas de archivos de red (NFS)

NFS (Network File System) permite compartir sistemas de ficheros en la red
  • Introducido por Sun MicroSystems en 1985, y soportado por todos los Unices
  • Versiones principales: NFSv2 y NFSv3
  • NFSv2 y 3: protocolo sin estado: no hay pérdida de información si el servidor 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:

Características principales

Ejemplo de funcionamiento
Image NFS

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 (atender y resolver las peticiones de acceso del cliente a archivos situados en el directorio remoto)
  • rpc.mountd: proceso que recibe la petición de montaje desde un cliente NFS y chequea para mirar si coincide con un sistema de ficheros actualmente exportado, y si el cliente tiene permisos suficientes para montar 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 notificación de reinicio, cuando NFS cae; lo usa el servicio de bloqueo de ficheros lockd
  • rpc.lockd: servicio de bloqueo de ficheros (NFS lock manager, NLM); no necesario en kernels modernos (>= 2.4) en los que el boqueo es realizado 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 (o nombres de grupos)

Instalación de NFS en Debian

Antes 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 soportados por el sistema de ficheros 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 Debian

Servidor NFS

  1. Instalar el paquete nfs-kernel-server y nfs-common
    • nfs-kernel-server proporciona rpc.nfsd, rpc.mountd, y para NFSv4 rpc.svcgssd
    • nfs-common proporciona rpc.lockd, rpc.statd, y para NFSv4 rpc.gssd y rpc.idmapd
  2. Configurar los directorios a exportar: fichero /etc/exports
    • Ejemplo de fichero /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.es
    • Algunas opciones de la exportación:
      • rw/ro exporta el directorio en modo lectura/escritura o sólo lectura
      • root_squash mapea los requerimientos del UID/GID 0 al usuario anónimo (por defecto usuario nobody, con UID/GID 65534); 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 especifica una lista de UIDs o GIDs 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 (por defecto 65534)
      • subtree_check/no_subtree_check si se exporta un subdirectorio (no un filesystem completo) el servidor comprueba que el fichero solicitado esté en el árbol de directorios exportado
      • sync modo síncrono: requiere que todas las escrituras se completen antes de continuar; es opción por defecto
      • async modo asíncrono: no requiere que todas las escrituras se completen; más rápido, pero puede provocar pérdida de datos en una caída
      • secure los requerimientos deben provenir de un puerto por debajo de 1024
      • insecure los requerimientos pueden provenir de cualquier puerto
    • Para más opciones man exports
    • Cada vez que se modifica este fichero 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 Ficheros Virtual (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-common
  2. Montar los directorios remotos con mount -t nfs o añadir una entrada en fstab (ver Tema 4: Montado de los sistemas de ficheros)
    • Ejemplo de uso con mount:
      # mount -t nfs 193.144.84.0:/home /mnt/home
    • Ejemplo de entrada en fstab
      193.144.84.0:/home      /mnt/home     nfs     rw     0 0
    • Automount se usa frecuentemente con NFS (ver la parte de Autofs en Tema 4: Montado de los sistemas de ficheros)
Opciones particulares de montado con NFS:
  • rsize=n/wsize=n especifican el tamaño del datagrama utilizado por los 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 proceso que realizó la petición (puede dar problemas)
Para ver más opciones, ver nfs(5)


Consideraciones de seguridad en NFS

NFS 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 permisos en el servidor:
    • El usuario con UID n en el cliente obtiene permisos de acceso a los 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 los ficheros 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 acceso de administrador en sus sistemas
  2. Evitar el acceso a NFS desde fuera de la Intranet
    • Bloquear 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



Ejecución remota y transferencia de ficheros (telnet,ftp,ssh,scp)

Permiten acceder a un sistema remoto y transferir ficheros de/hacia este sistema
  • Aplicaciones clásicas
    1. telnet (TELetype NETwork) permite conectarnos a otros ordenadores de la red como terminal remoto
    2. ftp (File Transfer Protocol permite intercambiar ficheros entre distintos ordenadores de la red
  • Problema: la información se transfiere en claro
  • El uso de telnety ftp se desaconseja
  • Reemplazarlos por ssh, scp, sftp
    1. ssh (Secure Shell) permite conectarnos a otro sistema encriptando toda la información
    2. scp, sftp permiten la transferencia de ficheros de forma encriptada
      • scp similar a cp y sftp similar a ftp


Servicio de telnet y ftp

Los servicios TCP (telnet, ftp, talk, finger, etc.) son normalmente lanzados por el superdemonio de red inetd (o xinetd)
  • El fichero de configuració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 socket tipo 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
  • Para mayor control usar TCP Wrapper (programa tcpd)
    • Permite conceder/denegar acceso a determinados hosts/redes mediante los fichero /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
    Desistalar 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 a un puerto > 1023 del cliente
      • Problema con los firewalls 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

Instalación de un servidor ftp básico

  1. 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 avanzado

Servidores 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 en el mismo host)
    • Usuarios FTP virtuales (cuentas ftp diferentes de las cuentas del sistema)
    • Facilidades para registro y monitorización de accesos
    • Facilidades para controlar y limitar accesos
    • Comunicación encriptada


SSH

SSH: Shell seguro
  • Permite comunicarnos de forma segura con un servidor remoto
    • Permite abrir sesiones o transferir ficheros (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 OpenSSH
  • Paquetes Debian:
    • Ciente: openssh-client
    • Servidor: openssh-server

Modos de autenticación mediante SSH

SSH 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ña
    • Método absolutamente desaconsejado
  2. Igual que el anterior pero la clave pública del host remoto debe aparecer en /etc/ssh_known_hosts o ~/.ssh/known_hosts
    • No demasiado seguro (si el host remoto se ve comprometido, el servidor local queda comprometido)
  3. La clave pública del usuario remoto debe estar en ~/.ssh/authorized_keys
    • El usuario remoto debe tener acceso a su clave privada
    • Mé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 configuración del servidor ssh: /etc/ssh/sshd_config
Opción M Dfto. Significado
RhostsRSAAuthentication 2 no yes permite autenticación por host (SSH-1)
HostbasedAuthentication 2 no yes permite autenticación por host (SSH-2)
IgnoreRhosts 2 yes No usa los ficheros ~/.rhosts y ~/.shosts
IgnoreUserKnownHosts 2 no Ignora el fichero ~/.ssh/known_hosts
RSAAuthentication 3 yes Autenticación de clave pública de usuario (SSH-1)
PubkeyAuthentication 3 yes Autenticación de clave pública de usuario (SSH-2)
PasswordAuthentication 4 yes Autenticación mediante contraseña
UsePAM 2,3,4 no Usa PAM para autenticación




Otras opciones de configuración del servidor

Otras opciones en /etc/ssh/sshd_config
Opción Dfto. Significado
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 configuración del cliente ssh: /etc/ssh/ssh_config o ~/.ssh/config
  • En este fichero se especifican opciones para los comandos ssh, scp o sftp
  • Algunas de estas opciones se pueden especificar en el momento de ejecutar el comando, p.e.
    $ ssh -p port servidor # Indica otro puerto
Algunas opciones:
Opción Dfto. Significado
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/identity para SSH-1)
      • Clave pública: ~/.ssh/id_rsa.pub o ~/.ssh/id_dsa.pub (~/.ssh/identity.pub para 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 (ver man 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

Automatización de Tareas

Comando at

Permite indicar el momento en que se quiere ejecutar un trabajo
  • Sintaxis:
    at [opciones] TIME
  • Al ejecutar at pasamos a un nuevo prompt, que nos permite introducir comandos que se ejecutarán a la hora indicada
    • para salvar el trabajo y salir CTRL-D
    • el entorno actual también se salva
    • al terminar, la salida estándar se envía como un mail al usuario
    • el trabajo no se para al salir de la sesión
  • Ejemplo:
    $ at 11:45
    warning: commands will be executed using /bin/sh
    at> ls /tmp > lista
    at>
    job 4 at Wed Nov 16 11:45:00 2005
  • Algunas opciones:
    • -f FILE especifica un fichero conteniendo las acciones a realizar en vez de la entrada estándar
    • -c jobnumber muestra el trabajo a ejecutar
    • -m envía un mail al usuario, incluso aunque no haya salida
    • -v muestra la hora a la que se ejecutará el trabajo
  • TIME puede especificarse de varias formas:
    • HH:MM por ejemplo 12:54
    • HH:MMAM/PM, por ejemplo 1:35PM
    • HH:MM MMDDYY, por ejemplo 1:35PM 122505
    • now + numero unidades, donde unidades puede ser minutes, hours, days, o weeks
      $ at now+2hours
    • today, tomorrow, por ejemplo 12:44tomorrow
    • midnight (00:00), noon (12:00), teatime (16:00)

Comandos relacionados

  • atq o at -l lista los trabajos pendientes del usuario
    • si es el superusuario, lista los trabajos de todos los usuarios
  • atrm o at -d borra trabajos identificados por su número de trabajo
  • batch ejecuta trabajos cuando la carga del sistema es baja
    • el trabajo empieza en cuanto la carga caiga por debajo de 1.5
    • la carga se obtiene del fichero /proc/loadavg

Ficheros de configuración

  • El administrador puede controlar la utilización de at
    • Ficheros /etc/at.allow y /etc/at.deny
      • at.allow lista los usuarios que pueden usar at
      • at.deny lista los usuarios que NO pueden usar at
  • Primero se chequea /etc/at.allow
    • si está el usuario, puede usar at
    • si no está o el fichero no existe, se chequea /etc/at.deny
    • si el usuario no está en at.deny puede usar at
  • Si no existe ninguno de los dos ficheros, solo root puede ejecutar at
  • Para dar permiso para todos los usuarios crear sólo el fichero at.deny vacío

Procesos periódicos

Para crear trabajos que se ejecuten periódicamente se utilizan el demonio cron y el comando crontab
  • crontab permite configurar los procesos periódicos
  • cron se encarga de su ejecución
La utilización de cron se gestiona a través de los ficheros /etc/cron.allow y /etc/cron.deny
  • el comportamiento si no existen los ficheros depende de la configuración del sistema
  • en Debian, si no existen, todos los usuarios pueden usar crontab

Fichero crontab

Los trabajos se especifican en un fichero de crontab, que se guarda en /var/spool/cron/crontabs, y que puede tener tres tipos de líneas:
  • Comentarios, que empiezan por #
  • Definición de variables, de tipo nombre = valor
    # shell usada para ejecutar los comandos
    SHELL=/bin/bash
    # Usuario al que se envía (por mail) la salida
    # de los comandos (por defecto, se envían
    # al propietario del fichero crontab)
    MAILTO=pepe
  • Especificación del trabajo y de la hora de ejecución, de la siguiente forma:
    minuto hora día mes día_semana comando
    • el día de la semana de 0 a 7 (0 ó 7 domingo)
    • * indica cualquier valor
    • se pueden indicar rangos, listas o repeticiones:
      • 1-5 para indicar de lunes a viernes
      • 0,15,30,45 para indicar cada 15 minutos
      • 0-23/2 en el campo hora, indica realizar cada dos horas (0, 2, 4, etc.)
  • Ejemplos:
    • Borra el /tmp todos los días laborables a las 4:30 am
      30 4 * * 1-5 rm -rf /tmp/*
    • Escribe la hora, cada 15 minutos, durante la noche:
0,15,30,45 0-8,20-23 * * * echo Hora:$(date)»/tmp/horas

Comando crontab

Para crear y editar los trabajos periódicos se puede utilizar el comando crontab
  • Sintaxis:
    crontab [-u usuario] {-l|-e|-r}
    crontab [-u usuario] fichero
  • en la segunda forma instala un nuevo crontab desde un fichero
  • Opciones:
    • -u usuario crea o maneja el crontab de un usuario específico (sólo root)
    • -e edita el fichero crontab
    • -l muestra el fichero crontab
    • -r borra el fichero crontab

Fichero /etc/crontab y /etc/cron.d

El demonio cron busca ficheros en /var/spool/cron para ejecutarlos a la hora indicada
  • además también ejecuta las acciones indicadas en los ficheros /etc/crontab y en el directorio /etc/cron.d/
  • estos ficheros suelen ser de mantenimiento del sistema
De esta forma, el administrador puede crear scripts que se ejecuten con periodicidad horaria, diaria, semanal y mensual
  • sólo tiene que colocar esos scripts en los directorios /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly o /etc/cron.monthly
  • la fecha y hora de ejecución de estos scripts se controla en el fichero /etc/crontab

Configuración DHCP

Configuración del DHCP

DHCP (Dynamic Host Configuration Protocol) permite configurar automáticamente la red de los sistemas a partir de un servidor DHCP
  • La información de IPs, DNS, etc. se mantiene centralizada en el servidor
  • Al iniciarse, los clientes se conectan al servidor (por broadcast) y cargan su configuración

Configuración del servidor

Se encuentra en el fichero /etc/dhcpd.conf
  • Ejemplo sencillo de configuración
option domain-name "midominio.com";  # Nombre de Dominio
option domain-name-servers 10.0.2.3, 193.14.7.9; # Servidores de Nombres
default-lease-time 600; # Tiempo por defecto que dura una asignación
max-lease-time 7200; # Duración máxima de una asignación
option subnet-mask 255.255.255.0; # Máscara de red
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.20;
option broadcast-address 192.168.0.255; # Dirección de Broadcast
option routers 192.168.0.1; # Gateway de la red
}
host marte {
hardware ethernet 52:54:00:12:34:70;
fixed-address marte.mired.com;
}
  • si utilizamos nombres (como marte.mired.com) la IP debe ser accesible (por DNS o /etc/hosts)
  • en el fichero /etc/default/dhcp especificamos el interfaz por el que servimos DHCP
  • en /var/lib/dhcp/dhcp.leases están las IPs asignadas
  • para más información ver la página de manual de dhcpd

Configuración del cliente

Para que el cliente obtenga los datos de DHCP usar:
# dhclient eth0
  • Un comando similar es pump
Para que el cliente se configure en el inicio debemos modificar el fichero de configuración de red
  • En Debian, fichero /etc/network/interfaces:
    auto eth0
    iface eth0 inet dhcp

Ficheros de configuración de red

La configuración mediante ifconfig y route no se mantiene al apagar el sistema:
  • durante el proceso de arranque la red se inicia mediante la ejecución de scripts del init.d
    • /etc/init.d/networking en Debian
    • /etc/init.d/network en RedHat
  • Estos scripts leen los ficheros de configuración de la red
  • Fichero /etc/network/interfaces en Debian
    auto eth0
    iface eth0 inet static
    address 193.144.84.77
    netmask 255.255.255.0
    network 193.144.84.0
    broadcast 193.144.84.255
    gateway 193.144.84.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 193.144.75.9
    dns-search dec.usc.es
    name Tarjeta de red Ethernet

  • Fichero /etc/sysconfig/network-scripts/ifcfg-ethx en RedHat
      DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=none
    IPADDR=193.144.84.186
    NETMASK=255.255.255.0
    GATEWAY=193.144.84.1
    TYPE=Ethernet

Otros ficheros de configuración

Fichero /etc/resolv.conf

especifica el dominio y los servidores DNS
  • Ejemplo:
    domain dec.usc.es
    search dec.usc.es usc.es
    nameserver 193.144.75.9
    nameserver 193.144.75.12
  • si buscamos por un hostname (sin dominio) le añade dec.usc.es y si no aparece busca por usc.es
  • pueden añadirse hasta tres servidores de DNS

Fichero /etc/hosts

fichero que asocia nombres de hosts con direcciones IP
  • permite consultar una IP sin acceder al DNS
  • Ejemplo de /etc/hosts:
    127.0.0.1     localhost.localdomain localhost
    193.144.84.77 jumilla.dec.usc.es jumilla
  • la consulta es más rápida que acceder al DNS
    • si las IPs cambian la dirección es incorrecta
  • sólo debería aparecer el nodo local y la interfaz de loopback
    • esto permite fijar el nombre y el dominio del sistema
    • en algunas distribuciones (Debian) el nombre también debe ponerse en el fichero /etc/hostname
    • el nombre y el dominio pueden obtenerse mediante los comandos hostname y dnsdomainname

Fichero /etc/networks

fichero de texto que asocia nombres a redes
  • No es imprescindible
  • Ejemplo de /etc/networks
            red1 172.16.1.0
    red2 172.16.2.0

Fichero /etc/host.conf

configura el comportamiento del name resolver
  • indica donde se resuelven primero la dirección o el nombre de un nodo
  • Ejemplo de /etc/host.conf:
            order hosts,bind
    multi on
  • indica que primero se verifiquen las tablas locales (/etc/hosts) y después el DNS
  • multi on indica que se retornen todas las direcciones válidas que se encuentren en /etc/hosts

Fichero /etc/nsswitch.conf

fichero de configuración del Name Service Switch
  • centraliza la información de diferentes servicios para la resolución de nombres
    • indica las acciones a realizar para acceder a las diferentes bases de datos del sistema: hosts, contraseñas, servicios, etc.
    • reemplaza la funcionalidad del archivo host.conf
    • introducido en la versión 2 de la biblioteca GNU
  • Ejemplo de nsswitch.conf
            hosts:          dns files
    networks: files
    • indica que un host se busque primero en el DNS y después en el fichero /etc/hosts, mientras que una red se busca sólo en /etc/networks
  • Es posible controlar el comportamiento por medio de acciones, por ejemplo:
            hosts:          dns [!UNAVAIL=return] files
    networks: files
  • si el estado de salida del DNS es diferente de no disponible no consulta a los ficheros:
    • sólo accede a /etc/hosts si el DNS no está disponible
  • Los valores de estado disponibles son:
    • success la petición se encontró sin errores (acción por defecto return)
    • notfound no error, pero no se encontró el nodo o la red (acción por defecto continue)
    • unavail servicio solicitado no disponible (acción por defecto continue)
    • tryagain servicio no disponible temporalmente (acción por defecto continue)

Fichero /etc/protocols

lista los protocolos que reconoce el sistema operativo
  • Ejemplo de /etc/protocols
    ip      0       IP    # internet protocol, pseudo protocol number
    icmp 1 ICMP # internet control message protocol
    tcp 6 TCP # transmission control protocol
    udp 17 UDP # user datagram protocol
    .....

Fichero /etc/services

relaciona las aplicaciones con sus correspondientes puertos y protocolos básicos
  • Un trozo de /etc/services
    ftp-data        20/tcp   # Datos de ftp
    ftp 21/tcp # Control de ftp
    ssh 22/tcp # SSH por TCP
    ssh 22/udp # SSH por UDP
    telnet 23/tcp # Telnet
    smtp 25/tcp # Correo electrónico

Comandos de creación de red

Comandos de configuración de red

Los comandos más importantes para configurar la red son:
  • ifconfig: configuración del interfaz de red
  • route: configuración del routing
  • netstat: información de la red

Comando ifconfig

Muestra y configura una interfaz de red:
$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:12:43:A6:05:5C
inet addr:193.144.84.77 Bcast:193.144.84.255 Mask:255.255.255.0
inet6 addr: fe80::211:43ff:fea6:55c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1035446 errors:0 dropped:0 overruns:0 frame:0
TX packets:1053062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:196973192 (187.8 MiB) TX bytes:270128587 (257.6 MiB)
Interrupt:169
  • Sintaxis:
    ifconfig [opciones] [interfaz]
    ifconfig interfaz [configuración] [up|down]
  • Opciones de visualización:
    • -a muestra todas las interfaces , incluso las inactivas
    • -s muestra información resumida (igual que netstat -i)
  • En las opciones de configuración se indica entre otras cosas la IP, máscara de red y dirección de broadcast:
# ifconfig eth0 193.144.84.77 netmask 255.255.255.0 broadcast 193.144.84.255 up
  • ifconfig permite también configurar el estado del interfaz, por ejemplo, cambiar el MTU, poner modo promiscuo, activar/desactivar ARP, cambiar su dirección hardware (si el dispositivo lo permite), etc.
    # ifconfig eth0 mtu 500
    # ifconfig eth0 -noarp
    # ifconfig eth0 hw ether 52:54:00:12:34:56
  • ver el manual de ifconfig para más información

Otros comandos relacionados


Otros comandos de configuración de interfaz son:

  • ifup/ifdown activan/desactivan un interfaz de red
    # ifdown eth0
  • iwconfig configura un interfaz wireless
    # iwconfig eth1 essid "Mi Red"

Comando route

Permite modificar la tabla de routing, mostrando, añadiendo o borrando rutas
  • muestra las rutas definidas
  • permite añadir/borrar rutas estáticas
  • permite definir un gateway de salida por defecto para conectarnos al exterior
  • permite configurar el sistema para que actúe como un router

Mostrar una tabla de routing



Se usa route [-n -e -ee] (equivale a netstat -r)
$ /sbin/route -n -ee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
193.144.84.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0 0 0
0.0.0.0 193.144.84.1 0.0.0.0 UG 0 0 0 eth0 0 0 0
  • Opciones:
    • -n usa direcciones IP en vez de nombres
    • -e emplea el mismo formato que netstat -r
    • -ee salida larga
  • Los flags indican el estado de la ruta
    • U la interfaz está activa (Up)
    • H el destino es una estación (Host)
    • G la ruta usa una pasarela (Gateway)
    • D ruta creada dinámicamente por un demonio de encaminamiento o un mensaje ICMP de redirección
    • M ruta modificada dinámicamente
    • R ruta rehabilitada
    • ! ruta rechazada
  • De las siguientes columnas, algunas no se usan
    • Metric distancia (normalmente en saltos) al destino
    • Ref número de referencias a la ruta (no usado en linux)
    • Use número de consultas para la ruta
    • MSS (Maximum Segment Size) tamaño máximo del segmento para las conexiones TCP en esa ruta
    • Window Tamaño predeterminado de la ventana para las conexiones TCP en esa ruta
    • irtt (Initial Round Trip Time) valor inicial del temporizador TCP

Añadir/borrar rutas estáticas



Se usa
route [add|del] [default] [-net|-host] target [netmask Nm] [gw Gw] [opciones] [[dev] If]
Ejemplo: suponer que tenemos la configuración del dibujo, y queremos crear la tabla de rutas para el host Internet

  • Añadir la ruta para la red 192.168.0.0/24 en eth1
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
  • Añadir la ruta por defecto
    route add default gw 10.0.2.2
  • Añadir una ruta para la red 172.16.0.0/24, usando como pasarela en host con IP 192.168.0.1
route add -net 172.16.0.0 netmask 255.255.255.0 gw 192.168.0.1
  • El host pasarela tiene que permitir routing entre sus interfaces; pasa eso debemos activar el ip_forward:
    # echo 1 > /proc/sys/net/ipv4/ip_forward

Otras opciones de configuración

Linux permite otras opciones para configurar la red, como definir alias de IP o configurar opciones sobre el tráfico

Alias de IP

  • Permite configurar múltiples direcciones IP a un único dispositivo de red
    • podemos soportar varias subredes IP en una misma Ethernet
    • los alias se indican como dispositivo:número
  • Ejemplo:
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up
# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0

Opciones del IP



Linux permite configurar diversas opciones sobre el tráfico IP
  • los cambios pueden hacerse mediante el comando sysctl, escribiendo en los archivos del directorio /proc/sys/net/ipv4 o de forma permanente en el fichero /etc/sysctl.conf
  • algunos de estos estos archivos tienen un 0 (opción desactivada) o un 1 (opción activada)
  • otros pueden tener un valor
  • algunas de las opciones son:
    • ip_forward si 1 permite routing entre interfaces (por defecto 0)
    • ip_default_ttl el tiempo de vida por defecto de los paquetes (por defecto 64 ms)

Información de la red: comando netstat

netstat muestra las conexiones de red, tablas de routing y estadísticas de interfaz
  • Formato:
    netstat [tipo de información] [opciones]
  • Algunos tipos de información:
    • (nada) muestra la lista de sockets abiertos
    $ netstat
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 jumilla.dec.usc.e:58946 aiff.usc.es:telnet ESTABLISHED
    tcp 0 0 jumilla.dec.usc.e:43658 ulla.dec.usc.es:1301 ESTABLISHED
    tcp 0 0 jumilla.dec.usc.e:35346 sd.cesga.es:ssh ESTABLISHED
    tcp 0 0 jumilla.dec.usc.es:ssh ulla.dec.usc.es:1688 ESTABLISHED
    tcp 0 0 jumilla.dec.usc.es:ssh teneguia.dec.usc.:35161 ESTABLISHED
    Active UNIX domain sockets (w/o servers)
    Proto RefCnt Flags Type State I-Node Path
    unix 8 [ ] DGRAM 15368 /dev/log
    unix 2 [ ] DGRAM 194110 @/org/kernel/udev/udevd
    unix 2 [ ] DGRAM 15671 @/var/run/hal/hotplug_socket
    • --route, -r muestra las tablas de rutas (igual que route admite los flags -n, -e y -ee)
    • --interface, -i muestra un resumen del estado de las interfaces de red (igual que ifconfig -s)
      $ netstat -i
      Kernel Interface table
      Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
      eth0 1500 0 5110292 0 0 0 5011769 0 0 0 BMRU
      • MTU (Maximum Transmission Unit): tamaño máximo del datagrama
      • Met: valor de la métrica para esa interfaz
      • RX/TX paquetes recibidos/transmitidos
      • OK/ERR/DRP/OVR paquetes transmitidos correctamente (OK), erróneos (ERR), descartados por falta de recursos (DRP, drop) y perdidos por desbordamiento (OVR, overrun)
      • Las banderas (flags) indican el estado del interfaz:
        • B: dirección de difusión activa
        • L: la interfaz es un dispositivo de bucle local (loopback)
        • P: se reciben todos los paquetes (modo promiscuo)
        • O: ARP desactivado para este interfaz
        • M: el interfaz permite multicast
        • A: el interfaz recibe todos los paquetes multicast en la red (allmulti)
        • R: la interfaz funciona (running)
        • U: la interfaz está activa (up)
      • Este estado puede cambiarse con ifconfig:
        # ifconfig eth0 promisc # Modo promiscuo
        # ifconfig eth0 -arp # Desactiva ARP
    • --statistics, -s muestra estadísticas para cada protocolo de red
        $ netstat -s
      Ip:
      5001746 total packets received
      7479 forwarded
      0 incoming packets discarded
      4894721 incoming packets delivered
      ......
  • Cada uno de los modos anteriores tienen diferentes opciones
  • Algunas opciones válidas para varios tipos son:
    • --numeric o -n muestra información numérica en vez de nombres para IPs, puertos, etc.
    • --continuous o -c imprime la información solicitada de forma continua
    • --extend o -e muestra información extendida (con -ee aún más información)
  • Para más información ver la página del manual

Otros comandos de red

Comando arp

  • arp manipula la cache de ARP:
    • muestra la tabla ARP
    • borra entradas
    • añade entradas manualmente
Ejemplo:
# arp
Address HWtype HWaddress Flags Mask Iface
almansa.dec.usc.es ether 00:0D:56:6F:E6:90 C eth0
193.144.84.1 ether 00:E0:63:93:26:E5 C eth0
teneguia.dec.usc.es ether 00:C0:4F:A1:5D:89 C eth0
  • Flag: C dirección completa, M dirección añadida manualmente
Algunas opciones:
  • -i interfaz muestra las entradas para el interfaz indicado
  • -a hostname muestra las entradas para el host especificado
  • -d hostname borra las entradas para el host especificado
  • -s hostname hw_addr añade manualmente una entrada para el host especificado con la dirección hardware indicada
  • -n interfaz no hace traducción de IPs a nombres

Comando ping

  • Muestra la disponibilidad de conexión y la velocidad de transmisión con un host remoto:
$ ping 193.144.84.1
PING 193.144.84.1 (193.144.84.1) 56(84) bytes of data.
64 bytes from 193.144.84.1: icmp_seq=1 ttl=255 time=0.420 ms
64 bytes from 193.144.84.1: icmp_seq=2 ttl=255 time=0.396 ms
64 bytes from 193.144.84.1: icmp_seq=3 ttl=255 time=0.368 ms
  • ping envía paquetes ICMP (ECHO_REQUEST) al destino y espera respuesta, midiendo el RTT
  • muchos firewalls bloquean el tráfico ICMP por lo que el ping no funciona
Algunas opciones:
  • -b permite ping a una dirección de broadcast
  • -c COUNT para después de enviar COUNT paquetes ECHO_REQUEST
  • s packetsize especifica el número de bytes a enviar (por defecto 56)

Comando traceroute

  • Muestra la ruta que sigue un paquete hasta llegar a destino
$ traceroute www.elpais.es
traceroute to a1749.g.akamai.net (130.206.192.32), 30 hops max, 40 byte packets
1 rutfis (193.144.64.1) 1.070 ms 0.688 ms 0.927 ms
2 * * *
3 10.56.5.1 (10.56.5.1) 57.463 ms 2.021 ms 1.923 ms
4 193.144.79.72 (193.144.79.72) 2.507 ms 16.280 ms 2.080 ms
5 GE2-0-0.EB-Santiago0.red.rediris.es (130.206.204.21) 25.681 ms 2.068 ms 1.965 ms
6 GAL.SO2-0-0.EB-IRIS4.red.rediris.es (130.206.240.33) 10.959 ms 10.665 ms 10.710 ms
7 130.206.220.59 (130.206.220.59) 20.277 ms 10.781 ms 10.470 ms
8 a130-206-192-32.deploy.akamaitechnologies.com (130.206.192.32) 11.011 ms 23.482 ms 12.185 ms
  • traceroute utiliza el campo TTL de la cabecera IP para obtener respuestas ICMP TIME_EXCEEDED de los host por los que pasa el paquete (envía paquetes UDP)
  • los sistemas pueden no enviar mensajes de tiempo excedido: aparecen *
  • si los firewalls bloquean el tráfico ICMP no veremos nada
  • otros programas similares:
    • traceproto: permite especificar el protocolo a usar (TCP, UDP, ICMP) y el puerto a tracear (por defecto 80)
    • tcptraceroute: envía paquetes TCP SYN para evitar problemas con firewalls

Comandos host, dig, nslookup

  • Permiten obtener la dirección IP de un sistema a partir del nombre o viceversa:
    $ host www.elpais.es
    www.elpais.es is an alias for elpais.es.edgesuite.net.
    elpais.es.edgesuite.net is an alias for a1749.g.akamai.net.
    a1749.g.akamai.net has address 130.206.192.38
    a1749.g.akamai.net has address 130.206.192.32
  • nslookup está desaprobado (deprecated) y no se recomienda su uso

Comando mii-tool

  • Permite ver y/o configurar el estado de la unidad MMI (Media Independent Interface) de la tarjeta de red
    • Ethernet usa MII para autonegociar la velocidad de enlace y el modo duplex
    # mii-tool -v eth0
    eth0: negotiated 100baseTx-FD flow-control, link ok
    product info: vendor 00:08:18, model 16 rev 0
    basic mode: autonegotiation enabled
    basic status: autonegotiation complete, link ok
    capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
    advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
    link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
    # mii-tool --force=100baseTx-HD eth0
    # mii-tool eth0
    eth0: 100 Mbit, half duplex, link ok

Cuotas de disco

Cuotas de disco

Algunos filesystems permiten limitar el uso del disco a los usuarios y grupos: cuotas
  • Evitan que los usuarios monopolicen el disco
  • Pueden causar problemas a los usuarios:
    • preferible instalar más disco o avisar a los usuarios que consuman demasiado
Límites de cuotas:
  • Límite débil: si la cuenta del usuario o del grupo supera el límite débil, se impondrá un período de gracia en el que el usuario podrá reducir la ocupación
  • Límite duro: se deniega cualquier intento de escribir datos despúes de este límite
  • Período de gracia: tras superar el límite débil, si el usuario no resuelve el problema borrando archivos, la cuenta se bloquea

Instalación de cuotas de disco en Debian

Si el kernel está configurado para soportar cuotas, los pasos a seguir son:
  1. Instalar el paquete quota
  2. Modificar /etc/fstab para marcar los filesystems que tendrán cuotas:
    /dev/hda9     /home     ext3     defaults,usrquota     0   2
    /dev/hda8 /tmp ext3 defaults,usrquota,grpquota 0 2
  3. Reiniciar el sistema
  4. Usar el comando edquota para editar las cuotas de usuarios y grupos

Comando edquota

Permite crear, manipular y eliminar cuotas basadas en usuarios o grupos
  • Sintaxis:
    edquota [opciones] [usuario|grupo]
  • Opciones:
    • -u usuario configura las cuotas del usuario
    • -g grupo configura las cuotas para un grupo
    • -f filesystem realiza las operaciones obre un filesystem concreto (por defecto, lo hace sobre todos los filesystems que admitan cuotas)
    • -t configura el período de gracia
    • -p user1 usuarios copia la configuración de cuotas de user1 a los usuarios indicados
  • Al ejecutar edquota se abre el editor indicado en la variable EDITOR (por defecto, vi) para modificar las cuotas:
    • se muestran los bloques de 1K en uso, así como los límites soft y hard (también para i-nodos o ficheros)
      • si un límite está a 0 no se aplica
    • esta información se guarda en los ficheros aquota.user y aquota.group en el directorio base del filesystem

Otros comandos

Existen otros comandos para la gestión de las cuotas:
  • quotacheck verifica la integridad de las bases de datos de las cuotas
    • se ejecuta en el script de inicio del sistema de cuotas
    • debe ejecutarse con las cuotas desactivadas
  • quotaon/quotaoff activa/desactiva el sistema de cuotas
  • repquota genera un informa del uso de las cuotas
    # repquota /home
    *** Report for user quotas on device /dev/hda9
    Block grace time: 7days; Inode grace time: 7days
    Block limits File limits
    User used soft hard grace used soft hard grace
    ----------------------------------------------------------------------
    root -- 34920 0 0 6 0 0
    tarabelo -- 728 0 0 31 0 0
    tomas *- 108 100 200 7days 8 0 0
  • quota permite al usuario ver el estado de sus cuotas
    • Algunas opciones:
      • -g muestra información sobre las cuotas del grupo del usuario
      • -v imprime información incluso para los filesystem sin límite en la cuota
      • -q imprime un mensaje si se ha superado la cuota
    • Ejemplo
$ quota
Disk quotas for user tomas (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda9 108* 100 200 6days 9 0 0
/dev/hda8 1 10 20 1 0 0
  • Para más información sobre la configuración de las cuotas ver Quota mini-HOWTO

Comandos para gestión de cuentas

Comandos simples de manejo de cuentas:
→ useradd añade un nuevo usuario al sistema; ejemplo.
useradd -c "Aitor Tilla" aitor
→ por defecto, sólo modifica los ficheros passwd y shadow, no crea el directorio home ni le pone contraseña (cuenta inhabilitada)
→ varias opciones:
→-m crea el directorio home, si no existe (y copial los ficheros de /etc/skel)
→-g grupo especifica el grupo principal
→-s shell especifica la shell a utilizar
→-e fecha fecha de expiración de la cuenta (formato YYYY-MM-DD)
→ ejemplo:
useradd -c "Aitor Tilla" aitor -m -e 2006-11-02 -s /bin/bash -g staff
→userdel borra un usuario del sistema
→usermod modifica las cuentas de usuario
→groupadd, groupdel, groupmod lo mismo, para grupos
→newusers permite crear varias cuentas a partir de un fichero con nombres de usuario y contraseñas
→ las líneas del fichero deben tener el mismo formato que las del fichero /etc/passwd, con la contraseña sin encriptar
→chpasswd similar al anterior, permite actualizar las contraseñas de usuarios existentes
→ chsh cambia el shell por defecto del usuario
→ chfn cambia la información del campo GECOS

Comandos de alto nivel para el manejo de cuentas:
→ Comandos adduser,addgroup:
→ hacen de front -en de los de bajo nivel useradd, groupadd y usermod
→ crean los usuarios /grupo en función de la configuración especificada en el fichero /etc/adduser.conf
→ Herramientas gráficas de gestión de usuarios y grupos:
→kuser (KDE), user-admin (GNOME),etc.

Otros comandos relacionados
→ passwd: permite cambiar la contraseña (ya comentado)
→ chage: muestra y cambia la información de expiración de la contraseña
→ formato: chage [opciones] [username]
→Algunas opciones: -l muestra información de expiración
→ su: permite cambiar de usuario o pasar a ser administrador
→ formato: su [opciones] [-] username
→ si no se especifica el username pasa a administrador
→ Algunas opciones:
→ - inicia un login shell
→ -m, -p o --preserve-environment mantiene el entorno (no ejecuta el. bashrc del nuevo usuario)
→ -s, --shell=nueva_shell usa la shell especificada
→ -c, --command=comando ejecuta el comando con la identidad del nuevo usuario: su -c `cat /etc/shadow`

domingo, 25 de enero de 2009

Creación manual de una cuenta

Creación manual de una cuenta

Implica los siguientes pasos.
  1. Editar el fichero /etc/passwd y añadir una línea para la nueva cuenta
    • para evitar corrupción del fichero usar el comando vipw
  2. Si usamos shadow, poner x en el campo de contraseña y editar el fichero /etc/shadow
    • para evitar corrupción del fichero usar el comando vipw -s
  3. Editar /etc/group para añadir un nuevo grupo, si es necesario, o para añadir el usuario a los grupos que deseemos
    • si es necesario, editar /etc/gshadow
  4. Crear el directorio del usuario
  5. Copiar los ficheros de /etc/skel al directorio del usuario
  6. Usar chown, chgrp y chmod para fijar el usuario, grupo y permisos del directorio
  7. Fijar la contraseña con passwd
    • el usuario debería cambiar la contraseña tan pronto como fuera posible
    • puede forzarse modificando el fichero shadow o con la opción -e

Comando passwd

Permite fijar o cambiar la contraseña de un usuario. Opciones:
  • -e, --expire fuerza a que la contraseña de la cuenta caduque; el usuario debe cambiarla en el siguiente login
  • -d, --delete borra la contraseña
  • -l/-u, --lock/--unlock bloquea/desbloquea la cuenta
  • -m, --mindays MIN_DAYS número mínimo de días entre cambios de contraseña
  • -x, --maxdays DÍAS_MAX número de días de validez de la contraseña
  • -w, --warndays DÍAS_AVISO número de días de aviso de caducidad
  • -i, --inactive INACTIVO días en que se deshabilitará la cuenta una vez expirada la contraseña
  • -S, --status indica el estado de la contraseña (bloqueada L, sin contraseña NP o con contraseña válida P)

Eliminación manual de una cuenta

Implica los siguientes pasos
  1. Inhabilitar la cuenta impidiendo el acceso
  2. Hacer un backup de los ficheros de usuario
  3. Eliminar los ficheros de usuario
La inhabilitación de la cuenta podría ser temporal o definitiva
  • Temporal: puede hacerse de diversas formas
    • cambiar el login shell a /bin/false, o /usr/sbin/nologin (si disponible)
    • cambiar el campo contraseña de /etc/passwd a * (volviendo a poner x se habilita la cuenta),
    • poner una ! al principio del campo contraseña de /etc/shadow,
    • usar passwd -l
  • definitiva: borrar las entradas del usuario de /etc/passwd y /etc/shadow

Ficheros de información de los usuarios

Ficheros de información de los usuarios

La información de los usuarios y grupos está incluida en los siguientes archivos:
  • /etc/passwd mantiene la información principal de cada cuenta: nombre de usuario, UID, GID, login shell, directorio home, contraseña (en sistemas antiguos), ...
  • /etc/shadow en sistemas actuales, fichero sin permiso de lectura que guarda las contraseñas encriptadas
  • /etc/group información sobre los grupos definidos en el sistema. nombre del grupo, GID y miembros del mismo
  • /etc/gshadow contraseñas para grupos (no suele usarse)

Fichero /etc/passwd

Ejemplo de líneas de /etc/passwd:
root:x:0:0:root:/root:/bin/bash
pepe:x:1002:1002:Pepe Pótamo,123,981234321,:/home/pepe:/bin/bash
donde se indican (si aparecen :: seguidos, el campo está vacío):
  • pepe: identificación de usuario en el sistema, que deberían tener las siguientes características
    • únicos en toda la organización (no sólo en la máquina local)
    • preferiblemente corto, en minúsculas y sin caracteres acentuados (para evitar problemas)
    • fácil de recordar
    • de formato fijo para todos los usuarios (p.e. nombre+apellido)
  • x: contraseña encriptada
    • si aparece una x la contraseña está en el fichero /etc/shadow
  • 1002: UID número identificador del usuario
    • para usuarios normales, número entre 1000 y 32767 (o 65535 en sistemas actuales)
    • números por debajo de 1000 para usuarios especiales del sistema (root usualmente número 0)
    • el UID para un usuario debería ser único, y el mismo para todas las máquinas
    • se debe evitar reutilizar un UID, para evitar problemas de pertenencia de archivos
  • 1002: GID código del grupo principal al que pertenece el usuario
  • Pepe Pótamo,123,...: información GECOS
    • cualquier cosa, usualmente el nombre completo del usuario y información adicional (n. de despacho, teléfono, etc.)
  • /home/pepe: directorio personal del usuario
  • /bin/bash: shell interactivo que utilizará el usuario

Fichero /etc/shadow

Fichero de acceso restringido que almacena las contraseñas encriptadas:

pepe:$1$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:90:5:30:13096:

Contiene para cada usuario la contraseña encriptada y otros campos separados por :

  • día, contado como número de días desde el 1/1/1970 (también conocido como epoch), en que la contraseña se cambió por última vez
    • si vale 0 se fuerza a que el usuario cambia su contraseña la primera vez que se conecta
  • número de días antes de que pueda ser cambiada
  • número de días de validez de la contraseña
  • días en que se avisa al usuario de que la contraseña va a caducar
  • días, una vez expirada, en que se deshabilitará la cuenta
  • día, desde el 1/1/1970, en que la cuenta se inhabilitará
    • si no aparece nada, la cuenta no se inhabilita nunca
  • un campo reservado

Fichero /etc/group

Información sobre los grupos de usuarios
users:x:100:pepe,elena
donde tenemos
  • nombre del grupo
  • contraseña del grupo (no suele usarse)
    • si x, se guarda en el fichero /etc/gshadow
      grupo:contraseña:administradores:miembros
      • los administradores pueden cambiar la contraseña, añadir usuarios al grupo, etc.
    • la contraseña puede fijarse/cambiarse con el comando gpasswd
  • GID identificador numérico del grupo
  • lista de usuarios que pertenecen al grupo
Cambio de grupo
  • un usuario puede cambiar de grupo con newgrp
    • si el grupo no tiene contraseña y no está en gshadow sólo pueden cambiar los miembros del grupo
    • si el grupo tiene contraseña, el usuario debe especificar la contraseña
    • si el grupo aparece en gshadow, la lista de miembros en este fichero pueden cambiar sin contraseña

Otros ficheros

Cuando se crea un nuevo usuario, los ficheros de inicio se copia del directorio /etc/skel
  • el administrador debe crear unos ficheros adecuados para los usuarios, especificando los paths necesarios de ejecución, inicialización de variables del sistema, etc.
  • también pueden usarse los ficheros /etc/profile o /etc/bash.bashrc (ver Tema 3, Ficheros de inicialización de Bash)