En este post, exploraremos cómo configurar un entorno de Active Directory en un servidor Ubuntu utilizando herramientas como Kerberos y Samba. Active Directory es una solución integral de Microsoft para la gestión de identidades y el control de acceso en redes empresariales. A través de esta guía, aprenderemos paso a paso cómo implementar un servidor Ubuntu como controlador de dominio, establecer la autenticación basada en Kerberos y configurar servicios de directorio mediante Samba.

Introducción

Se quiere configurar un servidor Linux (Ubuntu Server 20.04 LTS) para dar servicio a un conjunto de equipos clientes (Windows y Linux).

Aprovecharé que el escenario lo tenemos montado de las anteriores actividades de clase y restauraré las instantáneas para disponer de las máquinas limpias .

Preparación del entorno

1. El servidor Linux no tendrá entorno gráfico. Tendrá al menos las particiones: raiz, home y de intercambio.

Aquí podemos ver que no tengo instalado entorno gráfico , podemos ver que el servicio está activo, sin embargo, no se lanza ningún entorno . Además, si buscamos algún proceso con los nombres de escritorio más conocidos no nos lanza ningún resultado .

Aquí te muestro las particiones que tiene mi servidor Ubuntu (raíz , boot , home y swap):

2.El servidor debe estar preparado para que pueda administrarse de forma remota (a partir de este momento toda la gestión se hará remotamente desde otro equipo de la red).

Para administrarlo de forma remota utilizaré ssh, para ello lo instalamos en el servidor :

Una vez que se instale lo tendremos funcionando , no es necesario realizar ninguna configuración .

Si consultamos el estado del servicio podemos ver que ha tomado la configuración por defecto :

Para conectarnos remotamente necesitaremos saber la IP del equipo o el nombre :

En mi caso me conectaré desde la red externa a nuestro servidor (enp0s3) , previamente hemos configurado la red con netplan :

Y hemos aplicado los cambios :

Una vez conociendo estos datos nos conectaremos por ssh desde una máquina de nuestra red para seguir con los demás apartados, en mi caso utilizaré mi máquina host, para ello me he instalado el paquete openssh-client previamente:

3. Crea los usuarios y grupos siguientes

  • Grupos: profesores, alumnos, smr, asir. Creo los grupos :

  • Usuario a crear : profedesiree, profejose , proferaul , erik, manu, oliver, sandra, fabio y domi

Creo los usuarios :

Los he creado con directorio home y les he asignado la contraseña 1234:

  • Usuarios del grupo profesores: profedesiree, profejose y proferaul. Los añadimos :

Podemos comprobar que se han añadido con el siguiente comando :

  • Usuarios del grupo alumnos: erik, manu, oliver, sandra, fabio y domi.

Los añadimos :

Comprobamos que se han añadido :

  • Usuarios del grupo smr: profedesiree, profejose, proferaul, erik, manu y oliver.

Los añadimos:

Comprobamos que se han añadido :

  • Usuarios del grupo asir: sandra, fabio y domi.

Comprobamos que se han añadido :

4. Todos los usuarios serán usuarios Samba. Para ello deberemos tener instalado samba :

Para añadir un usuario samba debemos de introducir el siguiente comando y asignarle una contraseña :

Esto lo haremos con los 9 usuarios , una vez añadidos podemos utilizar este comando para listar los usuarios samba que tenemos :

Controlador de dominio samba

5. Crea y configura un controlador de dominio Samba en el Servidor.

Antes de comenzar con la instalación debemos de tener en cuenta una serie de datos :

Nombre del controlador de dominio de Active Directory: FJCD

  • Nombre DNS del dominio de Active Directory: javiercruces.local
  • Nombre del Reino Kerberos: javiercruces.local
  • Nombre NetBIOS del dominio: javiercruces
  • Dirección IP fija del servidor: 192.168.0.1
  • Rol del servidor: Domain Controller (DC)
  • Reenviador DNS:192.168.0.1

Una vez con estos datos claros comenzaremos con la instalación , lo primero será actualizar el sistema :

A continuación deberemos de cambiar el nombre de nuestro servidor para estar acorde con los datos que hemos seleccionado anteriormente, para ello yo he seleccionado mis iniciales , para ello editamos el fichero /etc/hostname :

Ahora será necesario que reiniciemos el equipo para que se apliquen los cambios , perderemos la conexión por ssh :

Retomamos el control remoto por ssh en unos minutos cuando haya reiniciado :

Como puedes observar nos hemos conectado usando el antiguo nombre que tenia nuestro servidor , esto es porque el archivo /etc/hosts, contiene una relación de direcciones IP con sus correspondientes nombres lógicos. Este archivo contenía una referencia al nombre antiguo del propio servidor, que cambiaremos para que haga referencia al nuevo nombre :

Una vez hemos aplicado estos dos cambios , antes de continuar solo nos quedara asegurarnos de que nuestro servidor tiene correctamente configurada la red . En nuestro escenario disponemos de dos tarjetas de red en nuestro servidor :

  • enp0s3 (Tarjeta externa , nos da acceso a internet)
  • enp0s8 (Tarjeta interna , es la que se comunica con nuestra red local)

Debido a esto la primera está configurada por DHCP, ya que no nos importa la configuración que se le asigne , sin embargo, la segunda está configurada estáticamente, ya que debemos de controlar la configuración de la misma para que tengamos control sobre la misma y posteriormente unir los equipos al dominio .

Una vez aclarado esto , al principio del documento indico como se configuraran las interfaces , aquí dejo un pantallazo para recordar las direcciones :

Ahora necesitaremos disponer de unos paquetes que deberán de estar instalados antes de comenzar ,estos son :

  • samba: servidor de archivos, impresión y autenticación para SMB/CIFS. smbclient: clientes de línea de comandos para SMB/CIFS.
  • krb5-config: Archivos de configuración para Kerberos Version 5.
  • winbind: Servicio para resolver información sobre usuarios y grupos de servidores Windows NT.

Podremos hacer la instalación de estos cuatro paquetes con un simple comando :

Kerberos, nos preguntará por el reino (nombre de dominio ) durante la instalación de los paquetes, en nuestro caso será javiercruces.local :

Aquí introduciremos el nombre de nuestro equipo servidor :

Aquí volveremos a introducir el nombre de nuestro servidor :

Después de esto, la instalación continuará un poco más, pero sin necesitar que aportemos más información:

Ahora configuraremos samba , pero antes de hacerlo le cambiaremos el nombre al archivo de configuración smb.conf para que no lo use mientras que lo configuramos y así además tendremos una copia del archivo original :

Usaremos el comando samba-tool domain provision, para que sea el propio comando sea el que nos solicite los valores que necesite y, cuando sea posible, nos sugiera sus valores predeterminados. Así, si estos coinciden con los que nosotros esperamos, será muy probable que los pasos anteriores hayan sido los correctos:

Como puedes observar es muy intuitivo hacerlo, ya que salvo la IP de forwarder y la contraseña de administrador hemos elegido las respuestas que el mismo comando nos ofrece . Esta debe cumplir unos requisitos de complejidad mínimos :

  • 8 caracteres como mínimo
  • 1 mayúscula
  • 1 numero o símbolo

Con esto, además de configurarse Samba , se ha generado un archivo de configuración para Kerberos en la ruta /var/lib/samba/private/krb5.conf. Asi que lo copiaremos a /etc :

Lo siguiente será configurar la resolución de nombres, para ello comenzaremos deteniendo los servicios implicados :

También quitaremos que se inicien automáticamente al reiniciar el equipo :

A continuación, nos aseguraremos de que el servicio samba-ad-dc se podrá iniciar sin dificultades, evitando cualquier enmascaramiento que pueda existir:

Después, eliminamos el archivo resolv.conf que, en realidad, será un enlace a stub-resolv.conf. Así que lo eliminamos y creamos uno nuevo para sustiruirlo:

Ahora introducimos los valores adecuados en función de nuestro dominio , para mi caso :

Guardamos los cambios y salimos del fichero.

Iniciaremos el servicio de samba-ad-dc y lo habilitaremos para que se inicie al reiniciar el equipo :

Comprobar la instalación

Si hemos conseguido llegar hasta aquí , tenemos todas las papeletas para que nuestra instalación haya sido correcta . Pero nunca está de más hacer unas comprobaciones

Consultar el nivel del dominio y crear un nuevo usuario

Para saber nuestro nivel de dominio simplemente introducimos este comando :

Al hacerlo, comprobamos que el nivel del dominio, y del bosque donde se encuentra, equivale a una instalación Windows Server 2008 R2

Probaremos a crear una nueva cuenta de usuario en el dominio con el comando(deberemos de tener en cuenta la política de contraseñas):

Confirmar que el servidor DNS funciona de forma adecuada

Lo primero será comprobar el servicio LDAP sobre el protocolo TCP, para lo que escribiremos la siguiente orden:

Si tenemos una respuesta parecida a esa, todo funciona como debe.

A continuación, comprobaremos el registro SRV para el protocolo Kerberos sobre UDP, para lo que usamos la siguiente orden:

La respuesta debe ser parecida a la anterior, si es así registro SRV es correcto.

Por último, comprobamos la resolución del nombre de nuestro servidor:

Comprobar el funcionamiento de Kerberos

Para comprobar el funcionamiento podemos, por ejemplo, usar el comando smbclient para comprobar los servicios que puede obtener un determinado usuario. Para ello utilizaremos el siguiente comando :

Si la autenticación es correcta , ya sabremos que Kerberos está haciendo su trabajo . Si queremos, incluso podemos iniciar sesión en el servidor empleando la cuenta de administrador. Para lograrlo, usaremos una sintaxis como esta:

Ya hemos verificado todo así que podemos empezar a unir clientes a nuestro dominio .

Unir clientes al dominio

6. Integra al menos un cliente con Windows en el dominio Samba.

Cliente Windows

Lo primero que haremos será configurar la red de nuestro cliente :

  • IP : 192.168.0.10
  • Mascará de subred : /24
  • Puerta de enlace 192.168.0.1
  • DNS 192.168.0.1

Ambas tarjetas (Interna del servidor y la de Windows cliente ) deberán de estar en red interna para que se comuniquen .

Una vez configurada la tarjeta le haremos un ping al servidor para comprobar la conectividad:

Ahora accedemos a panel de control → sistema y seguridad → sistema → configuración avanzada del sistema → nombre de equipo → id de red . Seleccionamos la primera opción para unirnos al dominio

Seleccionaremos la primera opción, ya que nuestra red tiene un dominio :

Ahora deberemos de introducir los datos del usuario administrador y el nombre de nuestro dominio :

El usuario administrador que se crea por defecto en samba se llama administrator

Una vez introducido los datos nos preguntará si queremos crear una cuenta de dominio en este equipo , yo seleccionare que no :

Y para que se apliquen los cambios deberemos de reiniciar :

Una vez reiniciado podremos iniciar sesión con los diferentes usuarios de nuestro dominio :

Podemos ver que podemos iniciar sesión en el equipo con las cuentas de nuestro dominio:

Cliente Linux

Lo primero será configurar la red, para ello le he asignado la dirección IP 192.168.0.2

Ahora deberemos añadir a nuestro servidor en el fichero hosts, una línea en la que ira la dirección IP de nuestro servidor seguido del nombre de este y el nombre completo del dominio de nuestro servidor :

Para comprobar este cambio que hemos realizado le haremos un ping al servidor usando su nombre :

Ahora actualizaremos el equipo para poder descargar las versiones más recientes desde los repositorios :

Para tener internet en el cliente he configurado previamente NAT en el servidor .

Una vez actualizado el sistema instalaremos los siguientes paquetes :

  • sssd (System Security Services Daemon): Administra los mecanismos de autenticación y el acceso a directorios remotos. Sustituye al clásico Winbind aportando más velocidad y estabilidad.
  • heimdal-clients: Se trata de una implementación libre de Kerberos 5 creada con la intención de ser compatible con el protocolo Kerberos implementado por el MIT.
  • msktutil: La utilidad que obtiene y administra los keytabs de Kerberos en un entorno de Microsoft Active Directory.

Podemos hacerlo con 1 comando :

Mientras instalamos nos solicitara el nombre de nuestro servidor de active directory asi que lo introducimos :

Ahora nos preguntará el nombre del equipo que actúa como servidor en nuestro caso es :

Por último nos preguntará por el servidor administrativo que en nuestro caso es el mismo:

Una vez hecho esto, la instalación continuará sin que tengamos que introducir más datos.

Ahora vamos a añadir en Kerberos unos datos adicionales para asegurarnos que se comporte correctamente. Comenzaremos por cambiar el nombre del archivo de configuración, para poder volver a los parámetros originales si fuese preciso:

Ahora utilizaremos nano para editar la configuración del archivo , este estará vacío así que añadiremos lo siguiente :

Una vez rellenado con los datos de nuestro dominio, guardamos el archivos y comprobaremos si podemos iniciarnos sesión en el dominio :

Si la salida no nos ofrece ningún tipo de error, es porque el proceso de autenticación ha funcionado correctamente.

Procederemos a unirnos al dominio, para ello utilizaremos el siguiente comando :

Este comando deberemos de rellenarlo conforme a los datos de nuestro dominio , en el caso de que no nos salga ninguna salida , nos habremos unido al dominio .

Para completar la tarea, eliminaremos los tickets de autorización de kerberos que activamos al ejecutar kinit. Para lograrlo, basta con utilizar el comando kdestroy.

Compartir carpetas

7. Se necesitan carpetas personales en el servidor para cada usuario. También habrá una carpeta para cada grupo, a la que solo podrán acceder y escribir los miembros de cada grupo.

Vamos a crear los directorios en la partición raíz para cada usuario y uno para cada grupo. Estos los crearé con el nombre del grupo o usuario:

Tenemos que tener en cuenta que los usuarios samba que hemos generado al principio del documento se han eliminado al instalar el dominio y deberemos de producirlos nuevamente.

Vamos a compartir estas carpetas a través de samba, para ello editamos el fichero /etc/samba/smb.conf :

Para indicar que pueda acceder un grupo deberemos de poner una @ delante dele nombre del grupo :

Solo nos quedaría asignar correctamente los permisos locales adecuados para nuestros recursos y cambiar los propietarios de las carpetas para que los usuarios puedan escribir en ellas :

Esto sería lo correcto, pero si le asignamos los permisos 775 no podremos escribir en la carpeta, así que le asignaremos todos los permisos :

Ahora repetiremos esto con todos los directorios , primero le daré los permisos:

Y por último cambiaremos los propietarios de las carpetas y haremos a cada usuario o grupo sus respectivos dueños :

Vamos a asegurarnos de que hemos aplicado correctamente estos cambios :

Vamos a comprobar que podemos acceder a los recursos compartidos desde el usuario oliver , accederemos a la carpeta Oliver y a crear un directorio dentro :

8. Desde Windows acceder a estas carpetas a través de unidades de red.

Desde el explorador de archivos podremos ver todos los recursos compartidos en la red .Ahora vamos a crear unidades de red, así que por ejemplo vamos a añadir la carpeta Oliver al usuario Oliver como unidad de red, para esto , hacemos clic derecho en la carpeta > conectar a unidad de red :

Y seleccionaremos una letra para asignarle a la unidad de red :

Ahora esta unidad nos aparecerá en este equipo :

Perfiles móviles

9. Definir perfiles móviles en el servidor Linux mediante Samba, de forma que los usuarios se puedan autentificar en diferentes máquinas Windows, manteniendo su configuración. Para realizar esto vamos a instalarlos RSAT (Remote Server Administration Tools) que nos permitirá administrar nuestro controlador de dominio samba de forma idéntica a windows server .

Para añadirlas buscaremos en la búsqueda de Windows *Añadir características opcionales una vez aquí le daremos a añadir característica :

Una vez aquí buscaremos las siguientes características con RSAT y las instalaremos :

Una vez instaladas se nos creará una aplicación similar a la de un Windows server llamada herramientas administrativas :

Se nos abrirá una carpeta con las herramientas de administración :

Y buscaremos administración de usuarios y equipos de active directory o escribimos en ejecutar dsa.msc , esto lo haremos con el usuario administrador de nuestro dominio para poder acceder a esta:

Antes de crear nuestro usuario móvil crearemos un recurso de red al igual que hemos hecho anteriormente llamado perfiles y le daremos permisos al grupo móviles para que estos puedan escribir en ellos :

Para que nuestro usuario pueda escribir en este directorio lo añadiremos al grupo :

Ahora nos vamos a la configuración de nuestro usuario y le cambiamos la ruta del perfil . Pondremos la ruta de nuestra carpeta compartida perfiles seguida de %username% :

Guardamos y ya tendríamos hecho nuestro perfil móvil creado .

Vamos a demostrar el funcionamiento del perfil móvil , para ello le he cambiado el fondo y he creado dos carpetas :

Ahora vamos a cerrar sesión e iniciarla en el Windows de la derecha :

Vemos que se ha realizado correctamente el perfil móvil .

NFS

10. Mediante NFS, se compartirán en el servidor las carpetas: proyectos, documentación, programas_y_drivers. De la primera solo se podrá leer; en las dos últimas también se podrá escribir. Los equipos Linux montarán las carpetas automáticamente en el arranque.

Lo primero que haremos será instalarnos los siguientes paquetes :

Ahora crearemos en la raíz los directorios que vamos a compartir :

Y le cambiaremos el propietario y los permisos a estos directorios :

Después de esto, debemos editar el archivo /etc/exports. Este es el archivo donde se indican a NFS las carpetas que vamos a compartir . La primera será solo de lectura y las dos últimas se podrán escribir :

Para poder acceder a estos recursos en el servidor vamos a instalarlos los siguientes paquetes :

Ahora vamos a crear los directorios donde montaremos nuestras carpetas :

Para montarlas manualmente en Linux haremos el siguiente comando :

Vamos a comprobar que en proyectos no podremos escribir :

Mientras que en las otras dos si podremos escribir :

Si queremos acceder a estos recursos en Windows –> \192.168.0.1\documentacion

\192.168.0.1\proyectos (directorio de solo lectura)

\192.168.0.1\programas_y_drivers

Para poder visualizarlos será necesario tener instalados las siguientes características en Windows (Podemos acceder a este programa a través del buscador de Windows escribiendo características de Windows)

Para finalizar con este punto vamos a configurar que los equipos Linux monten automáticamente al arrancar los directorios . Editaremos el fichero /etc/fstab añadiendo las siguientes líneas :

Una vez hecho esto reiniciamos y veremos que se nos habrán montado automáticamente:

Cuotas

11. La carpeta /home del servidor tendrá un sistema de cuotas para evitar la saturación con archivos de los usuarios (100 MB por usuario).

Lo primero que haremos será instalar los paquetes para implementar cuotas :

Ahora permitiremos las cuotas en la partición /home añadiendo esto al fstab de nuestro servidor :

Remontamos la partición home para que se apliquen estos cambios :

Y aplicamos cuotas en la partición /home

Comprobaremos que en la raíz de la partición se nos ha creado dos archivos (aquota.group y aquota.user):

Ahora le aplicaremos la cuota de 100Mb a oliver usando edquota :

Ahora usaremos una herramienta la cual es gawk, el cual nos permitirá concatenándolo con este comando, aplicarle la cuota que le acabamos de crear a Oliver a todos nuestros usuarios :

La orden que acabamos de lanzar ha extraído una lista de todos los usuarios y ha aplicado la cuota de Oliver a todos usuarios con un UID mayor a 499 .

Ahora revisaremos las cuotas para ver como han quedado :

Para comprobar que funciona vamos a agotar la cuota del usuario proferaul , para ello crearemos un archivo de 30 MB :

Ahora lo moveremos al directorio home de él y le haremos propietario del archivo :

Vemos que se actualiza el espacio usado en el directorio del usuario :

Webmin

12. Instala Webmin en el servidor para tener la posibilidad de gestionarlo gráficamente desde un cliente. Demuestra alguna de sus funcionalidades.

Webmin es un panel de control web moderno que le permite administrar su servidor Linux a través de una interfaz basada en navegador.

Necesitaremos instalar apache para poder instalar webmin en nuestro servidor :

Ahora deberemos de añadir el repositorio de webmin , así que editaremos el sources.list y lo añadiremos :

Guardamos el archivo y haremos un apt update para actualizar los repositorios , nos saldrá un error advirtiéndonos de que el repositorio no es fiable .

Así que ahora descargaremos la clave PGP de Webmin y la añadiremos a nuestro sistema :

Volvemos a hacer un apt update y veremos que ahora el repositorio es fiable

A continuación descargaremos el paquete webmin :

Las últimas líneas de la instalación nos dará los datos para acceder vía web a este servicio :

Así que en un cliente vamos al navegador y accedemos a esta url :

Nos dirá que la conexión no es privada , para saltarnos esta advertencia Configuración avanzada > acceder

Tendremos un portal donde deberemos entrar con un usuario administrador de nuestro servidor :

Lo primero que veremos en la interfaz web será un monitor de recursos, así como datos de nuestro equipo :

Podremos ver un histórico del monitor de recursos, el cual nos mostrara las horas y el porcentaje de uso de nuestro hardware, así como información del sistema :

Tenemos más apartados como el de logins recientes o interfaces de red , el cual nos dará información de quien se ha conectado y las configuraciones de las mismas respectivamente :

Para finalizar con el panel tendremos una última ventana la cual nos dirá el uso del disco y particiones :

Una vez que hemos echado un vistazo a la página principal vamos a aprovechar una funcionalidad que tiene que nos permite ver los directorios compartidos por nfs , para acceder aquí vamos a networking > NFS exports :

Vamos, que además nos permite editar los directorios compartidos actuales, así como añadir o eliminar estos .

Además, esta herramienta nos permite configurar un Firewall con iptables , lo cual hoy día es de vital importancia disponer de seguridad en nuestra red :

Incluso dispone de una terminal web para que podamos administrar el servidor desde un cliente , para acceder a esta desplegamos el menú y pulsamos sobre el símbolo de terminal o pulsamos Alt + K :

Vemos que usara ssh con el usuario conectado en la aplicación , en mi caso javiercruces :

Webmin incluye muchas más funciones de administración que nos ayuda a trabajar con el servidor de forma gráfica para hacer más ameno la administración del mismo ,desde actualizar paquetes hasta configurar un Firewall . Además, usa https, por lo que nuestro tráfico viajara cifrado , lo que nos permitiría configurar nat para poder acceder desde un dispositivo que este fuera de nuestra red , sin que un snifer pueda descifrar nuestro trafico fácilmente. Es aconsejable que cambiemos el certificado auto-firmado que usa webmin por uno propio que podemos generar con Let`s encrypt, por ejemplo .

CUPS

13. Habrá un servidor de impresión CUPS, que se administrará desde un cliente Ubuntu. Lo primero que deberemos de hacer es instalar en el servidor cups :

Una vez hecho esto vamos a configurar el servicio para permitir ser administrado desde nuestro cliente Ubuntu , para ello editamos el siguiente fichero :

Ahora añadiremos los siguientes parámetros :

  • Listen 192.168.0.1:631
  • allow 192.168.0.0/24

Para permitir que nuestro cliente Ubuntu sea capaz de administrar el servicio

Ahora solo nos quedaría reiniciar el servicio :

Nos desplazaremos al cliente y en el navegador introduciremos la ip de nuestro servidor seguido de dos puntos y 631 :

Con esto hemos comprobado que el cliente puede administrar cups .

14. Configura una impresora en red para todos los usuarios, con límites de páginas diarias para todos los usuarios.

Para compartir nuestra impresora en red , accedemos al panel web y en el apartado de administración marcamos compartir impresoras conectadas a este sistema :

Antes de establecer los límites vamos a habilitar que el servicio registre el nombre de los usuarios al mandar archivos , para ello en el fichero cupsd.conf cambiamos este valor de default a none :

Ahora reiniciaremos el servicio :

Para establecer un límite diario para cada usuarios de 20 páginas por ejemplo , aplicaríamos el siguiente comando para nuestra impresora .

Una vez aplicado este comando los usuarios solo podrán imprimir el número indicado de páginas ,cuando supere el límite los trabajos se mandaran a cups , pero este los desechara de la cola y no los imprimirá :

Es decir, el trabajo 21 en este ejemplo no se creará hasta qué pasen 24 horas .

Bibliografía