En muchos entornos de producción y seguridad, se considera una buena práctica deshabilitar el inicio de sesión remoto del usuario root
mediante SSH. Esto ayuda a mitigar ataques automatizados de fuerza bruta y mejora la trazabilidad de accesos, forzando a los administradores a usar usuarios nominales con privilegios elevados mediante sudo
.
Este artículo describe cómo automatizar esta tarea mediante Ansible, utilizando un playbook que detecta la distribución del sistema, realiza una copia de seguridad del archivo de configuración de SSH, modifica el parámetro PermitRootLogin
, y reinicia el servicio SSH de manera segura.
Objetivo
Modificar de forma automatizada el archivo /etc/ssh/sshd_config
en múltiples sistemas Linux (Debian, Ubuntu, CentOS, RHEL), para establecer:
PermitRootLogin no
Con ello, se desactiva el acceso SSH directo como root, sin afectar al acceso mediante otros usuarios con privilegios.
Descripción del Playbook
Este playbook de Ansible realiza las siguientes acciones:
- Detectar la distribución del sistema operativo
Usamos el módulosetup
para obtener la variableansible_distribution
, que nos permitirá elegir el nombre correcto del servicio SSH (puede variar entressh
ysshd
). - Hacer una copia de seguridad de la configuración actual de SSH
Esto proporciona una vía de recuperación en caso de error. - Modificar el parámetro
PermitRootLogin
Se asegura de que esté establecido comono
, eliminando comentarios si existen. - Reiniciar el servicio SSH
Aplica los cambios, seleccionando dinámicamente el nombre correcto del servicio según la distribución.
Playbook de Ansible
---
- name: Deshabilitar login root en SSH
hosts: all
become: yes
tasks:
- name: Detectar distribución
ansible.builtin.setup:
filter: ansible_distribution
- name: Copia de seguridad del archivo sshd_config
ansible.builtin.copy:
src: /etc/ssh/sshd_config
dest: /etc/ssh/sshd_config.bak
remote_src: yes
mode: '0644'
- name: Deshabilitar PermitRootLogin
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
regexp: '^#?PermitRootLogin'
line: 'PermitRootLogin no'
backup: yes
- name: Reiniciar servicio SSH
ansible.builtin.service:
name: "{{ 'ssh' if ansible_distribution in ['Debian', 'Ubuntu'] else 'sshd' }}"
state: restarted
Consideraciones de Seguridad
- Antes de aplicar este cambio en entornos productivos, asegúrate de que existan cuentas de usuario alternativas con acceso SSH y privilegios de
sudo
. - Si el acceso remoto se pierde, podrías requerir acceso físico o consola remota para restaurar la configuración.
Conclusión
Automatizar la desactivación del acceso root vía SSH es una medida efectiva para mejorar la seguridad de los sistemas Linux. Con Ansible, esta tarea se puede aplicar de forma rápida, coherente y segura en múltiples servidores.
Compartir: