Lo que probablemente no sabías (y debes saber) sobre sudo

¿Crees que sabes todo sobre sudo? Piénsalo dos veces…

Todo el mundo conoce sudo, ¿verdad? Esta herramienta se instala de manera predeterminada en la mayoría de los sistemas Linux y está disponible para la mayoría de las variantes Unix de BSD y comerciales.

Aun así, después de hablar con cientos de usuarios de sudo, la respuesta más común que recibí fue que sudo es una herramienta para complicar la vida.

Hay un usuario root y está el comando su, entonces ¿por qué tener otra herramienta?

Para muchos, sudo es solo un prefijo para los comandos administrativos.

Solo unos pocos mencionaron que cuando tienen varios administradores para el mismo sistema, pueden usar los registros de sudo para ver quién hizo qué.

Entonces, ¿qué es sudo? Según el sitio web de sudo:

“Sudo permite que un administrador del sistema delegue autoridad al dar a ciertos usuarios la capacidad de ejecutar algunos comandos como root u otro usuariode igual manera que proporciona una pista de auditoría de los comandos y sus argumentos”.

De manera predeterminada, sudo viene con una configuración simple, una regla única que permite a un usuario o un grupo de usuarios hacer prácticamente cualquier cosa:

En el ejemplo anterior, los parámetros significan lo siguiente:

  • El primer parámetro define los miembros del grupo.
  • El segundo parámetro define los hosts en los que los miembros del grupo pueden ejecutar comandos.
  • El tercer parámetro define los nombres de usuario bajo los cuales se puede ejecutar el comando.
  • El último parámetro define las aplicaciones que se pueden ejecutar.

Entonces, en este ejemplo, los miembros del grupo wheel pueden ejecutar todas las aplicaciones como todos los usuarios en todos los hosts.

Incluso esta regla realmente permisiva es útil porque da como resultado registros de quién hizo qué en tu máquina.

Alias

Por supuesto, una vez que no solo tú y tu mejor amigo estén administrando un cuadro compartido, comenzarán a ajustar los permisos.

Puedes reemplazar los elementos en la configuración anterior con listas: una lista de usuarios, una lista de comandos, etc.

Lo más probable es que copies y pegues algunas de estas listas en tu configuración.

Esta situación es donde los alias pueden ser útiles. Mantener la misma lista en varios lugares es propenso a errores.

Debes definir un alias una vez y luego puedes usarlo muchas veces. Por lo tanto, cuando pierdes la confianza en uno de tus administradores, puedes eliminarlos del alias y listo.

Con múltiples listas en lugar de alias, es fácil olvidar eliminar al usuario de una de las listas con privilegios elevados.

Habilitar funciones para un determinado grupo de usuarios

El comando sudo viene con un gran conjunto de valores predeterminados. Aun así, hay situaciones en las que deseas anular algunas de estas.

Esto es cuando usas la instrucción Defaults en la configuración.

Por lo general, estos valores predeterminados se aplican a todos los usuarios, pero puedes limitar la configuración a un subconjunto de usuarios según el host, el nombre de usuario, etc.

Aquí hay un ejemplo del que mi generación de administradores de sistemas adora escuchar: insultos. Estos son solo algunos mensajes divertidos para cuando alguien escribe mal una contraseña:

Debido a que no todos son fanáticos del humor de administradores de sistemas, estos insultos están deshabilitados de forma predeterminada.

El siguiente ejemplo muestra cómo habilitar esta configuración solo para tus administradores de sistemas experimentados, que son miembros del grupo de wheel:

No tengo suficientes dedos para contar cuántas personas me agradecieron por mostrar estos mensajes.

Verificación resumida

Hay, por supuesto, características más serias en sudo también. Una de ellas es la verificación de resumen. Puedes incluir el resumen de aplicaciones en tu configuración:

En este caso, sudo verifica y compara el resumen de la aplicación con el almacenado en la configuración antes de ejecutar la aplicación.

Si no coinciden, sudo se niega a ejecutar la aplicación. Si bien es difícil mantener esta información en tu configuración (no hay herramientas automatizadas para este propósito), estos resúmenes pueden proporcionarte una capa adicional de protección.

Grabación de sesión

La grabación de sesiones también es una característica menos conocida de sudo.

Después de esta explicación, muchas personas harán planes de implementarlo en su infraestructura.

¿Por qué? Porque con la grabación de sesión, no solo se ve el nombre del comando, sino también todo lo que sucedió en la terminal.

Puedes ver lo que están haciendo tus administradores, incluso si tienen acceso a shell y los registros solo muestran que se inició bash.

Hay una limitación, actualmente. Los registros se almacenan localmente, por lo que, con suficientes permisos, los usuarios pueden eliminar sus rastros.

Complementos (plugins)

A partir de la versión 1.8, sudo cambió a una arquitectura modular basada en complementos.

Con la mayoría de las funciones implementadas como complementos, puedes reemplazar o ampliar fácilmente la funcionalidad de sudo escribiendo la tuya propia.

Hay complementos de código abierto y comerciales ya disponibles para sudo. Por ejemplo, el complemento sudo_pair , que está disponible en GitHub.

Este complemento está desarrollado en Rust, lo que significa que no es tan fácil de compilar y es aún más difícil distribuir los resultados.

Por otro lado, el complemento proporciona una funcionalidad interesante, que requiere un segundo administrador para aprobar (o denegar) la ejecución de comandos a través de sudo.

No solo eso, sino que las sesiones se pueden seguir en la pantalla y finalizar si hay actividad sospechosa.

Por ejemplo, si ejecutas este peligroso comando:

Imagínate que lo hagas en la computadora de otra persona, o descubres que alguien lo quiere ejecutar en tú maquina….

Registros

Como ya mencioné al principio, el registro y las alertas son una parte importante de sudo.

Si no revisas tus registros de sudo regularmente, no vale la pena usar sudo.

Esta herramienta alerta por correo electrónico sobre los eventos especificados en la configuración y registra todos los eventos en syslog.

Los registros de depuración se pueden activar y utilizar para depurar reglas o informar errores.

Alertas

Las alertas por correo electrónico son algo anticuadas ahora, pero si usas syslog-ng para recopilar tus mensajes de registro, tus mensajes de registro de sudo se analizan automáticamente.

Puedes crear fácilmente alertas personalizadas y enviarlas a una amplia variedad de destinos, incluidos Slack, Telegram, Splunk o Elasticsearch.

Configuración

Hablamos mucho sobre las características de sudo e incluso vimos algunas líneas de configuración.

Ahora, echemos un vistazo más de cerca a cómo está configurado sudo. La configuración en sí está disponible en /etc/sudoers, que es un archivo de texto simple.

Aun así, no se recomienda editar este archivo directamente. En su lugar, debes usar visudo, ya que esta herramienta también realiza la verificación de sintaxis.

Si no te gusta vi, puedes cambiar qué editor usar apuntando la variable de entorno EDITOR a tu opción preferida.

Antes de comenzar a editar la configuración de sudo, asegúrate de conocer la contraseña de root. (Sí, incluso en Ubuntu, donde root no tiene una contraseña por defecto).

Si bien visudo verifica la sintaxis, es fácil crear una configuración sintácticamente correcta que lo bloquee de tu sistema.

Cuando tengas a mano una contraseña de root en caso de emergencia, puedes comenzar a editar tu configuración.

Cuando se trata del archivo sudoers, hay una cosa importante para recordar: este archivo se lee de arriba a abajo y gana la última configuración.

Lo que este hecho significa para ti es que debes comenzar con la configuración genérica y colocar excepciones al final, de lo contrario, la configuración genérica anula las excepciones.

Puedes encontrar un archivo de sudoers simple a continuación, basado en el de CentOS, y agregar algunas líneas que discutimos anteriormente:

Explicación

Este archivo comienza cambiando varios valores predeterminados.

Luego vienen las reglas predeterminadas habituales: el usuario root y los miembros del grupo wheel tienen permisos completos sobre la máquina.

A continuación, habilitamos los insultos para el grupo wheel, pero los deshabilitamos para todos los demás. La última línea permite la grabación de sesión.

La configuración anterior es sintácticamente correcta, pero ¿puedes detectar el error lógico?

Sí, hay uno: los insultos están deshabilitados para todos, ya que la última configuración genérica anula la configuración anterior y más específica.

Una vez que cambias las dos líneas, la configuración funciona como se esperaba: los miembros del grupo wheel reciben mensajes divertidos, pero el resto de los usuarios no los reciben.

Administración de la configuración

Una vez que tengas que mantener el archivo sudoers en varias máquinas, lo más probable es que desees administrar tu configuración de forma centralizada.

Hay dos posibilidades principales de código abierto aquí. Ambos tienen sus ventajas y desventajas.

Puedes usar una de las aplicaciones de administración de configuración que también usas para configurar el resto de tu infraestructura.

Red Hat Ansible, Puppet y Chef tienen módulos para configurar sudo. El problema con este enfoque es que la actualización de configuraciones está lejos de ser en tiempo real.

Además, los usuarios aún pueden editar el archivo sudoers localmente y cambiar la configuración.

La herramienta sudo también puede almacenar tu configuración en LDAP. En este caso, los cambios de configuración son en tiempo real y los usuarios no pueden meterse con el archivo sudoers.

Por otro lado, este método también tiene limitaciones. Por ejemplo, no puedes usar alias o usar sudo cuando el servidor LDAP no está disponible.

Nuevas características

Hay una nueva versión de sudo a la vuelta de la esquina. La versión 1.9 incluirá muchas características nuevas e interesantes. Estas son las características planificadas más importantes:

  • Un servicio de grabación para recopilar grabaciones de sesiones de forma centralizada, que ofrece muchas ventajas en comparación con el almacenamiento local:
    • Es más conveniente buscar en un solo lugar.
    • Las grabaciones están disponibles incluso si la máquina del remitente está inactiva.
    • Las grabaciones no pueden ser eliminadas por alguien que quiera eliminar sus pistas.
  • El complemento audit no agrega nuevas características a los sudoers, sino que proporciona una API para que los complementos accedan fácilmente a cualquier tipo de registros de sudo.

Este complemento permite crear registros personalizados a partir de eventos sudo utilizando complementos.

  • El complemento aproval habilita las aprobaciones de sesión sin usar complementos de terceros.
  • Y mi favorito: el soporte de Python para complementos, que te permite extender fácilmente sudo usando el código de Python en lugar de programar de forma nativa en C.

Conclusión

Espero que este artículo te haya demostrado que sudo es mucho más que un simple prefijo. Hay cientos de posibilidades para ajustar los permisos en tu sistema.

No solo puedes ajustar los permisos, sino también mejorar la seguridad comprobando los resúmenes.

Las grabaciones de sesión te permiten verificar lo que sucede en tus sistemas.

También puedes ampliar la funcionalidad de sudo usando complementos, ya sea usando algo ya disponible o escribiendo el tuyo.

Finalmente, dada la lista de las próximas características, puedes ver que incluso si sudo tiene décadas de antigüedad, es un proyecto vivo que está en constante evolución.

Si deseas obtener más información sobre sudo, aquí hay algunos recursos: