Cómo editar un archivo de sistema con sudoedit preservar el entorno de usuario invocador

Cómo editar un archivo de sistema con sudoedit preservar el entorno de usuario invocador

En Linux y otros sistemas operativos basados ​​en UNIX, sudo se utiliza para ejecutar un programa con los privilegios de otro usuario, a menudo root. Cuando necesitamos modificar un archivo que requiera que se editen los privilegios administrativos, si lanzamos nuestro editor de texto favorito directamente con sudo, se ejecutará sin la personalización y la configuración que usamos cuando lo invocamos normalmente, ya que el entorno del usuario invocador es es no conservado. En este tutorial veremos cómo podemos resolver fácilmente este problema y cómo podemos modificar los archivos del sistema de forma segura utilizando sudoedit.

En este tutorial aprenderás:

  • Cómo editar un archivo de sistema usando sudoedit
  • ¿Cuáles son los pasos realizados cuando un archivo se edita con sudoedit?
  • Cómo establecer el editor predeterminado utilizado por sudo

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Distribución independiente
Software sudo
Otro Ninguno
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Comportamiento estándar de sudo

La mayoría de las distribuciones de Linux están configuradas para que la forma principal de lograr privilegios raíz sea usar sudo. El uso de sudo nos otorga una serie de privilegios sobre SU, el principal es que los privilegios específicos se pueden otorgar a un usuario sin tener que darle acceso raíz completo.

Sudo se puede ajustar a través del /etc/sudoers archivo; Dado que este archivo es muy importante, debe editarse utilizando el visudo Comando, que asegura que no hay errores de sintaxis presentes antes de guardar los cambios.

En la gran mayoría de los casos, cuando se ejecuta un comando con sudo, el entorno de usuario invocador no se conserva, por lo que, por ejemplo, si invocamos a nuestro editor usando sudo para modificar un archivo de sistema propiedad de root, se ejecutará ignorando nuestra configuración personal. Esto puede ser bastante inconveniente, y en ciertos casos ejecutar un editor con privilegios escalados puede plantear algunos problemas de seguridad. Veamos qué podemos hacer, en su lugar.



El problema: el editor se inicia sin configuraciones definidas por el usuario

Supongamos que debemos editar un archivo con privilegios administrativos, por ejemplo, /etc/fstab, que es donde se almacena la información estática sobre los sistemas de archivos en Linux. Si usamos nuestro editor de texto favorito y lo invocamos directamente usando sudo,
La personalización que establecemos (generalmente a través de los dotfiles apropiados almacenados en nuestro HOGAR directorio) no será honrado, ya que el entorno de usuario invocador no se conserva.

Veamos un ejemplo. Digamos que nuestro editor favorito es Vim y en nuestro ~/.vimrc Archivo Ingresamos al numero Directiva que hace que se muestren los números de línea. Si editamos el /etc/fstab Archivo Invocando al editor directamente con sudo, podemos ver que la configuración no es efectiva:

$ sudo vim /etc /fstab 

El archivo se abrirá en el editor, y lo siguiente es lo que se mostrará. El contenido del archivo no nos importa en este caso, por lo que está truncado:

# #/etc/fstab # # Los sistemas de archivos accesibles, por referencia, se mantienen en '/dev/disk/'. # Consulte las páginas del hombre fstab (5), findfs (8), montaje (8) y/o blkid (8) para obtener más información. # # Después de editar este archivo, ejecute 'SystemCTL Daemon-Reload' para actualizar Systemd # Unidades generadas a partir de este archivo. # /dev /mapper /fingolfin_vg-root_lv /ext4 defaults, x-systemd.Tiempo de tiempo del dispositivo = 0 1 1 UUID = B308FBE5-68A6-4142-82DE-BA1DC3380484 /BOOT EXT2 Valores predeterminados 1 2 […] 

Como puede ver los números de línea no se muestran. Lo anterior es solo un ejemplo y probablemente las personalizaciones de nuestra editor van mucho más allá de eso. ¿Cómo podemos resolver este problema??

La solución: usando sudoedit

Para resolver el problema que ilustramos anteriormente, simplemente podemos usar sudoedit en lugar de sudo. Usando sudoedit es el equivalente de invocar sudo con el -mi opción, que es la abreviatura de --editar. Como se indica en el sudo Manual, esta opción básicamente significa: "Editar un archivo en lugar de ejecutar un comando".

Cuando se utiliza esta estrategia y el usuario invocador puede realizar la acción por la política del sistema, se realizará una serie de pasos. En primer lugar, un temporario Se crea la copia del archivo que queremos editar. El archivo temporal será propiedad del usuario invocador, por lo que no se requerirán privilegios administrativos para modificarlo.

El archivo temporal se abrirá en el editor de texto predeterminado. El editor predeterminado se establece a través de algunas variables, que se leen en un orden específico. Ellos son:

  1. Sudo_editor
  2. VISUAL
  3. EDITOR

Dependiendo de la distribución y el shell que estamos utilizando, el valor de estas variables se puede establecer permanentemente en el ~/.bash_profile (solo obtenido por el caparazón) o el ~/.perfil archivo. Para establecer empuje Como nuestro editor predeterminado, por ejemplo, escribiríamos:

Exportar sudo_editor =/usr/bin/vim 



Observe que usamos el exportar shell incorporado antes de la definición de variable: es necesario exportar la variable en sí a todos los procesos infantiles del shell. Los cambios no serán efectivos de inmediato: debemos iniciar sesión e iniciar sesión nuevamente,
o obtener el archivo modificado "manualmente":

$ fuente ~/.bash_profile 

Si ninguna de estas variables se establece, el primer editor especificado como el valor del editor opción en el archivo sudoers (/etc/sudoers) se utilizará.

Una vez que se guarda el archivo que modificamos (se creará desde cero si ya no existe), y el editor está cerrado, se copiará nuevamente a la posición original y el archivo temporal se eliminará. Se le solicitará al usuario a
confirme la acción si el archivo editado se vacía; Esta es una medida de seguridad adicional y muy útil, que puede evitar errores catastróficos:

sudoedit: truncate /etc /fstab a cero bytes? (y/n) [n] n sudoedit: no sobrescribir/etc/fstab 

Desde que se usa sudoedit en lugar de sudo Se conserva el entorno del usuario invocador y el archivo se edita como el usuario mismo y no como root, podremos usar nuestro editor con toda la personalización que establecemos, incluidos complementos cargados.

Conclusiones

En este tutorial, aprendimos cómo es posible editar un archivo que requiere modificar los privilegios administrativos mientras mantiene el entorno de usuario invocador usando sudoedit en lugar de sudo. Vimos cuáles son las ventajas de este enfoque, cuáles son los pasos realizados cuando se adopta y cómo establecer el editor predeterminado utilizado por sudo.

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas para instalar en Ubuntu 20.04
  • Mastering Bash Script Loops
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Manejo de la entrada del usuario en scripts bash
  • Cómo eliminar el bloatware de su móvil Samsung Android ..
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Cómo crear modificar y eliminar la cuenta de usuarios en Linux