visudo, vipw y vigr: editando ficheros críticos en Linux de forma segura

visudoSiguiendo con el tema tratado en el anterior post sobre como encontrar fallos e inconsistencias en los ficheros passwd y shadow, vamos a ver como a la hora de editar ciertos ficheros críticos del sistema debemos asegurarnos de hacerlo de forma correcta. Ficheros como /etc/passwd, /etc/group, /etc/shadow o /etc/sudoers pueden editarse ‘al vuelo‘ con un editor normal (gedit, vi, vim, nano…) pero corremos el peligro de que mientras lo estamos editando sus datos se hayan actualizado y se pierdan los cambios.

visudo

El comando visudo permite modificar en modo seguro el fichero /etc/sudoers. La diferencia de editarlo con visudo a hacerlo con cualquier otro editor es que visudo bloquea el fichero para evitar ediciones simultaneas. Otro punto a favor de editar sudoers de esta forma es que en el momento de guardar los cambios realiza un chequeo del fichero en busca de fallos de sintaxis y todo tipo de errores, y en caso de encontrarlos no nos permitirá guardar el fichero y nos indicará el número de línea donde se encuentra el error, permitiéndonos editar el fichero o salir sin guardar.

# visudo

Durante la edición:

$ ls -l /etc/sudoers*
-r--r----- 1 root root  574 2011-04-15 19:02 /etc/sudoers
-rw------- 1 root root  574 2011-04-15 19:02 /etc/sudoers.tmp

Y en el caso de que cometamos un fallo en la sintaxis dentro del archivo, al guardar nos avisa del problema:

# visudo
>>> /etc/sudoers: syntax error near line 9 <<<
What now? 
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)

vipw y vigr

Los comandos vipw y vigr permiten editar los ficheros /etc/passwd y /etc/group respectivamente de forma segura. Si quisiéramos editar el fichero /etc/shadow y /etc/gshadow deberíamos utilizar el parámetro -s.

Cabe decir que es recomendable evitar la manipulación directa de estos ficheros y que es conveniente usar los comandos correspondientes para gestión de usuarios: crear, eliminar y modificar usuarios de sistema en Unix. Si fuera estrictamente necesario, la modificación de passwd y shadow sería del siguiente modo:

Primero editamos el fichero /etc/passwd:

# vipw
Ha modificado /etc/passwd.
Necesitará modificar /etc/shadow por consistencia.
Use la orden «vipw -s» para hacerlo.

Y posteriormente editamos el fichero shadow y gshadow:

# vipw -s
vipw: /etc/shadow no está cambiado

El bloqueo durante la ejecución:

$ ls -l /etc/passwd*
-rw-r--r-- 1 root root 1851 2014-12-18 19:29 /etc/passwd
-rw-r--r-- 1 root root 1852 2014-12-18 19:29 /etc/passwd-
-rw-r--r-- 1 root root 1851 2014-12-18 19:29 /etc/passwd.edit
-rw------- 1 root root    5 2014-12-18 19:30 /etc/passwd.lock

Si no quisiéramos editar el fichero shadow a mano podemos decirle al sistema que lo actualice de forma automática con el comando pwconv:

# pwconv

Y lo mismo cuando editamos grupos con vigr, para evitar la modificación manual de gshadow podemos usar grpconv:

# grpconv

Al igual que con visudo, vigr y vipw bloquean los ficheros para evitar que puedan ser editados a la vez. Para evitar esto se crea un fichero temporal /etc/ptmp y se deshabilita la escritura del mismo.

Os recomiendo revisar las páginas man de los comandos para encontrar información más detallada sobre el funcionamiento y posibilidades de cada uno de ellos.

Un comentario en “visudo, vipw y vigr: editando ficheros críticos en Linux de forma segura

  1. Hola.
    ¿Cómo se usa “visudo” con otros archivos?
    ¿El editor Nano estilo Terminal tiene mismas cualidades?

    He editado a través de Pluma (editor de texto de Linux Mint), ¿cómo saber si efctuó incongruencias o errores sobre los ficheros que editó?
    Hay ficheros que no se dejan abrir en modo de solo lectura (sin permiso de administrador), y los permite abrir solo en modo administrador, es decir logueandose con comando sudo. Si el usuario equivoca, podría salvar un cambio no esperado por error.

    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *