¿Es seguro usar Vim en combinación con sudo?

25

No es recomendable usarlo sudocon una aplicación gráfica como gedit, como se describe en este enlace . En consecuencia, he tendido a usar vimcon sudo.

Recientemente me di cuenta de que mi ~/.viminfopropietario era root en una instalación bastante nueva de Ubuntu 16.04 (Xenial Xerus), por lo que me preguntaba si incluso Vim se considera gráfico o si hay algún otro problema con la invocación sudo vim. Después de cambiar la propiedad a mí mismo a través de:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

y posteriormente ejecutándome no sudo vimpude ser ~/.viminfo propiedad de root. Sin embargo, estoy seguro de que recientemente fue propiedad de root.

¿Es desaconsejable invocar sudo vim?

H2ONaCl
fuente
1
También puede usar vim sin sudo y cuando se trata de guardar el archivo, puede usar:w !sudo tee %
ChatterOne

Respuestas:

22

Sí, es seguro

El problema sudo gedites porque las aplicaciones GUI usan ciertos archivos, como ~/.cache/dconf, y después de elevado, geditese archivo se convierte en propiedad de la raíz. Bueno, ese archivo en particular contiene configuraciones específicas del usuario para aplicaciones GUI, incluido el escritorio, por lo que si el sistema no puede leer esas configuraciones, es malo. IIRC un usuario no puede iniciar un escritorio en particular. Los datos de los archivos recientes del usuario recently-used.xbeltambién se ven afectados.

Por otro lado, Vim no tiene ese problema. No utiliza una base de datos relacionada con la GUI y no incluye nada recently-used.xbel. Fue creado para un propósito exclusivo de la consola, aunque también existe gVim. De hecho, en algunos sistemas, Vim es su única opción de editor. Por lo tanto, es más seguro que gedit en virtud de no causar los mismos problemas. Todavía está editando como root en ambos casos, por lo que podría causar problemas con la edición incorrecta.

Según esta publicación de blog :

La primera vez que usa vim, ~/.viminfose crea el archivo , y si usa sudo vimla primera vez que usa vim después de instalarlo en un sistema nuevo, los permisos ~/.viminfoactivados tendrán al propietario configurado como root en lugar del usuario predeterminado.

Si bien el autor señala que puede conducir a problemas, no hay nada complejo, solo chownel archivo de vuelta a ti mismo.

Ver también:

Sergiy Kolodyazhnyy
fuente
66
Tenga en cuenta que vim no es seguro en un sistema multiusuario en el que intenta limitar los permisos administrativos de otros usuarios. Un usuario puede usar sudo vimpara obtener una copia de vim ejecutándose como root, y luego :!/bin/shobtener un shell de root.
Mark
3
@ Mark y ¿qué impide que el usuario solo haga sudo /bin/sh? En términos prácticos, si el usuario ya tiene acceso de root, no necesita usar trucos elaborados.
Sergiy Kolodyazhnyy
77
El /etc/sudoersarchivo No necesita hacerlo %wheel ALL=(ALL) ALL: la sudoconfiguración permite muchos más matices que eso.
Mark
1
@Mark OK, buen punto allí: no todos los sistemas tienen la misma configuración.
Sergiy Kolodyazhnyy
Uhm ... ¿Cambiará el permiso incluso si el archivo existe? Supongamos que pirateo una cuenta de usuario que no es administrador, pero no sé su contraseña (tal vez logré abrir un shell). ¿Significa esto que puedo copiar /bin/basha ~/.viminfo, poner un setuid en él y esperar a que el usuario ejecute sudo vimpara que se lo chowned a raíz?
ChatterOne
15

También es posible usar sudoeditpara lograr esto; abre una copia temporal del archivo en su editor, con su editor ejecutándose como usted. Desde la página del manual :

  1. Se realizan copias temporales de los archivos que se editarán con el propietario configurado para el usuario que invoca.

  2. El editor especificado por la política se ejecuta para editar los archivos temporales. La política sudoers utiliza los SUDO_EDITOR, VISUALy EDITORlas variables de entorno (en ese orden). Si ninguno de SUDO_EDITOR, VISUALo EDITORestán configurados, sudoers(5)se utiliza el primer programa listado en la opción del editor .

  3. Si se han modificado, los archivos temporales se vuelven a copiar en su ubicación original y se eliminan las versiones temporales.

Esto funciona bien con vim (es lo que generalmente hago) e imagino que también te permitiría usar gedit. Hay algunas restricciones de seguridad .

GKFX
fuente
44
Esto es mucho mejor si prefiere usar su propia configuración vim en lugar de la raíz.
NieDzejkob
2
Esto también es más seguro si no desea ejecutar código de complemento aleatorio como root (sin embargo, los complementos se ejecutan, ya que también pueden causar mucho daño si son maliciosos, por lo que no use complementos en los que no confíe) primer lugar).
Kevin
2

El enlace es muy antiguo (2013). Recomienda usar gksudoo gksupara aplicaciones gráficas, pero ambas se están volviendo obsoletas. Más tarde, la respuesta aceptada también sugiere sudo -Hsin embargo.

El consenso general en la comunidad Ask Ubuntu recientemente es usar:

sudo -H gedit /path/to/filename

El único problema sigue siendo que sudono tiene un perfil para la configuración de pestañas, extensiones, ajuste de palabras, nombre de fuente, tamaño de fuente, etc. Puede heredarlos de su perfil de usuario aunque con un script de envoltura como este: ¿Cómo puedo sincronizar mi raíz? gedit con las preferencias de mi usuario gedit?

WinEunuuchs2Unix
fuente
2

Sí, es seguro de usar sudo vim. Los problemas que encuentro son

  • Tener que salir del archivo y volver a abrir con sudo vimpara poder editar.

  • Tener la raíz vimrces la predeterminada, no mis cosas útiles personalizadas.

Aquí hay una función que puede poner en su bashrcpara permitir que vim sudo automáticamente si no puede editar el archivo normalmente.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}
jeremysprofile
fuente
En Ubuntu sudopor defecto conserva la $HOMEvariable de entorno, lo que significa que sudo vim va a utilizar su .vimrc personalizada, y también significa que sudo vimva a cambiar la propiedad de ~/.viminforoot: raíz y causa que algunos inconvenientes.
Marius Gedminas
La respuesta aceptada no está de acuerdo con usted viminfo.
jeremysprofile
1

Está bien usar vi como root. Habrá ocasiones en las que necesite editar un archivo que requiera privilegios sudo o root, como cambiar el archivo de las interfaces de red o tal vez editar el archivo de configuración sshd. Usar root para cosas gráficas es malo porque la gente se conectaría a IRC o navegaría por la web como root. Si obtuvieron un virus al hacerlo, tendría acceso completo a la raíz.

La letra m
fuente
2
Hay al menos una excepción específica para usar vi como root. El archivo que controla la ruta de sudo (/ etc / sudoers) nunca debe editarse con vi. Para ese archivo, se debe usar el comando visudo. Ni siquiera especifica qué archivo se está editando, es solo el caso especial.
user628388
1

Algo que no se ha mencionado en las otras respuestas es que ejecutar vim con root dará privilegios de root a los complementos que haya instalado. Por lo tanto, la pregunta de si es seguro o no ejecutarlo como root depende de si confía en que los desarrolladores de complementos (o contribuyentes a su proyecto) no sean dueños de su sistema en su núcleo.

Vim generalmente es examinado por mantenedores de paquetes en todas las distribuciones de Linux, por lo que es fácil confiar. Sin embargo, los complementos vim generalmente se instalan directamente desde los repositorios de GitHub y generalmente tienen mucha menos auditoría de usuarios (tal vez nula). En otras palabras, no hay un proceso de investigación de antecedentes con ellos.

Si no carga complementos mientras está en la raíz, supongo que la ejecución como raíz depende de si confía en los desarrolladores de vim. Sin embargo, puede omitir tener que confiar en ellos utilizando sudoedit, que está hecho por los mismos desarrolladores de sudo, personas en las que ya hemos confiado con acceso root de todos modos. GKFX y NieDzejkob ya han mencionado por qué sudoedit es ideal. Además del punto de que no tiene que confiar en el acceso raíz a nadie más que los desarrolladores de sudo, puede cargar todos los complementos en los que ya ha confiado con su cuenta de usuario normal.

JoL
fuente
Esta discusión sobre no confiar en varios desarrolladores parece un poco incompleta; Si sudoedit /etc/apt/sources.listtiene instalado un complemento comprometido, probablemente pueda insertar un repositorio malicioso y obtener acceso a la raíz la próxima vez que ejecute actualizaciones de todos modos. Estoy seguro de que hay una larga lista de archivos protegidos por root para los que se aplica algo similar. Y, por supuesto, no todos los virus requieren root; uno podría obtener sus datos bancarios con solo una extensión de navegador.
GKFX