210 gestión de clientes de red
210.1 Configuración DHCP
DHCP (Dynamic Host Configuration Protocol) es un protocolo cliente/servidor que tiene como objetivo asignar automáticamente una dirección IP, así como los parámetros funcionales a los equipos de la red. Por defecto escucha en el puerto 67 y responde a través de 68.
Funcionamiento DHCP
DHCP (Dynamic Host Configuration Protocol) es un protocolo cliente/servidor que tiene como objetivo asignar automáticamente una dirección IP, así como los parámetros funcionales a los equipos de la red.
DHCPDISCOVER
Descubrimiento de servidor: el cliente envia un brodcast a la red para ver si existe algún servidor DHCP
DHCPOFFER
Respuesta de servidor: como el cliente aun no tiene ip se envia un broadcast con la configuración.
DHCPREQUEST
Aceptación: el cliente envia una aceptación de la configuración en broadcast.
DHCPACK
Acuse de recibo: El servidor realiza la asignación de la dirección y cierra la transacción enviando un acuse de recibo.
Configuración
El archivo de configuración /etc/dhcpd/dhcpd.conf
se basa en una configuración global y a partir de ahí se asignan opciones por subred o host.
# Configuració general
default-lease-time 86400; # Indica la duración de la concesión DHCP en segundos.
max-lease-time 259200;
option routers 192.168.88.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.88.255;
option domain-name-servers 8.8.8.8, 1.1.1.1;
option domain-name-servers 192.168.88.4;
option domain-search "local.lan";
# Aquest servidor dhcp sera el principal la subxarxa
authoritative;
# Subxarxa
subnet 192.168.88.0 netmask 255.255.255.0 {
range 192.168.88.10 192.168.88.25;
}
# (Torre [Ethernet])
host torreEthernet {
option host-name "pc02";
hardware ethernet b4:2e:99:48:ad:b6;
fixed-address 192.168.88.2;
}
El servidor DHCP conserva la información de cada una de las concesiones asignadas en el archivo dhcpd.leases, que se encuentra en el directorio /var/lib/dhcp/.
En ocasiones el servidor DHCP tiene diferentes interfaces de red y solo queremos que resuelva peticiones por una de ellas. La única dificultad reside en que este elemento de configuración no se encuentra en /etc/dhcpd.conf, sino que está en /etc/defaults/dhcp3-server.
cat /etc/default/dhcp3-server
INTERFACES="enp3s0"
Subredes
Todas las subredes que comparten la misma red física deben especificarse dentro de una declaración shared-network
El nombre de shared-network
debe ser el título descriptivo de la red ya que se vera reflejado en los logs
shared-network dep-ventas {
option domain-name "test.redhat.com";
option domain-name-servers ns1.redhat.com, ns2.redhat.com;
option routers 192.168.1.254;
more parameters for EXAMPLE shared-network
subnet 192.168.1.0 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.1 192.168.1.31;
}
subnet 192.168.1.32 netmask 255.255.255.0 {
parameters for subnet
range 192.168.1.33 192.168.1.63;
}
}
Grupos
La declaración group
puede utilizarse para aplicar parámetros globales a un grupo
group {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 192.168.1.1;
option time-offset -18000; # Eastern Standard Time
host apex {
option host-name "apex.example.com";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.4;
}
host raleigh {
option host-name "raleigh.example.com";
hardware ethernet 00:A1:DD:74:C3:F2;
fixed-address 192.168.1.6;
}
}
Cliente
El comando dhclient permite realizar peticiones DHCP en los equipos cliente. Si el comando no se ejecuta manualmente por un administrador, se puede llamar mediante los scripts de inicialización de red.
dhclient enp3s0 # pedir configuracion
dhclient -r enp3s0 # eliminar configuración
Las comunicaciones DHCP se realizan por broadcast y los mensajes broadcast no pasan a través de los routers. Sin embargo, si se desea utilizar solo un servidor para varias redes, existe una solución: los agentes DHCP relay.
┌───────┐
┌─────┬───────┬────┤router ├─────┬────────┬─────┐
│ │ ┌──┴─┐ └───────┘ ┌──┴──┐ │ │
┌─┴─┐ ┌─┴─┐ │ │ │ │ ┌─┴─┐ ┌─┴─┐
│pc │ │pc │ │DHCP│ │relay│ │pc │ │pc │
└───┘ └───┘ └────┘ └─────┘ └───┘ └───┘
El servidor DHCP tiene toda la configuración, el agente DHCPRelay solo escucha las peticiones DHCP de esa red, las envia al servidor DHCP pasando por el router en unicast y devuelve la respuesta al cliente.
dhcrelay -i interfaz dirección_servidor # activar dhcrelay
-i interfaz # Especifica la interfaz por la que el agente relay estará a la escucha
dirección_servidor # La IP del servidor al que se transmitirán las peticiones DHCP.
210.2 Autentificación PAM
Pam es un conjunto de librerías, que proporciona una api para autenticar aplicaciones (servicios), los clientes de pam, son las aplicaciones que tienen que autenticar
Una aplicación solicita a PAM si un usuario se puede conectar. PAM, en función de su configuración, invocará los módulos que utilizarán un método de autentificación. Si el resultado es positivo (el usuario ha proporcionado los elementos correctos de autentificación), PAM devuelve la autorización de conexión a la aplicación.
Los módulos están en archivos cuya ubicación estándar es /lib/security
.
Módulos PAM principales | |
---|---|
pam_securetty.so | Prohíbe el login para la cuenta root excepto en los terminales listados en /etc/securetty. |
pam_nologin.so | Si el archivo /etc/nologin existe, muestra su contenido ante cualquier intento de apertura de sesión y prohíbe el login ante cualquier usuario que no sea root. |
pam_env.so | Declara las variables de entorno que se leen en /etc/environment o en el archivo al que se hace referencia con el parámetro «envfile=». |
pam_unix.so | Permite la autentificación mediante el método tradicional de los archivos /etc/passwd y /etc/shadow. |
pam_deny.so | Vía muerta. Generalmente se ejecuta si ningún otro módulo se ha ejecutado con éxito. |
pam_permit.so | Devuelve un resultado positivo incondicionalmente. |
pam_limits.so | Asigna ciertas limitaciones funcionales a usuarios o grupos en función de los datos del archivo /etc/security/limits.conf. |
pam_cracklib.so | Se asegura que la contraseña empleada presenta un nivel de seguridad suficiente. |
pam_selinux.so | Si selinux está activo en el sistema, este módulo va a asegurar que el shell se ejecuta en el contexto de seguridad adecuado. |
pam_lastlog.so | Muestra la información de la última apertura de sesión con éxito. |
pam_mail.so | Comprueba la presencia de nuevos correos para un usuario (mensajería interna). |
Configuración
Utiliza un directorio /etc/pam.d que contiene tantos archivos como aplicaciones que usan PAM. Si existe el directorio /etc/pam.d, el archivo /etc/pam.conf no se consultará. Cada aplicación que utilice PAM necesita un archivo (en general del mismo nombre que la aplicación) que alberga su configuración PAM.
Importante: Pam no es un servicio, al hacer un cambio en los archivos es inmediato
Archivo de pam.d: formato estándar | |
---|---|
tipo | Representa el tipo de acción que necesita recurrir a PAM. Los cuatro valores posibles son: auth, account, password y session. |
control | Indica cómo deberá reaccionar el módulo ante el éxito o el error de su ejecución. Los valores comunes son required, requisite, sufficient y optional. |
módulo | El nombre del módulo invocado. El formato estándar es: pam_servicio.so, donde servicio representa el nombre actual del módulo. |
argumentos | Parámetros opcionales enviados al módulo para modificar su funcionamiento. |
Archivo login estandar en Fedora
[root@pam pam.d]# cat system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass nullok
auth required pam_deny.so
account required pam_unix.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Tipos
En los controles hay que saber diferenciar entre auth
(autentificación, demostrar quien soy) y autz
(a que me da derecho mi autentificación)
Tipos | Significados |
---|---|
auth | la acción de autentificación propiamente dicha |
account | acceso a la información de cuentas (tengo permiso para modificar) |
password | reglas para cambiar pasword |
session | acciones que se deben realizar antes o después de la apertura de la sesión. |
Control
La opción de control, es compleja, tiene echo unos alias donde agrupan una serie de opciones predefinidas mas habituales.
ejemplo:
required
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
requisite
[success=ok new_authtok_reqd=ok ignore=ignore default=die]
sufficient
[success=done new_authtok_reqd=done default=ignore]
optional
[success=ok new_authtok_reqd=ok default=ignore]
ignore
: ignora esta opciónbad
: marca como fallo y sigue evaluandodie
: marca como fallo y no evalúes mások
: marca como resultado positivo y sigue avaluandodone
: resultado positivo y no evalúes más opcionesN
numero de casillas a saltarreset
resetea valores anteriores
controles | |
---|---|
required | Esta opción siempre tendrá que dar cierto, si da falso, fallara pero sigue preguntando la siguiente opción. |
requisite | Esta opción tiene que dar cierto, si da falso, cierra, no pasa a la siguiente opcion. |
suficient | Si da cierto ya vale para la autentificación, en caso que de falso se ignora |
optional | Opciones que intentara hacer, el resultado de los módulos en este control, no afectara a no ser que sea el único a evaluar |
include | Incluir otros módulos de reglas existentes como si estuvieran en el mismo archivo |
substrack | llama a otro archivo y devuelve true o false, según la tabla de reglas. |
210.3 Cliente LDAP
En Linux hay herramientas por línea de comandos que permiten realizar operaciones en los servidores LDAP. Generalmente proporcionadas por ldap-utils
. Su sintaxis, poco atractiva, requiere un pequeño tiempo de adaptación para usarla con comodidad.
Búsqueda de información
ldapsearch -x -b contexto
-x # utilizar autentificación simple
-b # Realizar la búsqueda a partir del DN del contenedor del contexto.
ldapsearch -x -D dn_admin -W -h ip_servidor -b contexto -s sub atributo=valor
-D user # Realiza la autentificación con el nombre distinguido dn_admin.
-W # Solicitar interactivamente la contraseña.
-s # Realiza una búsqueda recursiva en todos los niveles por debajo del contexto de búsqueda.
Ejemplo orden ldapsearch
usuario@ubuntu:~$ ldapsearch -x -D cn=admin,dc=pas,dc=net -w password
-h 172.17.7.20 -b dc=pas,dc=net -s sub telephoneNumber=91*
# extended LDIF
...
# toto, madrid, pas.net
dn: cn=toto,ou=madrid,dc=pas,dc=net
objectClass: person
cn: toto
sn: toto
telephoneNumber: 9123456789
...
Atributos de busqueda
ldapsearch -x -LLL -h 172.17.0.2 -b 'dc=edt,dc=org' '(|(cn=* Mas)(cn=* Pou))' dn
ldapsearch -x -LLL -b 'dc=edt,dc=org' '(&(cn=* Mas)(ou=Profes))' dn
ldapsearch -x -LLL -b 'dc=edt,dc=org' '(&(|(cn=* Mas)(cn=* Pou))(gidNumber=600))'
ldapsearch -x -LLL -b 'ou=usuaris,dc=edt,dc=org' 'uidNumber>=5000' dn uidNumber
ldapsearch -x -LLL -b 'dc=edt,dc=org' -s [sub|base|one|children]
ldapsearch -x -LLL -b 'dc=edt,dc=org' + # atributos operacionales, lenguaje ldap
-s sub
es la salida estándar-s base
es el primer nivel del árbol de la base de datos-s one
es el segundo nivel ( los grupos )-s children
del segundo nivel incluido hasta el ultimo ( grupos y usuarios )
Agregar objetos
El agregar objetos a la base de datos LDAP se a de realizar mediante un fichero y la herramienta ldapadd
# ldapadd -x -D dn_admin -W -h ip_servidor -f archivo_ldif
ldapadd -x -D cn=Manager,dc=edt,dc=org -w secret -f /tmp/ldap/usuario_nuevo.ldif
La opción
-c
permite en el caso de añadir un elemento y falle pase al siguiente y no pare todo el proceso.
usuario_nuevo.ldif
dn: cn=toto,dc=pas,dc=net
objectClass: person
cn: toto
sn: toto
telephoneNumber: 9123456789
Modificar objetos existentes
El comando ldapmodify también se usa con un archivo ldif como argumento y sus parámetros de uso son los mismos que los del comando ldapadd.
# ldapmodify -D dn_admin -W -h ip_servidor -f archivo_ldif
ldapmodify -x -D cn=Manager,dc=edt,dc=org -w secret -f modificaciones.ldif
El archivo de modificación tiene su propia sintaxis guiando las acciones con changetype: <[modify|add|delete|modrdn]>
. Primero se añade el dn
del objeto a modificar seguido de la acción. El simbolo -
representa el cambio de acción en un mismo objeto y una linea en blanco la finalización de utilización de dicho objeto.
dn: cn=Pau Pou,ou=usuaris,dc=edt,dc=org
changetype: modify
replace: mail
mail: modme@example.com
-
replace: homePhone
homephone:111-222-333
-
delete: description
dn: cn=Anna Pou,ou=usuaris,dc=edt,dc=org
changetype: modify
add: description
description: nueva descripcion para Anna Pou
Eliminación de objeto
dn: cn=Anna Pou,ou=usuaris,dc=edt,dc=org
changetype: delete
Añadir objeto
dn: cn=pepe,dc=pas,dc=net
changetype: add
objectClass: person
cn: pepe
sn: pepe
telephoneNumber: 9123456789
Eliminación de objetos
ldapdelete -x -D cn=Manager,dc=edt,dc=org -w secret 'cn=Pau Pou,ou=usuaris,dc=edt,dc=org'
ldapdelete -x -D cn=Manager,dc=edt,dc=org -w secret -f modificaciones.ldif
Modificación de contraseñas
# ldappasswd -x -D dn_admin -W -h ip_servidor -s contraseña dn_usuario
ldappasswd -x -h 172.17.0.2 -D 'cn=user10,ou=usuaris,dc=edt,dc=org' -w jupiter -s user10
-w # antiguo password
-s -S # nuevo password -S interactivo
Cliente gráfico
Las aplicaciones compatibles LDAP integran un cliente que les permite realizar peticiones de directorio para su funcionamiento. Son muchas y de calidad variable las herramientas de este tipo. Podemos citar luma, gq y lat.
210.4 Configuración OpenLDAP
Los directorios LDAP utilizan la norma X500 y presentan características estructurales comunes.
Son jerárquicos y tienen un punto de origen que generalmente se denomina Root. Todo elemento del directorio se llama objeto; algunos elementos son estructurales y otros son totalmente informativos. Los elementos estructurales se llaman contenedores y son de distintos tipos, como por ejemplo organización, dominio o unidad organizativa.
Estructura
+----------------+
| dc=org |
+----------------+
|
+----------------+
Entidades | dc=edt |
+----------------+
| |
+-----+ +-------+
Unidades +----------------+ +------------------+
organizativas | | |
| ou=usuarios | | ou=maquinas |
+----------------+ +------------------+
Usuarios |
+---------------------+
+----------------+ +----------------+
| uid=pedro | | uid=anna |
| sn=lopez | | sn=gomez |
| ... | | ... |
+----------------+ +----------------+
ldap crea un directorio
/var/lib/ldap
y/etc/openldap/slapd.d
donde esta la configuración en formato.ldapd
estos directorios son del usuarioldap:ldap
y siempre a de ser así. si los modificamos como root tendremos que cambiarlo al usuario original al acabar los cambios.
La organitzación edt.org
contiene 4 entidades con diferentes atributos, este sería un ejemplo de estructura.
dn: dc=edt,dc=org
dc: edt
description: Escola del treball de Barcelona
objectClass: dcObject
objectClass: organization
o: edt.org
dn: ou=maquines,dc=edt,dc=org
ou: maquines
description: Container per a maquines linux
objectclass: organizationalunit
dn: ou=clients,dc=edt,dc=org
ou: clients
description: Container per a clients linux
objectclass: organizationalunit
dn: ou=productes,dc=edt,dc=org
ou: productes
description: Container per a productes linux
objectclass: organizationalunit
dn: ou=usuaris,dc=edt,dc=org
ou: usuaris
description: Container per usuaris del sistema linux
objectclass: organizationalunit
Usuarios edt.org
dn: cn=Pau,ou=usuaris,dc=edt,dc=org
objectclass: posixAccount
objectclass: inetOrgPerson
cn: Pau
mail: pau@edt.org
description: Watch out for this guy
Con esta estructura se obtendría un Distinguished Name dn: cn=Pau,ou=usuaris,dc=edt,dc=org
Configuración
El archivo de configuración de ldap lo encontramos en /etc/openldap/slapd.d
con el nombre slapd.conf
este archivo contendrá la descripción de la base de datos y el acceso.
configuración de la base de datos:
...
database mdb
suffix "dc=edt,dc=org"
rootdn "cn=Manager,dc=edt,dc=org"
rootpw secret
directory /var/lib/ldap
...
database
es el tipo de base de datos que queremossuffix
el nombre de la base de datosrootdn/rootpw
Usuario con privilegios virtual ( administrador )
La contraseña de rootpw
se puede añadir como (SHA1, MD5, crypt o texto sin encriptar).
[root@beta openldap]# slappasswd -s contraseña
{SSHA}oW6wu+yUpFnaB6tg+4cMWnAa8OmDXV62
Configuración de los permisos de acceso a la base de datos
....
# ACL for this database
access to *
by self write
by * read
...
Generar base de datos
# borrar configuración por defecto
rm -rf /var/lib/ldap/*
rm -rf /etc/openldap/slapd.d/*
slaptest -f slapd.conf # valida el archivo de configuracion
slaptest -f slapd.conf -u # enable dry-run mode
slaptest -f slapd.conf -F /etc/openldap/slapd.d/ # generar DB en el directorio indicado
slaptest -f slapd.conf -F /etc/openldap/slapd.d/ -u
chown -R ldap:ldap /etc/openldap/slapd.d
chown -R ldap:ldap /var/lib/ldap
Una vez generada la base de datos es bueno comprobar la configuración con slapcat
slapcat -l all.ldif # dump completo de la configuración base de datos
slapadd -l all.ldif # restauración
En este punto, el directorio es completamente funcional después de un reinicio del servicio, pero aún estará vacío. Ya solo falta llenarlo con los clientes LDAP.
Autentificación por LDAP
Configurar NSS
La autentificación solo será posible si la información de los usuarios está accesible vía NSS. La librería NSS, responsable de consultar al directorio, tiene que disponer de la información necesaria.
La configuración se encuentra en /etc/ldap.conf
proporcionado por el paquete libnss_ldap
SASL_NOCANON on
URI ldap://ldapserver
BASE dc=edt,dc=org
El archivo /etc/nsswitch
se debe configurar para hacer referencia a LDAP como fuente de información prioritaria.
passwd : ldap files
group: ldap files
shadow: ldap files
Para comprobar la configuración utilizamos getent
getent passwd
Configurar PAM
Según las necesidades, todos o parte de los servicios que usan PAM tienen que poder apoyarse en la autentificación LDAP.
Afortunadamente, las distribuciones Linux modernas facilitan la tarea concentrando en los archivos common-action para Debian o system-auth para Red Hat la configuración de todas las aplicaciones que comparten los mismos modos de autentificación.
authconfig --enableshadow --enablelocauthorize \
--enableldap \
--enableldapauth \
--ldapserver='ldapserver' \
--ldapbase='dc=edt,dc=org' \
--enablemkhomedir \
--updateall
Que genera un archivo pam como el siguiente
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth optional pam_mount.so
auth sufficient pam_unix.so try_first_pass nullok
auth sufficient pam_ldap.so try_first_pass
auth required pam_deny.so
account sufficient pam_unix.so
account sufficient pam_ldap.so
account required pam_deny.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password sufficient pam_ldap.so try_first_pass
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_mkhomedir.so
session optional pam_mount.so
session sufficient pam_unix.so
session sufficient pam_ldap.so