GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué es arriesgado dar acceso a Sudo Vim a los usuarios comunes?

Me gustaría crear un nuevo usuario y darle acceso a sudo. Para ser específico, quiero que use sudo vim y edite httpd.conf. Escribí esto en sudoers:

user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Sin embargo, escuché que esto podría ser riesgoso. ¿Por qué es esto problemático? ¿Qué tan serio es el problema?

Respuesta aceptada:

Aunque restringe los argumentos de la línea de comandos, no hay nada que impida que el usuario use vim para abrir, editar y sobrescribir cualquier archivo aleatorio una vez que se ejecuta como root.

El usuario puede ejecutar sudo vim /etc/httpd/conf/httpd.conf y luego

  • borrar todo ese texto del búfer de edición
  • luego, por comodidad, obtenga un archivo existente (aunque ni siquiera es necesario):por ejemplo, la configuración de sudo
    :r /etc/sudoers NOTA:A menos que esté restringido por SELinux, el usuario puede leer cualquier ¡Preséntelo de esta manera!
  • concederse más privilegios de sudo user ALL=(ALL) NOPASSWD: ALL
  • sobrescriba la configuración anterior :w /etc/sudoers

Puedo imaginar docenas de formas similares en las que su usuario ahora puede acceder, modificar o destruir su sistema.

Ni siquiera tendrá un registro de auditoría de qué archivos se cambiaron de esta manera, ya que solo lo verá editando su configuración de Apache en los mensajes de registro de sudo. Este es un riesgo de seguridad al otorgar sudo privilegios a cualquier editor.

Esta es más o menos la misma razón por la que otorgar derechos de nivel raíz de sudo a comandos como tar y unzip a menudo es inseguro, nada le impide incluir reemplazos para los binarios del sistema o los archivos de configuración del sistema en el archivo.

Un segundo riesgo, como han señalado muchos otros comentaristas, es que vim permite escapes de caparazón , donde puede iniciar una subcapa dentro de vim que le permite ejecutar cualquier comando arbitrario . Desde dentro de su sesión de sudo vim, se ejecutarán como root, por ejemplo, el escape de shell:

  • :!/bin/bash le dará un shell raíz interactivo
  • :!/bin/rm -rf / hará buenas historias en el pub.

¿Qué hacer en su lugar?

Todavía puedes usar sudo para permitir que los usuarios editen archivos que no son de su propiedad de forma segura.

En la configuración de sudoers, puede establecer un comando reservado especial sudoedit seguido de la ruta de acceso completa (comodín) a los archivos que un usuario puede editar:

user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

El usuario puede entonces usar -e cambiar en su línea de comando sudo o usar el sudoedit comando:

sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf

Como se explica en la página man:

El -e (edit) La opción indica que, en lugar de ejecutar un comando, el usuario desea editar uno o más archivos. En lugar de un comando, la cadena "sudoedit" se utiliza al consultar la política de seguridad.
Si el usuario está autorizado por la política, se toman los siguientes pasos:

  • Se realizan copias temporales de los archivos que se van a editar con el propietario establecido para el usuario que invoca.
  • El editor especificado por la política se ejecuta para editar los archivos temporales. La política sudoers utiliza las variables de entorno SUDO_EDITOR, VISUAL y EDITOR (en ese orden). Si no se configura SUDO_EDITOR, VISUAL o EDITOR, el primer programa que aparece en el editor sudoers (5) se utiliza la opción.
  • Si se han modificado, los archivos temporales se copian a su ubicación original y las versiones temporales se eliminan.
    Si el archivo especificado no existe, se creará.
    Tenga en cuenta que, a diferencia de la mayoría de los comandos ejecutados por sudo, el editor se ejecuta sin modificar el entorno del usuario que invoca. Si, por alguna razón, sudo no puede actualizar un archivo con su versión editada, el usuario recibirá una advertencia y la copia editada permanecerá en un archivo temporal.

Los sudoers El manual también tiene una sección completa sobre cómo puede ofrecer protección limitada contra escapes de proyectiles con el RESRICT y NOEXEC opciones.

restrict Evite dar a los usuarios acceso a comandos que les permitan ejecutar comandos arbitrarios. Muchos editores tienen un modo restringido donde los escapes de shell están deshabilitados, aunque sudoedit es una mejor solución para ejecutar editores a través de sudo. Debido a la gran cantidad de programas que ofrecen escapes de shell, restringir a los usuarios al conjunto de programas que no los ofrecen a menudo no funciona.

y

noexec
Muchos sistemas que admiten bibliotecas compartidas tienen la capacidad de anular las funciones de biblioteca predeterminadas apuntando una variable de entorno (generalmente LD_PRELOAD) a una biblioteca compartida alternativa. En dichos sistemas, la funcionalidad noexec de sudo se puede usar para evitar que un programa ejecutado por sudo ejecute cualquier otro programa. Nota, ... ...
Para habilitar noexec para un comando, use NOEXEC como se documenta en la sección Especificación del usuario anterior. Aquí está ese ejemplo nuevamente:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Esto le permite al usuario aaron ejecutar /usr/bin/more y /usr/bin/vi con noexec habilitado. Esto evitará que esos dos comandos ejecuten otros comandos (como un shell).


Linux
  1. ¿Por qué el usuario raíz necesita permiso de Sudo?

  2. ¿Dar acceso a Virtualbox solo a usuarios específicos?

  3. ¿Por qué otros usuarios no pueden acceder al recurso compartido de Samba sin forzar usuario =yo?

  4. Crear un usuario sudo en CentOS

  5. Crear un usuario sudo en Ubuntu

Cómo agregar y eliminar usuarios en Ubuntu 18.04

Cómo agregar y eliminar usuarios en CentOS 8

Agregar, eliminar y otorgar privilegios de Sudo a los usuarios en Alpine Linux

Cómo restringir el acceso SSH a ciertos usuarios en Linux

Cómo dar permiso de Sudo a los usuarios en Ubuntu Linux [Consejo para principiantes]

Usuarios Webmin