¿Puede haber algún problema al usar gedit para editar archivos del sistema con 'sudo -H gedit'?

10

Soy relativamente nuevo en Ubuntu, noté que en las respuestas de este sitio, cuando la gente sugiere editar archivos del sistema, el comando que dan es siempre sudo nanoo sudo vi. Debido a que no me gusta usar editores de texto basados ​​en terminales, generalmente uso

sudo -H gedit

en cambio, y hasta ahora funcionó perfectamente bien.

¿Puede haber algún problema con el uso geditpara editar archivos del sistema o la elección del editor de texto depende exclusivamente de la preferencia de la persona? ¿Hay algo que deba tener en cuenta (como la codificación) al editar estos archivos?

shinobody
fuente
3
La -Hparte es importante , no la use sudopara iniciar aplicaciones GUI sin ella.
pomsky

Respuestas:

10

Siempre que lo ejecute correctamente, es una cuestión de su preferencia.

Además de las diferencias en las características , el editor de texto que usa es, de hecho, más o menos su preferencia. Esto es cierto incluso cuando su editor de texto es un programa gráfico como Gedit . Esto no quiere decir que no haya una buena razón nanoy vim, a menudo, se recomiendan. Los editores de texto basados ​​en terminales tienen gusto vim(o al menos un vicomando) y nanoestán disponibles incluso cuando no hay GUI e incluso en la mayoría de los sistemas mínimos y rotos ; tienen algo de tradición detrás de ellos (si eres partidario de ese tipo de cosas); pueden ejecutarse en la misma terminal en la que se realizan otras tareas; se integran automáticamente en los flujos de trabajo de los usuarios del multiplexor terminal ; y es más probable que estén disponibles que cualquier otroeditor de texto gráfico particular , incluso Gedit, incluso en Ubuntu (que tiene varios sabores ).

Eso no es todo. Si va a editar archivos del sistema, un enfoque es ejecutar su editor como root. Este no es el único enfoque, y hay algunos argumentos en contra (ver más abajo), pero es uno común. Si adopta ese enfoque y utiliza un programa gráfico como su editor, debe tener cuidado de ejecutarlo de tal manera que $HOMEsea ​​el directorio de inicio de la raíz en lugar del suyo , y esto agrega otra capa de problemas y complejidad. Pero ya lo estás haciendo; estás corriendo sudo -H gedit, que es una de las formas razonables . Aún así, esa complejidad es otra razón por la cual las personas tienden a sugerir editores no gráficos.

Los programas gráficos son a menudo más complicados que los programas no gráficos. Tener más cosas ejecutadas como root es generalmente malo, ya que hay más formas en que las cosas podrían salir mal, incluso debido a posibles errores, incluso por accidente. (Sin vimembargo, los editores de texto no gráficos, como también son bastante sofisticados, y a menudo están configurados para ejecutar numerosos programas externos para realizar diversas tareas).

Además de ejecutar el editor como root, otro enfoque general es editar un archivo que el editor puede modificar incluso cuando se ejecuta como su usuario (no root), de modo que los cambios en el archivo se propaguen al archivo propiedad de root que desee cambiar. Eso suena abstracto porque los detalles varían considerablemente. A continuación se presentan dos enfoques concretos importantes.

sudoedit

Una forma bastante antigua de hacer esto es sudoedit(documentada en la misma página del manual quesudo ). De manera predeterminada, sudoeditutiliza el editor de texto predeterminado , que generalmente no es, y no debería ser, un programa gráfico. Pero se puede decir que para utilizar cualquier editor a través de los SUDO_EDITOR, VISUALo EDITOR variables de entorno , que se consulta en ese orden. Así puedes ejecutar:

VISUAL=gedit sudoedit filename

Reemplace filenamecon una ruta relativa o absoluta a su archivo.

Esto hace una copia temporal del archivo que desea editar. La copia es propiedad de usted, no de la raíz (o de quien sea el propietario original). Abre el editor de texto y puede editar la copia temporal. Cuando cierra el editor de texto, sudoeditcomprueba si realmente realizó cambios. Si lo hizo, copia la copia temporal modificada de nuevo al original.

Si bien sudoeditfunciona con editores gráficos, también es útil para editores basados ​​en terminales. En ambos casos, se ejecuta el editor de texto como usted, por lo que tiene su configuración, y otras acciones que realice en ella otra de las modificaciones realizadas a ese archivo se llevan a cabo por usted, que ofrece un poco de protección contra algunos tipos de errores.

Puede establecer una de esas variables de entorno de forma persistente si lo desea. SUDO_EDITORes quizás el mejor ya que se usa para menos otras cosas. Sin embargo, si lo configura gedit, tenga en cuenta que los comandos como no funcionarán cuando no haya una GUI disponible, como suele ser el caso (aunque no siempre ) en una consola virtual o mediante SSH .sudoedit filename

El servidor de administración de GVFS

Otra forma más nueva de hacer esto es abrir el archivo a través de su admin://ruta GVFS en lugar de su ruta tradicional de estilo Unix. Gracias a pomsky por enseñarme sobre esto. Del mismo modo que hay rutas GVFS para editar archivos que, en otros aspectos, no están en un lugar conveniente para editar, por ejemplo, porque están en una máquina remota a la que está conectado a través de SSH, GVFS admite admin://rutas para editar archivos usted no posee

Esto es conceptualmente similar a sudoeditque ejecuta su editor como usted mismo y el archivo que ve el editor es algo que se le permite editar. Intentar abrir el archivo requiere que se autentique; Esta no es una forma mágica de eludir las restricciones de seguridad habituales.

gedit admin:///path/to/filename

No, /path/to/filenamedebe haber una ruta absoluta al archivo, a partir de /. Entonces hay tres /personajes después admin:.

Codificaciones y otras cosas teóricamente afectadas por la configuración del editor

La codificación de un archivo no se ve realmente afectada por si el editor que usa es o no gráfico. Algunos editores, como vim, incluso pueden operar gráficamente (el gvimcomando) o no gráficamente (el vimcomando). La respuesta simple a su pregunta sobre las codificaciones es que no tiene que preocuparse por eso. Eso está lo suficientemente cerca de la verdad como para no tener que leer el resto de esta respuesta.

En las versiones actuales (y pasadas) de Ubuntu, los comandos les gusta sudo nanoy sudo vimejecutan esos editores como root, pero $HOMEaún se han configurado en su directorio de inicio. Esto significa que los editores, por defecto, usarán su configuración en lugar de la configuración de la raíz. Si hay algo en su configuración de esos editores (o en un programa que ejecutan para hacer parte de su trabajo, como git) sobre codificaciones o terminaciones de línea , se seguirá. Con eso no sucederá.sudo -H editor

Algunas personas usan desnudos sudo(es decir, sin -io -H) para los editores porque quieren eso. Pero realmente, deberías pensar dos veces sobre esto. No solo puede lograr ese objetivo de manera más limpia con un método como sudoedit, también hay otras desventajas de comandos como sudo nanoy sudo vim:

  • Si la configuración de su editor hace que se ejecute algo, se ejecuta como root. Para editores sofisticados como vim, esto puede hacer que se ejecute una gran cantidad de código no trivial como root. Como se mencionó anteriormente, tener menos código ejecutado como root es generalmente bueno y este es uno de los argumentos en contra de ejecutar editores gráficos como root.

    Si su vimconfiguración tiene numerosos complementos, por ejemplo, para realizar un análisis estático en el código fuente a medida que lo escribe, y la raíz no lo hace, menos cosas se ejecutan como raíz que . (¡Incluso se ejecuta menos como root , pero sus complementos aún funcionan!) Esto es independiente de si su editor es o no gráfico.sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • Si la configuración de su editor está rota y le impide editar archivos fácilmente, entonces arreglar eso puede ser aún más complicado, ya que también se aplica a la raíz. Esto es simplemente una molestia, no un problema difícil de resolver.

  • Los comandos como sudo vimtienen un poco del mismo problema que el comando (¡mal aconsejado!) sudo gedit. Si ejecuta un editor vimcomo root pero sin reiniciar $HOME(como sudo -Hy sudo -ilo haría), y crea archivos de configuración para sí mismo , esos archivos de configuración residirán en su directorio de inicio pero serán propiedad de root, y su configuración puede estar algo rota cuando luego ejecutas el editor como tú mismo.

    Bueno, ¡esto suena muy parecido a ese problema! La razón por la que es menos importante que con las aplicaciones gráficas es que el editor generalmente todavía se inicia, los mensajes de error suelen ser más fáciles de entender, por lo general puede averiguar qué archivos específicos se ven afectados mucho más fácilmente, y la rotura generalmente se limita a ese programa (Los programas gráficos usan archivos de configuración en más lugares). Además, a diferencia de los editores gráficos, los usuarios que solo usan casualmente un editor de texto y no cambian deliberadamente su configuración tienen pocas probabilidades de experimentar este problema.

Nuevamente, puede usar la configuración del editor de su propia cuenta de usuario mientras evita los problemas de permisos usando sudoedito, desde el escritorio, iniciando el editor normalmente pero accediendo al archivo a través de una admin://ruta.

Finalmente, tenga en cuenta que el comportamiento antes mencionado de sudocuándo -Ho cuándo -ise pasa está planeado para cambiar en una versión futura de Ubuntu (como ya lo ha hecho, hace años, en la mayoría de los sistemas operativos similares a Unix que usan sudo). El comportamiento ya ha cambiado en Ubuntu 19.10 , que es la versión de desarrollo a partir de este escrito.

Eliah Kagan
fuente
2
El otro problema con sudo -Hes 1 vez de 100 o 1000 que olvidará -Hy la propiedad de un archivo podría transferirse del usuario a la raíz en $HOMEalgún lugar.
WinEunuuchs2Unix
3

Para responder a su pregunta: en general, usar un editor de GUI no será un problema, además de geditser muy lento para archivos grandes.

Pero para los programas GUI que usaría pkexeco en gksulugar de sudo. Es posible que deba configurarpkexec antes de que funcione.

pkexec gedit

o para versiones anteriores de Ubuntu (por ejemplo, 16.04) puede usar:

gksu gedit

(Aunque podría probar mejores editores de GUI, por ejemplo geany;-))

pLumo
fuente
gksuestá prácticamente descartado.
pomsky
pkexec......
Rinzwind
true true true ....
pLumo
3
Esto debería ayudar (@eliah)
pomsky
1
Para elaborar sobre el comentario de pomsky. Si se rechaza una conexión, se muestra un error, deberá configurar un alias para esto:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid