VIM: "sudo vim bad_idea"?

20

Un usuario de irc en #Vim me instó a no usar Sudo con Vim como:

sudo vim bad_idea

Cuando estoy haciendo cosas en ubicaciones como / var / www /, no puedo escribir sin él. Entonces, no usar sudo se convierte en un problema. Por supuesto, podría hacer cambios en diferentes ubicaciones como / tmp / y luego copiar directorios a / var / www. Sin embargo, siento una forma más fácil.

  1. Si no "sudo Vim", ¿por qué?
  2. En caso afirmativo a la primera pregunta, ¿cómo evita los problemas para no usar sudo?
Léo Léopold Hertz 준영
fuente

Respuestas:

35

Caigo en la primera categoría: sudo vim /var/www/html/some_filees una mala idea; permite escapes de shell que no están registrados. En cambio, use sudoedit /var/www/html/some_file; eso tiene el mismo efecto.

Kevin M
fuente
55
¿Qué son los "escapes de shell que no están registrados"? y por qué no solo importa en / var / www?
hasen
66
vim tiene el poder de ejecutar otros comandos en una línea de comandos. Sin embargo, debido a que vim se inició a través de sudo y, por lo tanto, se ejecuta como root, cualquiera de esos comandos se ejecutará con privilegios de root. Estos comandos se conocen como "escapes de shell" y no se registran de la misma manera que otras invocaciones de sudo. Y no está restringido a solo / var / www; está en todas partes donde lo usaría. Incluso he alias "sudo vi" a "sudoedit" en mi archivo bashrc.
Kevin M
Veo a qué te refieres y quiero estar de acuerdo pero aclarar. No tenemos idea de si sus actividades normales su y sudo root se están registrando o no. "sudo vim" permite ejecutar un subshell como root, eso es exacto; dentro de ese shell, "sudo" no controlará lo que root puede y no puede hacer.
pbr
3
Kevin, ¿cómo lograste alias "sudo vi" a "sudoedit"? Del manual de bash ... "Los caracteres /, $,`, y = y cualquiera de los metacaracteres de shell o caracteres de comillas enumerados anteriormente pueden no aparecer en un nombre de alias ". ... el espacio es uno de esos metacaracteres de los que habla.
pbr
99
OK, entonces no es un alias per se, pero tiene el mismo efecto: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || comando sudo "$ @"; } '
Kevin M
10

Consulte: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% se reemplaza con el nombre del archivo actual, por lo que puede usar:

: w! sudo tee%

hiperslug
fuente
Si va a usar tee, sugeriría ': w! Sudo tee%> / dev / null' para que no vea todo el archivo reflejado. Normalmente uso ': w! Dd of =%' en su lugar, ya que es más rápido de escribir y logra lo mismo. Por supuesto, esto es solo cuando me he olvidado de usar sudoedit / sudo -e.
jamessan el
7

vim permite a los usuarios ejecutar comandos de shell arbitrarios, por lo tanto, muchos administradores del sistema no permiten que vim se use con sudo.

rvim se incluye con vim. Es un vim restringido, que no permite comandos de shell. (O le permite suspender vim, por las mismas razones).

Es discutible si necesita llegar a esos extremos en su propia caja.

Richard Hoskins
fuente
1
+1. Completamente de acuerdo. sudo vimluego ingrese :!bashy tendrá un shell como root - exactamente por qué rvimexiste
dbr
3
En realidad, si puedes sudo vim, ¿puedes sudo basho sudo su -no?
dlamblin
Los privilegios de @diamblin se pueden reunir con detalles más finos que eso, por lo que no necesariamente. Por eso se necesita rvim. "sudo vim" es lo mismo que "sudo su -" para todos los efectos. Sin embargo, en una caja de bits de Debian donde el único usuario es el administrador del sistema, todo esto es académico.
Richard Hoskins
¿Cómo trata ubuntu este problema? En vilanzamientos CentOS vimpero como vilanzamientos de root vi. En Ubuntu vimse usa en ambos casos y sudo vitambién se inicia vim...
cwd
6

Cuando edite archivos de configuración de todo el sistema, está totalmente bien, solo recuerde siempre que es root y, por lo tanto, tiene todo el poder y deje esos privilegios tan pronto como ya no los necesite.

En el caso especial /var/www/, es decir, las páginas del servidor web, es posible que desee pensar en cambiar algunas propiedades / grupos / permisos --- pero si depende en gran medida de su configuración particular (usuario único / multiusuario, servidor web real / solo localhost, dinámico / estática, etc.)

balpha
fuente
66
+1 de hecho: esta es la mejor manera de manejar las páginas del servidor web. Asegúrese de tener acceso a ellos en lugar de elevar sus privilegios.
bedwyr
1
-1 no hay razón para ejecutar vim con privilegios elevados cuando sudoedit hará el mismo trabajo.
sml
4

Una pregunta como esta me hace golpearme la frente. Estoy del otro lado de la seguridad, "la seguridad no debe interferir con la experiencia del usuario, a menos que se espere o se requiera para evitar que la persona promedio realice actividades maliciosas".

Prevenir el uso de sudo de vim es solo una curita. Como se dijo anteriormente, alguien puede usar:

sudo su -

O

sudo /bin/bash

O

sudo nano file

O

sudo my_exectuable_text_editor file

ect

Si realmente le preocupa que alguien haga algo malicioso en la caja, no le otorgue privilegios de sudo (o contraseña de root, obviamente), punto. No hay una bala de astillas para evitar actividades maliciosas usando sudo y solo se volverá loco al "aplicar" todas las "soluciones" para asegurarse de que una persona no pueda hacer nada malicioso.

Alguien mencionó el cambio de propiedad / grupos. Este es un problema difícil, ya que si el servidor web se ejecuta como otro usuario y usted cambia los permisos en el archivo, de repente su sitio no funciona. Bueno, obviamente eso no te ayudará. Puede agregarse al grupo que ejecuta el servidor web, sin embargo, si el grupo no tiene acceso de escritura a los archivos, necesitará ejecutar chmod -R g + w * (o archivos individuales de chmod) que pueden no ser lo que quiere y puede ser una molestia si tiene que modificar cada archivo.

Algunas personas incluso sugirieron usar rvim. Claro, uno podría simplemente agregar una línea en / etc / sudoers para permitir que ciertos usuarios solo sudo rvim, sin embargo, lógicamente se mantendría que si tuviera que ir por esa ruta, podría ser mejor implementar un administrador de archivos basado en la web. De esta forma, se ejecuta como el usuario del servidor web, por lo que no hay problemas de permisos de archivos y aún puede tener un control granular sobre quién edita qué archivos.

Mis dos centavos de todos modos.

Natalie Adams
fuente
2

La ejecución sudo vimno cambiará el $HOMEdirectorio, por lo que ejecutará Vim con permisos de root, pero $HOMEaún señala a su usuario normal.

Si es la primera vez que ejecuta Vim, puede suceder que el ~/.viminfoarchivo se cree dentro de su directorio de usuario normal, pero con permisos de root.

Denilson Sá Maia
fuente
1
Depende del sudo. En mi computadora portátil sudo vim -c '!echo $HOME' -c qda mi carpeta de inicio, pero en mi servidor da /root. Es posible que tenga que echar un vistazo a por qué es así, podría ser porque el OS X de uno es Gentoo del otro, o podría ser algo relacionado con la /etc/sudoersconfiguración.
Nemo157
aha! tienes razón: terminé aquí preguntándome por qué mi solo .viminfoera accesible desde la raíz.
Ayrat
1

SI ESTE ES SU PROPIO ORDENADOR ... No veo ninguna razón por la que no pueda usar 'sudo vim', aparte del caso límite que Denilson señaló: que podría crear su ~ / .viminfo propiedad de root.

Si no , si un administrador de sistemas está restringiendo lo que puede y no puede hacer, por "man sudo": "en la mayoría de los sistemas es posible evitar escapes de shell con la funcionalidad noexec de sudo. Consulte el manual de sudoers (5) para más detalles. "

Entonces, en este caso, si su administrador de sistemas está preocupado por el potencial de que usted ejecute subshells como root desde vim, puede usar la capacidad noexec. Pero ... volviendo al caso inicial: si esta es SU computadora, creo que es bastante seguro ejecutar 'sudo vim'.

pbr
fuente