Linux, Seguridad · 5 min read · Nov 14, 2025
Cómo permitir que los usuarios editen archivos de forma segura usando sudoedit en Linux
Supongamos que eres un administrador de sistemas en una empresa donde los equipos trabajan principalmente en Linux con privilegios limitados. Ahora imagina una situación en la que los miembros de uno de los equipos, como parte de un nuevo trabajo, necesitan editar frecuentemente un archivo que requiere privilegios de superusuario. ¿Qué harías?
Una opción es darles acceso a ‘sudo’, pero eso sería como darle a un extraño acceso a toda tu casa cuando todo lo que necesitan es estar en una de tus habitaciones; lo que quiero decir es que el acceso predeterminado de ‘sudo’ les permitirá hacer cualquier cosa que requiera privilegios de root, cuando todo lo que se requiere es la capacidad de editar un cierto archivo del sistema.
Dada la flexibilidad que ofrece ‘sudo’, la otra opción que tienes es ajustar la política de ‘sudo’ de manera que solo se otorgue el privilegio de editar el archivo en cuestión. Por ejemplo, algo como esto:
%newsudo ALL = vim /path/to/fileSi bien eso es sin duda una solución mucho mejor que proporcionar el acceso completo a sudo, todavía hay una laguna que alguien podría explotar.
Para entender de qué estoy hablando, considera un escenario en el que se proporciona el acceso limitado mencionado anteriormente al grupo, y alguien abre el archivo en cuestión para editarlo usando el comando ‘sudo’.
Ahora, una mente astuta con buen conocimiento de vim sabría que puede lanzar un nuevo shell desde dentro del editor; todo lo que tiene que hacer es ejecutar el siguiente comando de vim:
:shellEsto te colocará instantáneamente en un shell interactivo. Si estás probando estos pasos en tu máquina, simplemente ejecuta el comando ‘whoami’ y entenderás de qué laguna estaba hablando - Sí, estás en el shell como root.
Aquí hay un ejemplo de captura de pantalla:

No hace falta decir que el propósito de proporcionar acceso de edición a solo un archivo se ha visto frustrado, y el usuario puede hacer CUALQUIER COSA ahora.
Veamos si hay alguna otra opción que tengamos. Existe una etiqueta NOEXEC que puedes usar en tu entrada de sudoers:
%newsudo ALL = NOEXEC: vim /path/to/fileNOEXEC básicamente te permite evitar que un programa ejecutado por sudo ejecute cualquier otro programa. Entonces, ¿es esta la solución definitiva? Lamentablemente no. En cuanto a las razones, aquí está cómo el manual de sudoers explica esta etiqueta:
noexec
Muchos sistemas que admiten bibliotecas compartidas tienen la capacidad de anular funciones de biblioteca predeterminadas apuntando una variable de entorno (generalmente LD_PRELOAD) a una biblioteca compartida alternativa. En tales sistemas, la funcionalidad noexec de sudo se puede usar para evitar que un programa ejecutado por sudo ejecute otros programas. Sin embargo, ten en cuenta que esto se aplica solo a ejecutables nativos vinculados dinámicamente. Los ejecutables vinculados estáticamente y los ejecutables extranjeros que se ejecutan bajo emulación binaria no se ven afectados.
La función noexec se sabe que funciona en SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x y AIX 5.3 y superiores.
...
...
...
Para habilitar noexec para un comando, usa la etiqueta NOEXEC como se documenta en la sección de Especificación del Usuario anterior. Aquí está ese ejemplo nuevamente:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Esto permite al usuario aaron ejecutar /usr/bin/more y /usr/bin/vi con noexec habilitado. Esto evitará que esos dos comandos ejecuten otros comandos (como un shell). Si no estás seguro de si tu sistema es capaz de soportar noexec, siempre puedes probarlo y verificar si las escapadas de shell funcionan cuando noexec está habilitado.
Ten en cuenta que restringir las escapadas de shell no es una panacea. Los programas que se ejecutan como root aún son capaces de muchas operaciones potencialmente peligrosas (como cambiar o sobrescribir archivos) que podrían llevar a una escalada de privilegios no intencionada.
...
...
...Si lees cuidadosamente el texto resaltado en negrita, sabrás que NOEXEC tiene su propio conjunto de limitaciones.
Entonces, ¿cuál es la solución más confiable? Bueno, es sudoedit. Incluso el manual de sudoers también recomienda esta herramienta:
En el caso específico de un editor, un enfoque más seguro es dar al usuario permiso para ejecutar sudoedit.Sudoedit es un comando incorporado que permite a los usuarios editar archivos de forma segura. Según la página del manual de sudo, ‘sudoedit’ es equivalente a ejecutar ‘sudo’ con la opción de línea de comandos ‘-e’.
¿Por qué es mejor?
Con ‘sudoedit’, los usuarios tienen la opción de usar su editor preferido, lo cual es diferente de la solución que discutimos al principio de este tutorial, donde se obliga a los usuarios a usar el editor Vim, permitiéndoles disfrutar de sus propias personalizaciones. Y la razón más importante de todas, con ‘sudoedit’, el usuario editará el archivo como sí mismo, y no como ‘root’.
Cómo funciona Sudoedit
Para usar sudoedit, la entrada en los sudoers debería ser, por ejemplo, algo como esto:
%newsudo ALL = sudoedit /path/to/fileY los usuarios que son parte del grupo ‘newsudo’ podrán editar el archivo ejecutando el siguiente comando:
sudoedit /path/to/fileEntonces, lo que hará este comando es que primero creará una copia temporal del archivo que deseas editar. Luego, el comando buscará las variables de entorno SUDO_EDITOR, VISUAL y EDITOR (en ese orden) para determinar qué editor debe invocarse para abrir la copia temporal que se acaba de crear. Después de que el usuario haya terminado con el trabajo de modificación, los cambios se copian de nuevo al archivo original.
Aquí está la explicación detallada de la página del manual del comando ‘sudo’:
-e, --edit
Edita uno o más archivos en lugar de ejecutar un comando. En lugar de un nombre de ruta, se utiliza la cadena "sudoedit" al consultar la política de seguridad. Si el usuario está autorizado por la política, se llevan a cabo los siguientes pasos:
1. Se hacen copias temporales de los archivos a editar con
el propietario establecido en el usuario que invoca.
2. Se ejecuta el editor especificado por la política para editar los
archivos temporales. La política de sudoers utiliza las
variables de entorno SUDO_EDITOR, VISUAL y EDITOR (en
ese orden). Si ninguna de SUDO_EDITOR, VISUAL o EDITOR
está configurada, se utiliza el primer programa listado en la opción de editor
sudoers(5).
3. Si han sido modificados, los archivos temporales se
copian de nuevo a su ubicación original y las versiones temporales se eliminan.
Si el archivo especificado no existe, se creará. Ten en cuenta que a diferencia de la mayoría de los comandos ejecutados por sudo, el editor se ejecuta con el entorno del usuario que invoca sin modificar. Si, por alguna razón, sudo no puede actualizar un archivo con su versión editada, el usuario recibirá una advertencia y la copia editada permanecerá en un archivo temporal.Para este momento, deberías tener una idea básica sobre ‘sudoedit’, incluyendo cuándo usarlo y por qué es mejor que usar ‘sudo’ cuando todo lo que deseas es editar un archivo o unos pocos archivos. Por supuesto, como cualquier otra herramienta relacionada con la seguridad, ‘sudoedit’ ha tenido su parte de exploits, pero sigue siendo una solución recomendada en muchos casos de uso.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.