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 arriesgado. ¿Por qué es esto problemático? ¿Qué tan serio es el problema?
vim
, el usuario es libre de abrir y escribir en cualquier archivo que desee./etc/httpd/confs/httpd.conf
. Luego, usechgrp [OPTION] GROUPNAME FILE
para cambiar la propiedad del grupo/etc/httpd/confs/httpd.conf
. Algo así comogroupadd vimportant
crear el nuevo grupo ychgrp -v vimportant /etc/httpd/confs/httpd.conf
cambiar la propiedad del grupo. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
página del manual.sudo
acceso a vim, el usuario podrá usar vim como root. En vim puede ejecutar comandos UNIX ( ¿Cómo ejecutar comandos Unix desde Vim? ) Para que un usuario pueda hacer cosas comouseradd <myuser>
,rm -rf /
o muchas otras cosas.Respuestas:
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 esté ejecutando como root.
El usuario puede ejecutar
sudo vim /etc/httpd/conf/httpd.conf
y luego:r /etc/sudoers
NOTA: ¡A menos que sea restringido por SELinux, el usuario puede leer cualquier archivo de esta manera!user ALL=(ALL) NOPASSWD: ALL
: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 seguimiento 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 sudo a comandos como
tar
y aunzip
menudo es inseguro, nada le impide incluir reemplazos para archivos binarios del sistema o archivos de configuración del sistema en el archivo.Un segundo riesgo, como lo han señalado muchos otros comentaristas, es que
vim
permite escapes de shell , donde puede iniciar un sub-shell desde vim que le permite ejecutar cualquier comando arbitrario . Desde su sesión de sudo vim, se ejecutarán como root, por ejemplo, el escape de shell::!/bin/bash
te dará un shell raíz interactivo:!/bin/rm -rf /
Hará buenas historias en el pub.¿Qué hacer en su lugar?
Todavía puede usar
sudo
para permitir a los usuarios editar archivos que no son de su propiedad de manera segura.En la configuración de sudoers, puede establecer un comando reservado especial
sudoedit
seguido del nombre de ruta completo (comodín) a los archivos que un usuario puede editar:El usuario puede usar el
-e
interruptor en su línea de comando sudo o usar elsudoedit
comando:Como se explica en la página del manual :
El
sudoers
manual también tiene una sección completa sobre cómo puede ofrecer protección limitada contra escapes de shell con las opcionesRESRICT
yNOEXEC
.y
fuente
sudo tar
ysudo unzip
también causo problemas. Gracias.:!rm -rf /
, whoops!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
Y bum. El acceso de raíz a tar es una vulnerabilidad.:sh
luego boom, caparazón de raízEsta configuración permite a ese usuario editar ese archivo. Para hacerlo, inicia un
vim
editor con derechos de root.Una vez que
vim
se inicia el comando, el usuario puede hacer lo que quiera con ese editor. - Puede abrir un archivo diferente o incluso iniciar un shell desde vim.Por lo tanto, el usuario ahora puede ver y editar archivos arbitrarios y ejecutar comandos arbitrarios en su sistema.
fuente
Cerraduras de seguridad
Algunos programas, como por ejemplo
less
,vi
,vim
ymore
, permitir que otros programas se ejecuten de un comando shell-lo que se conoce como escape Shell o escapar al intérprete de comandos. En estos casos, puede utilizarNOEXEC
para evitar que algunos programas permitan la ejecución de otros privilegios de programas. Ejemplo:Esto permitiría al usuario editar más o menos y ver privilegiadamente cualquier archivo en el sistema que ejecute vim y más, pero deshabilita la posibilidad de ejecutar otros programas con privilegios desde el intérprete de comandos de escape
vim
.Es importante
sudo
incluir varios bloqueos de seguridad (predeterminados) que pueden evitar tareas peligrosas, como redirigir la salida estándar de la ejecución de un programa (STDOUT
) a archivos fuera del directorio de inicio del usuario.Si se define en el archivo
/etc/sudoers
que un usuario puede ejecutar con privilegios/usr/bin/vim
, es decir, algo como lo siguiente:sudo
permite que el usuario regular definido pueda ejecutarse/usr/bin/vim
de las siguientes maneras:Pero evite ejecutar vim de la siguiente manera:
fuente
La respuesta simple:
El siguiente es un comando Vim:
Ahora tienen una cáscara de raíz.
fuente
Una posible mejora de seguridad incremental sería reemplazar:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
con
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
y luego haga que el usuario se ejecute en su
sudo rvim /etc/httpd/confs/httpd.conf
lugar.Vim admite un modo restringido activado con la opción de línea de comando -Z o iniciando el programa como rvim. Cuando el modo restringido está activado, "todos los comandos que utilizan un shell externo están desactivados". Este enfoque no impediría que el usuario utilice un
:split file
comando ex para abrir otros archivos, pero al menos debería impedir deliberadamente comandos shell maliciosos como:!rm -rf /
.fuente
Estoy de acuerdo con la respuesta de HBruijn de que ejecutar vim como root abre el sistema de manera muy amplia, y sudoedit sería una solución más segura.
Pero incluso entonces, es probable que su sistema siga siendo bastante abierto. Al menos suponiendo que se inicie algún proceso de apache con privilegios de root en función de esa configuración. Hay un millón de formas de configurar apache de tal manera que ejecute programas externos. Como un ejemplo, considere el argumento de la tubería a la directiva CustomLog . El manual establece explícitamente:
Obviamente, si sus usuarios pueden escribir la configuración, pueden cambiar ese programa a lo que quieran, por ejemplo, algo que ejecute un script de shell para otorgarles más permisos.
Por esta razón, recientemente he pirateado una forma de usar las capacidades de tal manera que Apache puede obtener la capacidad especial de unirse a un puerto privilegiado, aunque de lo contrario se ejecuta como un usuario normal. De esa manera, los usuarios pueden editar la configuración e incluso iniciar el servidor, y aún están en su mayoría seguros. El único problema es que pueden vincular cualquier proceso en cualquier IP. Permanece un cierto grado de confianza, ya que posiblemente podrían encontrar una manera de bloquear el sshd del sistema y luego lanzar su propia versión en un intento de obtener la contraseña de root.
fuente
Cabe señalar que incluso un
sudoedit {.../whatever.conf}
puede ser un riesgo de seguridad.Crear un script de shell
/tmp/make_me_root.sh
y llame a este script en su archivo de configuración. Conozco varios ejemplos en los que funciona este enfoque:
samba -> comando de token log nt
syslog-ng -> programa: envío de mensajes a aplicaciones externas
Apache -> CustomLog
Supongo que uno puede extender esta lista sin fin.
Todo lo que tiene que hacer es reiniciar el servicio. Por supuesto, una vez que sea root, revertirá dichas líneas de configuración para desdibujar sus rastros.
fuente
Por supuesto, no es más seguro en absoluto. Como se dijo antes de sudoedit, es la forma más fácil y adecuada de hacerlo.
Lo que quiero agregar es que vim permite iniciar un shell, por lo que no solo puede editar cualquier archivo del sistema, sino que también permite iniciar un shell y hacer lo que quiera.
Solo intenta iniciar un vim y escribe: sh
fuente