5 nuevas funciones de sudo que debes conocer en 2020

Desde la grabación de la sesión central a través del soporte de chroot hasta la API de Python, sudo 1.9 ofrece muchas características nuevas. Esta entrada es una adaptación al castellano de la original, aparecida en inglés, en el portal opensource.com, al final de la entrada tenéis el enlace.

Imagen de: opensource.com

Cuando desee realizar una acción en un sistema POSIX, una de las formas más seguras de hacerlo es utilizar el comando sudo. A diferencia de iniciar sesión como usuario root y realizar lo que podría ser una acción peligrosa, sudo otorga a cualquier usuario designado como «sudoer» por el administrador del sistema un permiso temporal para realizar una actividad normalmente restringida.

Este sistema ha ayudado a mantener los sistemas GNU/Linux, Unix y macOS a salvo de errores tontos y ataques maliciosos durante décadas, y es el mecanismo administrativo predeterminado en todas las principales distribuciones de Linux en la actualidad.

Cuando se lanzó en mayo de 2020, sudo 1.9 trajo muchas características nuevas, incluida la colección central de grabaciones de sesiones, soporte para chroot dentro de sudo y una API de Python. Si te sorprende alguno de estos, puedes leer los artículos, escritos por Peter Czanik, autor de la entrada original,  sobre algunas características menos conocidas de sudo.

Sudo es mucho más que un prefijo para comandos administrativos. Puede ajustar los permisos, registrar lo que está sucediendo en el terminal, extender sudo usando complementos, almacenar configuraciones en LDAP, hacer un registro extenso y mucho más.

La versión 1.9.0 y las versiones menores posteriores agregaron una variedad de características nuevas (que describiré a continuación), que incluyen:

  • Un servicio de grabación para recopilar grabaciones de sesiones de sudo de forma centralizada
  • API de complemento de auditoría
  • API de complemento de aprobación
  • Soporte de Python para complementos
  • Soporte para Chroot y CWD integrado en sudo (comenzando con 1.9.3)

Dónde conseguir sudo 1.9

La mayoría de las distribuciones de Linux todavía empaquetan la generación anterior de sudo (versión 1.8), y permanecerá así en las versiones de soporte a largo plazo (LTS) durante varios años. El paquete sudo 1.9 más completo que conozco en una distribución de Linux es openSUSE Tumbleweed, que es una distribución móvil, y el paquete sudo tiene soporte para Python disponible en un subpaquete. Las versiones recientes de Fedora incluyen sudo 1.9 pero sin Python. FreeBSD Ports tiene la última versión de sudo disponible, y puede habilitar el soporte de Python si construye sudo usted mismo en lugar de usar el paquete.

Si su distribución de Linux favorita aún no incluye sudo 1.9, consulte la página de binarios de sudo para ver si hay un paquete listo para usar disponible para su sistema. Esta página también tiene paquetes para varias variantes comerciales de Unix.

Como de costumbre, antes de comenzar a experimentar con la configuración de sudo, asegúrese de conocer la contraseña de root. Sí, incluso en Ubuntu. Tener una «puerta trasera» temporal es importante; sin él, tendría que piratear su propio sistema si algo sale mal. Y recuerde: una configuración sintácticamente correcta no significa que cualquiera pueda hacer algo a través de sudo en ese sistema.

Servicio de grabación

El servicio de grabación recopila grabaciones de sesiones de forma centralizada. Esto ofrece muchas ventajas en comparación con el almacenamiento de registros de sesión local:

  • Es más conveniente buscar en un solo lugar en lugar de visitar máquinas individuales para las grabaciones
  • Las grabaciones están disponibles incluso si la máquina emisora ​​no funciona
  • Las grabaciones no pueden ser eliminadas por usuarios locales que quieran cubrir sus pistas.

Para una prueba rápida, puede enviar sesiones a través de conexiones no cifradas al servicio de grabación. Mi blog contiene instrucciones para configurarlo en solo unos minutos. Para una configuración de producción, recomiendo usar cifrado. Hay muchas posibilidades, así que lea la documentación que mejor se adapte a su entorno.

API de complemento de auditoría

La nueva API del complemento de auditoría no es una función visible para el usuario. En otras palabras, no puede configurarlo desde el archivo sudoers. Es una API, lo que significa que puede acceder a información de auditoría desde complementos, incluidos los escritos en Python. Puede usarlo de muchas maneras diferentes, como enviar eventos desde sudo directamente a Elasticsearch o Logging-as-a-Service (LaaS) cuando sucede algo interesante. También puede usarlo para depurar e imprimir información de difícil acceso en la pantalla en el formato que desee.

Dependiendo de cómo quiera usarlo, puede encontrar su documentación en la página del manual del complemento sudo (para C) y en el manual del complemento sudo Python. El código de muestra de Python está disponible en el código fuente de sudo, y también hay un ejemplo simplificado en mi blog.

API de complemento de aprobación

La API del complemento de aprobación permite incluir restricciones adicionales antes de que se ejecute un comando. Estos se ejecutarán solo después de que el complemento de política tenga éxito, por lo que puede agregar capas de política adicionales de manera efectiva sin reemplazar el complemento de política y, por lo tanto, los sudoers. Se pueden definir varios complementos de aprobación y todos deben tener éxito para que se ejecute el comando.

Al igual que con la API del complemento de auditoría, puede usarla tanto desde C como desde Python. El código de muestra de Python documentado en mi blog es una buena introducción a la API. Una vez que comprenda cómo funciona, puede ampliarlo para conectar sudo a los sistemas de emisión de tickets y aprobar sesiones solo con un ticket abierto relacionado. También puede conectarse a una base de datos de recursos humanos para que solo el ingeniero de turno pueda obtener privilegios administrativos.

Soporte de Python para complementos

Aunque no soy programador, mi nueva característica favorita de sudo 1.9 es la compatibilidad con Python para complementos. También puede utilizar la mayoría de las API disponibles en C con Python. Afortunadamente, sudo no es sensible al rendimiento, por lo que la velocidad relativamente lenta de ejecución del código Python no es un problema para sudo. Usar Python para extender sudo tiene muchas ventajas:

  • Desarrollo más fácil y rápido
  • No es necesario compilar; el código incluso podría distribuirse mediante la gestión de la configuración
  • Muchas API no tienen clientes C listos para usar, pero el código Python está disponible

Además de las API de complementos de auditoría y aprobación, hay algunas otras disponibles y puede hacer cosas muy interesantes con ellas.

Al utilizar la API del complemento de políticas, puede reemplazar el motor de políticas sudo. Tenga en cuenta que perderá la mayoría de las funciones de sudo y no habrá más configuraciones basadas en sudoers. Esto aún puede ser útil en casos específicos, pero la mayoría de las veces, es mejor seguir usando sudoers y crear políticas adicionales usando la API del complemento de aprobación. Si quieres probarlo, mi introducción al complemento Python proporciona una política muy simple: permitir solo el comando id. Una vez más, asegúrese de conocer la contraseña de root, ya que una vez que esta política está habilitada, evita cualquier uso práctico de sudo.

Con la API de registros de E / S, puede acceder a la entrada y salida de las sesiones de usuario. Esto significa que puede analizar lo que está sucediendo en una sesión e incluso terminarla si encuentra algo sospechoso. Esta API tiene muchos usos posibles, como la prevención de fugas de datos. Puede supervisar la pantalla en busca de palabras clave y, si alguna de ellas aparece en el flujo de datos, puede romper la conexión antes de que la palabra clave pueda aparecer en la pantalla del usuario. Otra posibilidad es verificar lo que el usuario está escribiendo y usar esos datos para reconstruir la línea de comando que el usuario está ingresando. Por ejemplo, si un usuario ingresa rm -fr /, puede desconectar al usuario incluso antes de presionar Enter.

La API del complemento de grupo permite búsquedas de grupos que no son de Unix. En cierto modo, esto es similar a la API del complemento de aprobación, ya que también amplía el complemento de política. Puede verificar si un usuario es parte de un grupo determinado y actuar en función de esto en partes posteriores de la configuración.

Soporte de Chroot y CWD

Las últimas incorporaciones a sudo son la compatibilidad con chroot y cambio de directorio de trabajo (CWD). Ninguna opción está habilitada de forma predeterminada; debe habilitarlas explícitamente en el archivo sudoers. Cuando están habilitados, puede ajustar los directorios de destino o permitir que los usuarios especifiquen qué directorio usar. Los registros reflejan cuándo se utilizaron estos ajustes.

En la mayoría de los sistemas, chroot solo está disponible para root. Si uno de sus usuarios necesita chroot, debe otorgarle acceso de root, lo que le da mucho más poder que solo chroot. Alternativamente, puede permitir el acceso al comando chroot a través de sudo, pero aún permite lagunas donde pueden obtener acceso completo. Cuando usa el soporte chroot integrado de sudo, puede restringir fácilmente el acceso a un solo directorio. También puede darles a los usuarios la flexibilidad de especificar el directorio raíz. Por supuesto, esto podría provocar desastres (por ejemplo, sudo --chroot / -s), pero al menos el evento está registrado.

Cuando ejecuta un comando a través de sudo, establece el directorio de trabajo en el directorio actual. Este es el comportamiento esperado, pero puede haber casos en los que el comando deba ejecutarse en un directorio diferente. Por ejemplo, recuerdo haber usado una aplicación que verificaba mis privilegios al verificar si mi directorio de trabajo era / root.

Prueba las nuevas funciones

Espero que este artículo te inspire a echar un vistazo más de cerca a sudo 1.9. La grabación centralizada de sesiones es más conveniente y segura que almacenar registros de sesiones localmente. La compatibilidad con Chroot y CWD le brinda seguridad y flexibilidad adicionales. Y el uso de Python para extender sudo facilita la adaptación personalizada de sudo a su entorno. Puede probar las nuevas funciones utilizando una de las últimas distribuciones de Linux o los paquetes listos para usar del sitio web de sudo.

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

Página web de sudo

Blog de sudo

Sudo en Twitter

Entrada original en Opensource.com