GNU/Linux en entornos Empresariales

CiberSeguridad 21 de ago. de 2025

Muchas empresas seguramente dejarán fuera de su parque informático a los equipos de trabajadores que usan GNU/Linux alegando que no pueden incluirlos como equipos de trabajo por que no pueden gestionar el mismo nivel de seguridad que controlan con equipos que usan Windows.

Pues eso ya no es excusa. Con el siguiente manual, cualquier PC de trabajo con Linux de un empleado puede incorporarse a la red de una empresa y cumplir las mismas políticas des seguridad que use un windows al conectarse.

Vamos a dejar documentado el procedimiento para integrar equipos con Debian GNU/Linux en un entorno empresarial que utiliza Microsoft Entra ID (antes Azure AD).

Es totalmente posible gracias a nuevas herramientas que permiten autenticación, inscripción en Intune y cumplimiento de políticas de seguridad.

Opciones para la integración:

1. Himmelblau

Una suite de interoperabilidad que permite:

  • Autenticación de usuarios Linux con Entra ID mediante módulos PAM y NSS
  • Inscripción de dispositivos en Intune
  • Aplicación de políticas de cumplimiento

Ir al repositorio oficial de Himmelblau

2. Microsoft Entra SSO para Linux

Microsoft ha lanzado soporte oficial para inicio de sesión único (SSO) en Linux, incluyendo Debian.

Características:

  • Registro del dispositivo en Entra ID
  • SSO para apps como Azure CLI, Microsoft Edge, Teams PWA
  • Compatibilidad con políticas de acceso condicional
  • Integración con Intune para cumplimiento de dispositivos

Pasos básicos para Debian:

# Instalar dependencias
sudo apt update
sudo apt -y install libpam-oauth liboauth-dev

# Registrar el dispositivo en Entra ID
curl -sL https://aka.ms/entra-linux-register | sudo bash

# Configurar PAM para SSO
sudo vi /etc/pam.d/common-auth
# Añadir esta línea:
auth sufficient pam_entraid.so

# Reiniciar los servicios y comprobar
sudo systemctl restart sssd
su - <tu_usuario_entraid>

Revisa la documentación oficial de Microsoft

3. Extensión de navegador Linux Entra SSO

Si necesitas acceso web con políticas de acceso condicional, puedes usar esta extensión:

  • Compatible con Firefox, Chrome y Thunderbird
  • Requiere instalación de componentes host en Debian

Instalación:

# Instalar dependencias python
sudo apt update
sudo apt-get -y install python3-gi python3-pydbus

# Clonar repo y generar extension SSO
git clone https://github.com/siemens/linux-entra-sso.git
cd linux-entra-sso
make local-install-firefox

Instalar y usar la extensión que hemos creado, tendrá de nombre: linux_entra_sso-<version>.xpi

Si preferís usar el paquete Debian con todo listo descargarlo de linux-entra-sso_1.4.0.deb


Más detalles en repositorio de Siemens

Requisitos importantes

  • Tener un tenant de Microsoft Entra ID
  • Privilegios de root en los equipos Linux
  • Acceso a Intune si se desea aplicar políticas de cumplimiento

Script para integrar múltiples equipos Debian con Microsoft Entra ID

Este script realiza:

  • Instalación de dependencias
  • Registro del dispositivo en Entra ID
  • Configuración de SSO
  • Verificación de estado
#!/bin/bash

# Script de integración con Microsoft Entra ID para Debian GNU/Linux
# Ejecutar como root o con sudo

echo "Instalando dependencias..."
apt update
apt -y install curl gpg sudo lsb-release

echo "Importando clave de Microsoft..."
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
rm microsoft.gpg

echo "Añadiendo repositorio de Microsoft..."
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/ubuntu/$(lsb_release -rs)/prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/microsoft.list

echo "Actualizando repositorios..."
apt update

echo "Instalando Microsoft Identity Broker..."
apt install -y microsoft-identity-broker

echo "Reiniciando servicios..."
systemctl restart sssd || echo "SSSD no está instalado, omitiendo..."

echo "Integración completada. Verifica con el comando: 'entra-id-status' o revisa logs en /var/log"

Integrar Teams y Outlook en Debian con Entra ID

Requisitos previos

  • Tener instalado Microsoft Edge para Linux
  • Dispositivo registrado en Entra ID
  • Acceso a Microsoft Intune para aplicar políticas de acceso condicional

Teams (PWA para Linux)

  1. Accede a Teams Web desde Edge:
    • URL: https://teams.microsoft.com
    • Inicia sesión con tu cuenta Entra ID
    • Edge aplicará las políticas de acceso condicional automáticamente
  2. Instala como PWA:
    • En Edge, haz clic en “…” → “Apps” → “Instalar esta página como aplicación”
    • Esto crea un acceso directo tipo escritorio

Instalar Microsoft Edge:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list
apt update
apt -y install microsoft-edge-stable

Outlook (Web)

Outlook no tiene cliente nativo para Linux, pero podemos usar la versión web con SSO:

  1. Accede a https://outlook.office.com desde Edge
  2. El inicio de sesión se gestiona vía Entra ID con SSO si el dispositivo está registrado
  3. Puedes instalarlo como PWA igual que Teams

Si en la empresa se gestionan equipos de forma automatizada mediante Ansible, os dejo un playbook que os permitiría hacerlo en los equipos.

Playbook de Ansible: entra-id-linux.yml

---
- name: Integrar equipos Debian con Microsoft Entra ID
  hosts: linux_debian
  become: yes
  vars:
    microsoft_gpg_url: https://packages.microsoft.com/keys/microsoft.asc
    edge_repo: "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main"

  tasks:

    - name: Instalar dependencias básicas
      apt:
        name:
          - curl
          - gpg
          - sudo
          - lsb-release
        state: present
        update_cache: yes

    - name: Descargar clave GPG de Microsoft
      get_url:
        url: "{{ microsoft_gpg_url }}"
        dest: /tmp/microsoft.asc

    - name: Convertir clave GPG
      command: gpg --dearmor -o /usr/share/keyrings/microsoft.gpg /tmp/microsoft.asc
      args:
        creates: /usr/share/keyrings/microsoft.gpg

    - name: Añadir repositorio de Microsoft Edge
      copy:
        dest: /etc/apt/sources.list.d/microsoft-edge.list
        content: "{{ edge_repo }}"

    - name: Actualizar repositorios
      apt:
        update_cache: yes

    - name: Instalar Microsoft Identity Broker
      apt:
        name: microsoft-identity-broker
        state: present

    - name: Reiniciar servicio SSSD si existe
      service:
        name: sssd
        state: restarted
      ignore_errors: yes

    - name: Verificar estado de integración
      shell: entra-id-status
      register: entra_status
      ignore_errors: yes

    - name: Mostrar resultado
      debug:
        msg: "Estado de Entra ID: {{ entra_status.stdout }}"

Cómo usarlo

  1. Crea un archivo llamado entra-id-linux.yml con el contenido del playbook anterior.

Ejecuta el playbook:

ansible-playbook -i inventory.ini entra-id-linux.yml

Tendrás que tener "registrados" los equipos/hosts en el inventario de máquinas. Dentro del archivo inventory.ini:

[linux_debian]
portatil1 ansible_host=192.168.1.10
sobremesa2 ansible_host=192.168.1.11

Revisión de los equipos

Podemos incluso recoger informacion importante de cada PC con Debian GNU/Linux integrado en Microsoft Entra ID, y tener una especie de dashboard local en formato HTML por máquina.
E dashboard puede incluir:

  • Estado de registro en Entra ID
  • Usuario actual autenticado
  • Estado del servicio SSSD
  • Último acceso
  • Versión de Edge instalada
  • Estado de políticas de cumplimiento (si se usa Intune)

Playbook: entra-dashboard.yml

---
- name: Generar dashboard local para cada equipo Debian
  hosts: linux_debian
  become: yes
  vars:
    dashboard_path: /var/log/entra-dashboard.html

  tasks:

    - name: Obtener usuario actual
      command: whoami
      register: current_user

    - name: Verificar estado de Entra ID
      shell: entra-id-status
      register: entra_status
      ignore_errors: yes

    - name: Verificar el estado del servicio SSSD
      service_facts:

    - name: Obtener la versión de Microsoft Edge
      shell: microsoft-edge-stable --version
      register: edge_version
      ignore_errors: yes

    - name: Obtener el último acceso del usuario
      shell: lastlog -u "{{ current_user.stdout }}"
      register: last_access
      ignore_errors: yes

    - name: Crear el dashboard en formato HTML simple
      copy:
        dest: "{{ dashboard_path }}"
        content: |
          <html>
          <head><title>Dashboard Entra ID - {{ inventory_hostname }}</title></head>
          <body>
            <h2>Estado del equipo: {{ inventory_hostname }}</h2>
            <ul>
              <li><strong>Usuario actual:</strong> {{ current_user.stdout }}</li>
              <li><strong>Estado Entra ID:</strong> {{ entra_status.stdout | default('No disponible') }}</li>
              <li><strong>SSSD activo:</strong> {{ 'sssd' in ansible_facts.services and ansible_facts.services['sssd'].state == 'running' }}</li>
              <li><strong>Versión de Edge:</strong> {{ edge_version.stdout | default('No instalado') }}</li>
              <li><strong>Último acceso:</strong> {{ last_access.stdout | default('No disponible') }}</li>
            </ul>
          </body>
          </html>

    - name: Mostrar ruta del dashboard generado
      debug:
        msg: "Dashboard generado en {{ dashboard_path }}"

Cómo usarlo

  1. Guarda este playbook con el nombre de entra-dashboard.yml
  2. Revisa tu inventario de equipos/hosts (inventory.ini)

Ejecuta el playbook:

ansible-playbook -i inventory.ini entra-dashboard.yml

Cada equipo creará su propio archivo HTML en la ruta /var/log/entra-dashboard.html, esta página web la puedes consultar localmente o podrías recogerlos todo mediante un playbook centralizado, para tener una vision total del parque informático de los equipos Debian.

Podemos incluso tener un playbook que nos realice una integración completa para equipos Debian.
Cubriría los cuatro puntos clave de un entorno híbrido con Microsoft Entra ID.

Este playbook permite a los equipos cliente Debian integrarse con los servicios Microsoft 365, Intune y Entra ID.

Playbook: entra-integration.yml

---
- name: Integración completa de Debian con Microsoft Entra ID y M365
  hosts: linux_debian
  become: yes

  vars:
    edge_download_url: "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/"
    teams_pwa_url: "https://teams.microsoft.com"
    pwa_shortcut_path: "/usr/share/applications/teams-pwa.desktop"
    pam_config_path: "/etc/pam.d/common-auth"

  tasks:

    ### 1: Instalación de Microsoft Edge
    - name: Añadir repositorio de Microsoft Edge
      apt_repository:
        repo: "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
        state: present
        filename: "microsoft-edge"

    - name: Añadir clave GPG de Microsoft
      apt_key:
        url: "https://packages.microsoft.com/keys/microsoft.asc"
        state: present

    - name: Instalar Microsoft Edge
      apt:
        name: microsoft-edge-stable
        state: present
        update_cache: yes

    ### 2: Configurar Teams como PWA
    - name: Crear acceso directo para Teams PWA
      copy:
        dest: "{{ pwa_shortcut_path }}"
        content: |
          [Desktop Entry]
          Name=Microsoft Teams (PWA)
          Exec=microsoft-edge-stable --app={{ teams_pwa_url }}
          Icon=teams
          Type=Application
          Categories=Network;Office;

    ### 3: Registro automático en Intune (si es aplicable)
    - name: Ejecutar script de enrolado en Intune
      shell: |
        /opt/microsoft/mdm/enroll.sh --auto --compliance
      register: intune_enroll
      ignore_errors: yes

    - name: Mostrar resultado de enrolamiento
      debug:
        msg: "{{ intune_enroll.stdout | default('No disponible o no requerido') }}"

    ### 4: Configurar PAM para SSO con Entra ID
    - name: Configurar PAM para SSSD y Entra ID
      lineinfile:
        path: "{{ pam_config_path }}"
        insertafter: "pam_unix.so"
        line: "auth sufficient pam_sss.so use_first_pass"

    ### 5: Verificación con curl de acceso condicional
    - name: Verificar acceso condicional con curl
      shell: |
        curl -s -o /dev/null -w "%{http_code}" https://login.microsoftonline.com/common/oauth2/authorize
      register: conditional_access

    - name: Mostrar estado de acceso condicional
      debug:
        msg: "Código HTTP: {{ conditional_access.stdout }} (200 = OK, 403 = bloqueado por política)"

Recomendaciones adicionales

  • Para el enrolamiento en Intune, asegúrate de tener instalado el agente MDM de Microsoft en /opt/microsoft/mdm/
  • El acceso condicional puede depender de políticas configuradas en Entra ID o Intune, como ubicación, dispositivo o estado de cumplimiento
  • La configuración PAM asume que se tiene SSSD configurado con Entra ID
NOTA: El agente MDM para Linux que se usa en entornos Microsoft generalmente es parte de Microsoft Defender for Endpoint (MDE), que incluye capacidades de gestión y cumplimiento compatibles con Intune. Aunque no hay un "agente MDM" independiente para Linux como en Windows, el enrolamiento en Intune se realiza a través del script de incorporación de MDE y la configuración del dispositivo como compliant.

Instalación del agente MDE en Debian/Ubuntu

Requisitos iniciales

Instalar las dependencias necesarias:

sudo apt-get update
sudo apt-get -y install curl gpg apt-transport-https libplist-utils ntp

Añadir el repositorio de Microsoft para Debian

curl -o microsoft.list https://packages.microsoft.com/config/ubuntu/22.04/prod.list
sudo mv microsoft.list /etc/apt/sources.list.d/microsoft-prod.list
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/

Instalar el agente MDE

sudo apt-get update
sudo apt-get install mdatp

Activar el agente (script de onboarding)

Descarga el archivo MicrosoftDefenderATPOnboardingLinuxServer.py desde el portal de seguridad de Microsoft (security.microsoft.com) y ejecútalo:

python3 MicrosoftDefenderATPOnboardingLinuxServer.py

Esto conectará el equipo al portal de seguridad y lo habilitará para políticas de cumplimiento vía Intune.

Validaciones tras la instalación

Revisar el estado:

mdatp health

Este comando devuelve un resumen del estado del agente, entre los datos incluye:

  • Estado de protección en tiempo real
  • Ultima actualización de definiciones
  • Conectividad del servicio
  • Estado de incorporación (lo que se denomina "onboarding")

Revisa que el estado aparezca como OK ó Healthy

Actualizar las definiciones:

mdatp definitions update

Este comando fuerza la actualización de la "definición de amenazas".
La fecha la puedes comprobar con: mdatp threat definitions version

Verificar la conectividad:

mdatp connectivity test

Este comando verifica si el agente del cliente se puede comunicar con los endpoints de Microsoft Defender, nos sirve para detectar si hay algun error en la parte del firewall o del proxy.

Comprobar el dispositivo en el Portal

Vete a security.microsoft.comDispositivos → busca el nombre del equipo.
Tiene que aparecer como "Activo" y "Compliant".

Con toda esto tendríamos los equipos Debian GNU/Linux preparados para cumplir la politica de uso dentro de una red empresarial en la que se utilice Microsoft Entra ID (Azure AD)

Equipos en modo Teletrabajo

Seguramente querramos configurar los equipos Debian para que se puedan conectar a los servicios de la oficina mediante una VPN.
Por ejemplo si la empresa usar la VPN de F5 BIG-IP APM.
La configuración para Debian es posible aunque requiere algunos pasos específicos, veamos como hacerlo para que los usuarios linuxeros y debianitas puedan teletrabajar sin ningún tipo de problema.

Requisitos previos

Antes de comenzar, tenemos que comprobar:

  • Acceso al archivo de instalación del cliente f5fpc (CLI de F5 para Linux)
  • Conecer el servidor F5 BIG-IP APM que está configurado para acceso VPN
  • Tener credenciales válidas y permiso de conexión para el usuarios
  • Permisos de root en los equipos Debian

Pasos para instalar y configurar la VPN F5 en Debian

1. Obtener el cliente f5fpc

Este cliente no se descarga directamente desde F5.
El administrador del sistema debe extraerlo desde el servidor BIG-IP APM y distribuirlo a los usuarios que lo vayan a usar o instalar en los equipos.

Es posible descargar el archivo de instalación debe obtenerse desde el servidor APM configurado para la empresa/organización, es accesible desde el portal VPN cuando accedes desde el navegador, deberás logarte con credenciales de un administrador.

Para ver en detalle como descargar de tu empresa el cliente, revisa esta página de F5.

Truco:
Si desde un navegador accedes a tu portal VPN desde tu equipo Debian, tras logarte con tu usuario la VPN intentará realizar una verificación de cumplimiento del equipo, indicale que si quieres realizarla, dará un error indicando que no tienes instalado el software para realizar la "inspección".
Indica que sí quieres instalarlo y te dejará descargar el paquete linux_f5epi.x86_64.deb

Ahora simplemente en su navegador revisa la URL, modifica el nombre del fichero en la URL y usa esa nueva URL para descargar fichero de conexión a tu VPN de F5:

# Ejemplo **no real** de URL de descarga de f5epi
vpn.empresa.com/public/download/linux_f5epi.x86_64.deb

# Cambia f5epi por f5cli en la URL:
vpn.empresa.com/public/download/linux_f5cli.x86_64.deb

Para tu equipo Debian al final deberás de tener descargados los siguientes 3 ficheros:

  • linux_f5cli.x86_64.deb
  • linux_f5epi.x86_64.deb
  • linux_f5vpn.x86_64.deb

2. Instalar el cliente en Debian

Una vez tengas los archivos .deb del cliente instalaló:

sudo dpkg -i linux_f5cli.x86_64.deb

Si hay dependencias rotas, corrígelas con:

sudo apt-get -f install

El programa f5fpc quedará instalado en la ruta /usr/local/bin

Podeis aprovechar e instalar el resto de programas descargados de la misma forma que para f5cli:

sudo dpki -i linux_f5epi.x86_64.deb
sudo dpki -i linux_f5vpn.x86_64.deb

De esta forma disponeis de un acceso directo desde los menús en los equipos:

3. Conectandose a la VPN

Usa el cliente desde la terminal:

sudo f5fpc --start --host <vpn.empresa.com> --user <usuario> --password <contraseña>

Puedes usar el parámetro --nocheck para no validar el certificado (solo si estas realizando pruebas).

Mientras se realiza la conexión, puedes revisar lo que está pasando con el comando: f5fpc --info

4. Verificar conexión

Una vez conectado, puedes verificar la IP que tienes asignada a tu equipo:

ip a

Y comprobar que el tráfico que se enruta por la VPN:

curl ifconfig.me

5. Automatizar la conexión (opcional)

Puedes crear un script para que los usuarios se conecten de forma fácil mediante un simple script:

#!/bin/bash
echo "Conectando a la VPN de F5..."
sudo f5fpc --start --host vpn.empresa.com --user $USER --password $(cat ~/.vpnpass)

Otras Mejoras

  • Integrar la conexión VPN en NetworkManager para que se active al iniciar sesión
  • Configurar Split Tunneling si la organización lo permite
  • Usar certificados en lugar de contraseñas para mayor seguridad

Puedes revisar las características extras que puedes usar en el cliente de Linux en la documentación de F5

NOTA: En la matriz de compatibilidad de F5, Debian no aparece como distribución "certificada", sin embargo funciona correctamente en las versiones de Debian 10, 11, 12 y 13.

Un script "extra"

Os dejo un script que simplemente va ejecutando una serie de pasos para comprobar y verificar los requisitos para la conexión de nuestro equipo Debian a la VPN F5 de nuestra empresa.

En el script, debemos modificar la línea: VPN_HOST="vpn.empresa.com" por la URI de la conexion a la VPN de nuestra organización.

#!/bin/bash

echo "Verificando requisitos para instalar f5fpc en Debian..."

# Verificar arquitectura de PC
ARCH=$(uname -m)
echo "Arquitectura detectada: $ARCH"
if [[ "$ARCH" != "x86_64" && "$ARCH" != "aarch64" ]]; then
    echo "Arquitectura no compatible con f5fpc"
    exit 1
fi

# Verificar la versión de Debian
if [ -f /etc/debian_version ]; then
    DEBIAN_VERSION=$(cat /etc/debian_version)
    echo "Versión de Debian: $DEBIAN_VERSION"
else
    echo "No se detecta Debian como sistema operativo"
    exit 1
fi

# Verificar si el usuario tiene permisos para sudo
if sudo -v &>/dev/null; then
    echo "El usuario tiene privilegios 'sudo'"
else
    echo "El usuario NO tiene permisos 'sudo'"
    exit 1
fi

# Verificar si tiene ppp instalado
if dpkg -l | grep -q ppp; then
    echo "El paquete ppp está instalado"
else
    echo "El paquete ppp no está instalado"
    echo "Puedes instalarlo con: sudo apt -y install ppp"
fi

# Verificar la conectividad con el portal VPN
VPN_HOST="vpn.empresa.com"  # ¡¡¡ CAMBIAR POR URI DE NUESTRA VPN !!!
ping -c 2 $VPN_HOST &>/dev/null
if [ $? -eq 0 ]; then
    echo "Conectividad con el portal VPN ($VPN_HOST)"
else
    echo "No se puede contactar con el portal VPN ($VPN_HOST)"
fi

echo "Verificación completada. Revisa los resultados anteriores."

Guarda el fichero con nombre verifica_f5.sh y luego dale permisos de ejecucion: chmod +x verifica_f5.sh

Pruebalo simplemente ejecutando con tu usuario:

./verifica_f5.sh

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux