GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo permitir que los usuarios editen archivos de forma segura usando sudoedit en Linux

Suponga que es administrador de sistemas en una empresa donde los equipos trabajan principalmente en Linux con privilegios limitados. Ahora imagine una situación en la que los miembros de uno de los equipos, como parte de un trabajo nuevo, necesitan editar con frecuencia un archivo que requiere privilegios de superusuario. ¿Qué harías?

Una opción es darles el acceso 'sudo', pero eso sería como darle a un extraño acceso a toda su casa cuando todo lo que necesitan es estar en una sola de sus habitaciones. Lo que quiero decir es que el acceso 'sudo' predeterminado será permítales hacer cualquier cosa que requiera privilegios de raíz, cuando todo lo que se requiere es la capacidad de editar un determinado archivo del sistema.

Dado el tipo de flexibilidad que ofrece 'sudo', la otra opción que tiene es modificar la política '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/file

Aunque sin duda es 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 lo que estoy hablando, considere un escenario en el que el acceso limitado mencionado anteriormente se proporciona al grupo y alguien abre el archivo en cuestión para editarlo usando el comando 'sudo'.

Ahora, una mente inteligente con un buen conocimiento de vim sabría que puede iniciar un nuevo shell desde el editor; todo lo que tiene que hacer es ejecutar el siguiente comando de vim:

:shell

Esto lo colocará instantáneamente en un caparazón interactivo. Si está probando estos pasos en su máquina, simplemente ejecute el comando 'whoami' y entenderá de qué laguna legal estaba hablando: Sí, está en el shell como root.

Aquí hay una captura de pantalla de ejemplo:

No hace falta decir que el propósito de brindar acceso de edición a un solo archivo se desvaneció y el usuario puede hacer CUALQUIER COSA ahora.

Veamos si hay alguna otra opción que tengamos. Existe una etiqueta NOEXEC que puede usar en su entrada de sudoers:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC básicamente le permite evitar que un programa ejecutado por sudo ejecute cualquier otro programa. Entonces, ¿es esta la solución definitiva? Tristemente no. En cuanto a los motivos, así es como el manual de sudoers explica esta etiqueta:

noexec

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo's noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
...
...
...
To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.
...
...
...

Si lee atentamente el texto resaltado en negrita, sabrá que NOEXEC tiene su propio conjunto de limitaciones.

Entonces, ¿cuál es la solución más confiable entonces? Bueno, es sudoedit . Incluso el manual de Sudoers también recomienda esta herramienta:

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit es un comando integrado que permite a los usuarios editar archivos de forma segura. De acuerdo con la página man de sudo, 'sudoedit' es equivalente a ejecutar 'sudo' con la opción de línea de comando '-e'.

¿Por qué es mejor?

Con 'sudoedit', los usuarios tienen la opción de usar su editor preferido, que es diferente a la solución que discutimos al principio de este tutorial, donde los usuarios se ven obligados a usar el editor Vim, lo que les permite disfrutar de sus propias personalizaciones. Y la razón más importante de todas, con 'sudoedit', el usuario editará el archivo como ellos mismos, 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/file

Y los usuarios que forman parte del grupo 'newsudo' podrán editar el archivo ejecutando el siguiente comando:

sudoedit /path/to/file

Entonces, lo que hará este comando es, primero, creará una copia temporal del archivo que desea editar. Luego, el comando buscará las variables de entorno SUDO_EDITOR, VISUAL y EDITOR (en ese orden) para determinar qué editor se debe invocar para abrir la copia temporal que se acaba de crear. Una vez que el usuario termina 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 comando man 'sudo':

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user's environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

A estas alturas, debería tener una idea básica sobre 'sudoedit', incluido cuándo usarlo y por qué es mejor que usar 'sudo' cuando todo lo que desea es editar un archivo o algunos archivos. Por supuesto, como cualquier otra herramienta relacionada con la seguridad, 'sudoedit' ha tenido su parte de vulnerabilidades, pero sigue siendo una solución recomendada en muchos casos de uso.


Linux
  1. Cómo hacer una comparación línea por línea de archivos en Linux usando el comando diff

  2. Cómo administrar archivos de registro usando Logrotate en Linux

  3. Cómo cambiar el nombre de varios archivos juntos en Linux usando 3 métodos

  4. Cómo ordenar archivos en Linux usando el comando Ordenar

  5. Cómo transferir archivos de forma segura usando el comando SCP en Linux

Cómo editar varios archivos usando Vim Editor

Cómo hacer una copia de seguridad de archivos y directorios usando Rsync en Linux

Cómo bloquear un puerto usando un firewall en Linux

Cómo sincronizar archivos de dos vías usando Osync Script en Linux

Cómo eliminar archivos y directorios usando la línea de comandos de Linux

Cómo eliminar archivos de forma segura usando el comando Shred en Debian 11