¿Por qué los usuarios nunca deberían usar sudo normal para iniciar aplicaciones gráficas?

¿Por qué los usuarios nunca deberían usar sudo normal para iniciar aplicaciones gráficas?

he leídola documentación comunitaria "RootSudo"y estoy interesado en esta línea:

Deberíanuncause sudo normal para iniciar aplicaciones gráficas como Root.

¿Por qué? ¿Cuál es la diferencia? Proporcione una explicación sencilla, ya que solo soy un usuario normal de escritorio.

Respuesta1

En Ubuntu 19.10 y posteriores, la advertencia enese artículo(y en esta respuesta) ya no se aplica. VerLa respuesta de WinEunuuchs2Unixasí comoesta pregunta.

Las aplicaciones gráficas a menudo almacenan configuraciones y otros datos específicos del usuario en archivos de configuración escritos dentro del archivo del usuario.carpeta de inicio. El mecanismo principal que utilizan las aplicaciones para determinar qué deben usar como carpeta de inicio del usuario es elHOME Variable ambiental. (Puedes inspeccionarlo tú mismo con echo $HOME).

Supongamos que estás corriendogedit(un editor de texto gráfico) comoroot. Si corres sudo gedit, HOMEseguirá apuntando haciasudirectorio de inicio, aunque el programa se esté ejecutandocomoroot. En consecuencia, geditescribirá archivos de configuración.comorooten su directorio personal. Estea veces resultaráen los archivos de configuración que estánpropiedadporrooty por lo tantoinaccesible para ti(cuando luego ejecute el programa como usted mismo y no como root). Esto sucede principalmente cuando la aplicación tiene que crear un nuevo archivo de configuración. Los archivos recién creados, de forma predeterminada, son propiedad del usuario que los crea (que en este caso es root, no usted).

Esa es la razón principal por la que deberías ejecutar aplicaciones gráficas con una sudointerfaz gráfica en lugar de directamente sudo. En Ubuntu y la mayoría de sus derivados (incluidos Xubuntu y Lubuntu), la interfaz gráfica estándar esgksu/gksudo. En Kubuntu eskdesudo. (Depende deentorno de escritoriosiendo utilizado.)

Si usteddesearPara usar sudodirectamente para ejecutar una aplicación gráfica como gedit, puede ejecutar:

sudo -H gedit

La -Hbandera se configura sudopara HOMEapuntar a rootla carpeta de inicio de (que es/root).

Eso todavía no manejará automáticamente la propiedad de.Xauthoritycopiándolo en una carpeta temporal (esta es la otra cosa que sudolas interfaces gráficas se encargan por usted). Pero en el caso poco frecuente de que .Xauthoritysea inaccesible, recibirá un error que lo indica y luego podrá solucionar el problema eliminándolo ( sudo rm ~/.Xauthority), ya que se regenera automáticamente. Por lo tanto, proteger .Xauthorityla propiedad y los permisos de es menos importante que proteger la propiedad y los permisos de los archivos de configuración.

A diferencia de a root-owned .Xauthority, cuando los archivos de configuración pasan a ser propiedad de root, no siempre es tan obvio cuál es el problema (porque los programas gráficos a menudo se ejecutan, pero no funcionan muy bien y generan errores útiles en la consola). Y a veces es más complicado solucionarlo, especialmentesi se encuentra en una situación en la que desea que uno o más archivos en su directorio personal sean propiedad de alguien que no sea usted(porque entonces no puedes solucionarlo simplemente devolviendo chowntodos tus archivos de forma recursiva a ti mismo).

Por lo tanto, sudo(al menos sin -H) no debe usarse para ejecutar una aplicación gráfica.a menos queEstá muy familiarizado con el funcionamiento interno de la aplicación y sabe con certeza que nunca intenta escribir ningún archivo de configuración.

Respuesta2

Simplemente pon:

Esto evita que los archivos de su directorio personal pasen a ser propiedad del root.

Léeloaquí. Además, posiblemente un duplicado de¿Cuál es la diferencia entre "gksudo nautilus" y "sudo nautilus"?

Respuesta3

Actualización de Ubuntu 19.10

A partir deubuntu 19.10, escribir sudo some_commandahora tiene el mismo efecto que escribir sudo -H some_command. Esto significa que el directorio para cualquier archivo de configuración tocado estará en /rootel directorio y no en /home/regular_userIDel directorio (también conocido como $HOME).

Esto hace que todas estas preguntas y respuestas sean un punto discutible en gran medida para los usuarios de Ubuntu 19.10 y superiores.

Para ver si sudofunciona como sudo -Hen su distribución, pruebe estas breves pruebas:

$ sudo printenv | grep HOME
HOME=/home/rick

$ sudo -H printenv | grep HOME
HOME=/root

Como puede ver, sudolo anterior no funciona así sudo -H, por lo que el uso simple sudopuede dañar los archivos de configuración de usuario.


Una alternativa a gksu nautilus, gksu gedito sudo -H gedites utilizar el nautilus-admincomplemento. Le permite explorar archivos y directorios conNautiloy luego ábralos como root (Administrador).

La instalación es sencilla:

sudo apt install nautilus-admin

Ahora, cuando estés en Nautilus, tendrás una opción adicional para Editar como administrador:

nautilus admin.gif


geditcomo root no permite preferencias

Cuando ejecuta geditcomo root, no puede usar las preferencias que ha configurado como usuario normal para tabulaciones, convertir tabulaciones a espacios, nombre de fuente, tamaño de fuente, ajuste de línea, etc.

Para resolver esto, escribí el script sgeditpara heredar las preferencias del usuario y aplicarlas al root:¿Cómo puedo sincronizar mi gedit raíz con las preferencias de mi usuario gedit?

  • Llamar usandosgedit filename1 filename2 ...
  • Obtiene la configuración de gedit del usuario para tabulaciones, fuentes, ajuste de línea, etc.
  • Se eleva a sudo -Hpara preservar la propiedad del archivo mientras obtiene poderes de root.
  • Solicita la contraseña si la última sudoha expirado.
  • Obtiene la configuración gedit de sudo
  • Compara las diferencias entre la configuración de usuario y sudo gedit
  • Ejecuta gsettings configurado solo en las diferencias (reduce 174 comandos de configuración a una docena o menos. La próxima vez se ejecuta quizás solo uno o dos cambios, pero muchas veces ningún cambio.
  • Llama geditcomo tarea en segundo plano, de modo que el mensaje del terminal reaparece inmediatamente.

información relacionada