Saltar al contenido

¿Es seguro editar /etc/sudoers con el módulo “lineinfile” de Ansible?

Indagamos en el mundo online para de esta forma regalarte la solución para tu inquietud, si continúas con dificultades puedes dejar tu duda y responderemos con mucho gusto, porque estamos para servirte.

Solución:

Hay una opción de red segura para tales casos: validate.

El comando de validación para ejecutar antes de copiar en su lugar. La ruta al archivo para validar se pasa a través de ‘%s’ que debe estar presente como en el ejemplo a continuación. El comando se pasa de forma segura, por lo que las funciones de shell, como la expansión y las tuberías, no funcionarán.

Si observa la sección de ejemplos del módulo lineinfile, verá exactamente lo que necesita:

# Validate the sudoers file before saving
- lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%ADMIN ALL='
    line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
    validate: '/usr/sbin/visudo -cf %s'

Es seguro si ha probado que la sintaxis es correcta.

El punto de alentar visudo es evitar que alguien se bloquee de la administración de un sistema mediante la creación de un /etc/sudoersya sea por un error tipográfico o un thinko.

Cuando usa Ansible para realizar una edición, puede probar el código que realiza esa edición para hacer lo correcto con sus archivos de configuración, entorno y versión reales de sudo antes de desplegarlo. Por lo tanto, las preocupaciones sobre las personas que cometen un error tipográfico o de sintaxis a mano no son relevantes de inmediato.

Si bien esta respuesta define las cosas correctamente y proporciona una mitigación de los problemas potenciales, veamos su código.

Le pide a Ansible que (potencialmente) reemplace la línea definida de la siguiente manera:

regexp: ^Defaults  env_reset

Esto es claramente una mala práctica y si se repite para un parámetro que no sea Defaults en sudoers archivo, es probable que cause un problema crítico.


En general Defaults es el parámetro de configuración y env_reset es uno de los valores posibles.

No puede suponer que el archivo de configuración real siempre contendrá ^Defaults env_reset string.

Si hubiera un conjunto de valores diferente, la expresión regular no coincidiría y terminaría agregando una segunda línea que comenzaría con Defaults.


Así que la forma correcta de usar lineinfile es usar regexp argumento para que coincida solo con el parámetro de configuración, no con su valor. En tu caso:

regexp: ^Defaults
line: Defaults  env_reset,timestamp_timeout

El otro peligro potencial es que sudoers contienen secciones que deben escribirse en el orden correcto. Si el archivo que modifica no contiene la línea especificada por la expresión regular, lineinfile agregará una nueva línea al final del archivo, donde podría ignorarse o dar como resultado un error (pero eso debería ser descubierto por validación), y muy probablemente cause confusión si un humano mira el archivo más tarde. Por lo tanto, sería prudente especificar insertafter o insertbefore.

Comentarios y puntuaciones

Al final de la página puedes encontrar las acotaciones de otros usuarios, tú igualmente tienes la libertad de dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *