Cómo controlar el acceso a sudo en Linux

El comando sudo le permite ejecutar comandos en Linux como si fuera otra persona, como root. sudo también le permite controlar quién puede acceder a las capacidades de root, con granularidad. Otorgue a los usuarios acceso completo o permítales usar un pequeño subconjunto de comandos. Te mostramos cómo.

Permisos sudo y root

Todos hemos escuchado (la simplificación excesiva) que todo en Linux es un archivo. En realidad, prácticamente todo en el sistema operativo, desde procesos, archivos, directorios, sockets y tuberías, se comunican con el núcleo a través de un descriptor de archivos. Entonces, aunque todo no es un archivo, la mayoría de los objetos del sistema operativo se manejan como si lo fueran. Siempre que sea posible, el diseño de sistemas operativos tipo Linux y Unix se adhiere a este principio.

El concepto de «todo es un archivo» tiene un gran alcance en Linux. Es fácil ver entonces cómo los permisos de archivos en Linux se convirtieron en uno de los pilares de los privilegios y derechos de los usuarios. Si posee un archivo o directorio (un tipo especial de archivo), puede hacer lo que quiera con él, incluso editarlo, renombrarlo, moverlo y eliminarlo. También puede establecer los permisos en el archivo para que otros usuarios o grupos de usuarios puedan leer, modificar o ejecutar el archivo. Todos se rigen por estos permisos.

Todo el que sea, aparte del superusuario, conocido como root. La cuenta raíz es una cuenta con privilegios especiales. No está sujeto a los permisos de ninguno de los objetos del sistema operativo. El usuario root puede hacer cualquier cosa y, prácticamente, en cualquier momento.

Por supuesto, cualquier persona con acceso a la contraseña de root puede hacer lo mismo. Podrían causar estragos de forma maliciosa o accidental. De hecho, el usuario root también puede causar estragos si comete un error. Nadie es infalible. Es algo peligroso.

Es por eso que ahora se considera una buena práctica no iniciar sesión como root en absoluto. Inicie sesión con una cuenta de usuario normal y use sudo para Eleve sus privilegios por un corto período Los necesitas. A menudo, eso es solo para emitir un solo comando.

La lista de sudoers

sudo ya estaba instalado en las computadoras Ubuntu 18.04.3, Manjaro 18.1.0 y Fedora 31 utilizadas para investigar este artículo. Esto no es una sorpresa. sudo ha existido desde principios de la década de 1980 y se ha convertido en el medio estándar de operación de superusuario para casi todas las distribuciones.

Cuando instala una distribución moderna, el usuario que crea durante la instalación se agrega a una lista de usuarios llamados sudoers. Estos son los usuarios que pueden usar el comando sudo. Debido a que tiene poderes de sudo, puede usarlos para agregar otros usuarios a la lista de sudoers.

Por supuesto, es imprudente otorgar el estado de superusuario completo a voluntad o a cualquiera que tenga solo una necesidad parcial o específica. La lista de sudoers le permite especificar con qué comandos los distintos usuarios pueden usar sudo. De esa manera, no les da las llaves del reino, pero aún pueden lograr lo que necesitan hacer.

  Cómo configurar tareas en la lista de tareas pendientes Go For It en Linux

Ejecución de un comando como otro usuario

Originalmente, se llamaba “superusuario hacer”, porque podía hacer cosas como superusuario. Su alcance se ha ampliado ahora y puede usar sudo para ejecutar un comando como si fuera cualquier usuario. Se le ha cambiado el nombre para reflejar esa nueva funcionalidad. Ahora se denomina «usuario sustituto».

Para usar sudo para ejecutar un comando como otro usuario, necesitamos usar la opción -u (usuario). Aquí, vamos a ejecutar el quién soy comando como el usuario mary. Si usa el comando sudo sin la opción -u, ejecutará el comando como root.

Y, por supuesto, debido a que está usando sudo, se le pedirá su contraseña.

sudo -u mary whoami

sudo -u whoami en una ventana de terminal

La respuesta de whoami nos dice que la cuenta de usuario que ejecuta el comando es mary.

Puede utilizar el comando sudo para iniciar sesión como otro usuario sin conocer su contraseña. Se le pedirá su propia contraseña. Necesitamos usar la opción -i (inicio de sesión).

sudo -i -u mary
pwd
whoami
ls -hl
exit

sudo -i -u mary en una ventana de terminal

Estás conectado como mary. Los archivos «.bashrc», «.bash_aliases» y «.profile» de la cuenta de usuario de mary se procesan exactamente como si el propietario de la cuenta de usuario de mary hubiera iniciado sesión.

El símbolo del sistema cambia para reflejar que se trata de una sesión para la cuenta de usuario mary.
El comando pwd repite que ahora estás en Mary’s directorio de inicio.
whoami nos dice que estás usando la cuenta de usuario mary.
Los archivos del directorio pertenecen a la cuenta de usuario de mary.
El comando de salida te devuelve a su sesión de cuenta de usuario normal.

Editando el archivo sudoers

Para agregar usuarios a la lista de personas que pueden usar sudo, debe editar el archivo sudoers. Es de vital importancia que solo lo haga utilizando el comando visudo. El comando visudo evita que varias personas intenten editar el archivo sudoers a la vez. También realiza la verificación y el análisis sintáctico en el contenido del archivo a medida que los guarda.

Si sus ediciones no pasan las pruebas, el archivo no se guarda a ciegas. Obtienes opciones. Puede cancelar y abandonar los cambios, volver atrás y editar los cambios nuevamente o forzar que se guarden las ediciones incorrectas. La última opción es una muy mala idea. No caigas en la tentación de hacer eso. Puede encontrarse en una situación en la que a todos se les bloquea accidentalmente el uso de sudo.

Aunque comienzas el proceso de edición usando el comando visudo, visudo no es un editor. Llama a uno de sus editores existentes para que realice las ediciones del archivo. En Manjaro y Ubuntu, se lanzó el comando visudo el editor simple nano. En Fedora, visudo lanzó el más capaz:pero menos intuitivo-empuje.

Si prefiere usar nano en Fedora, puede hacerlo fácilmente. Primero, instale nano:

sudo dnf instalar nano

sudo dnf instalar nano en una ventana de terminal

Y luego se tuvo que invocar visudo con este comando:

sudo EDITOR=nano visudo

sudo EDITOR = nano visudo en una ventana de terminal

Parece un buen candidato para un alias. El editor nano se abre con el archivo sudoers cargado en él.

nano editor con el archivo sudoers cargado en él

Agregar usuarios al grupo sudo

Use visudo para abrir el archivo sudoers. Utilice este comando o el descrito anteriormente para especificar el editor de su elección:

sudo visudo

sudo visudo en una ventana de terminal

Desplácese por el archivo sudoers hasta que vea la definición de la entrada% sudo.

El archivo sudoers con la línea% sudo resaltada

El signo de porcentaje indica que se trata de una definición de grupo y no de una definición de usuario. En algunas distribuciones, la línea% sudo tiene un hash # al comienzo de la línea. Esto hace que la línea sea un comentario. Si este es el caso, elimine el hash y guarde el archivo.

  Cómo echar un vistazo a los archivos binarios desde la línea de comandos de Linux

La línea% sudo se divide así:

% sudo: el nombre del grupo.
ALL =: esta regla se aplica a todos los hosts de esta red.
(TODOS: TODOS): los miembros de este grupo pueden ejecutar comandos como todos los usuarios y todos los grupos.
Todos: los miembros de este grupo pueden ejecutar todos los comandos.

Para reformularlo un poco, los miembros de este grupo pueden ejecutar cualquier comando, como cualquier usuario o grupo, en esta computadora o en cualquier otro host de esta red. Entonces, una forma simple de otorgarle a alguien privilegios de root y la capacidad de usar sudo, es agregarlo al grupo sudo.

Tenemos dos usuarios, Tom y Mary, con cuentas de usuario tom y mary respectivamente. Agregaremos la cuenta de usuario tom al grupo sudo con el comando usermod. La opción -G (grupos) especifica el grupo al que vamos a agregar la cuenta de Tom. La opción -a (añadir) agrega este grupo a la lista de grupos en los que ya se encuentra la cuenta de usuario tom. Sin esta opción, la cuenta de usuario tom se colocaría en el nuevo grupo pero se eliminaría de cualquier otro grupo.

sudo usermod -a -G sudo tom

sudo usermod -a -G sudo tom en una ventana de terminal

Veamos en qué grupos está Mary:

groups

grupos en una ventana de terminal

La cuenta de usuario mary solo está en el grupo mary.

Comprobemos con Tom:

groups

grupos en una ventana de terminal

La cuenta de usuario de tom, y por lo tanto, Tom, está en los grupos tom y sudo.

Intentemos que Mary haga algo que requiera privilegios de sudo.

sudo less /etc/shadow

sudo menos / etc / shadow en una ventana de terminal

Mary no puede mirar dentro del archivo restringido «/ etc / shadow». Ella recibe una leve reprimenda por intentar usar sudo sin permiso. Veamos cómo le va a Tom:

sudo less /etc/shadow

sudo menos / etc / shadow en una ventana de terminal

Tan pronto como Tom ingresa su contraseña, se le muestra el archivo / etc / shadow.

el archivo / etc / shadow en less en una ventana de terminal

Con solo agregarlo al grupo sudo, ha sido elevado a las filas de élite de aquellos que pueden usar sudo. Completamente sin restricciones.

Otorgar a los usuarios derechos de sudo restringidos

A Tom se le han otorgado todos los derechos de sudo. Puede hacer cualquier cosa que pueda hacer el root, o cualquier otra persona del grupo sudo. Eso podría otorgarle más poder del que estás feliz de entregar. A veces existe un requisito para que un usuario realice una función que requiera privilegios de root, pero no hay un caso justificable para que tenga acceso completo a sudo. Puede lograr ese equilibrio agregándolos al archivo sudoers y enumerando los comandos que pueden usar.

Conozcamos a Harry, dueño de la cuenta de usuario Harry. No está en el grupo sudo y no tiene privilegios de sudo.

groups

grupos en una ventana de terminal

Es útil que Harry pueda instalar software, pero no queremos que tenga todos los derechos de sudo. Está bien, no hay problema. vamos a encender visudo:

sudo visudo

sudo visudo en una ventana de terminal

Desplácese hacia abajo por el archivo hasta que pase las definiciones de grupo. Vamos a agregar una línea para Harry. Debido a que esta es una definición de usuario y no una definición de grupo, no necesitamos comenzar la línea con un signo de porcentaje.

entrada de archivo sudoer para harry

La entrada para la cuenta de usuario harry es:

harry    ALL=/usr/bin/apt-get

Tenga en cuenta que hay una pestaña entre «Harry» y «TODOS =».

Esto dice que la cuenta de usuario Harry puede usar los comandos enumerados en todos los hosts conectados a esta red. Hay un comando en la lista, que es «/ usr / bin / apt-get». Podemos otorgarle acceso a Harry a más de un comando agregándolos a la lista de comandos, separados por comas.

  Cómo jugar Dead Space en Linux

Agregue la línea al archivo sudoers y guarde el archivo. Si desea volver a verificar que la línea es sintácticamente correcta, podemos pedirle a visudo que escanee el archivo y verifique la sintaxis por nosotros, usando la opción -c (solo verificar):

sudo visudo -c

sudo visudo -c en una ventana de terminal

Se realizan las comprobaciones y visudo informa que todo va bien. Harry ahora debería poder usar apt-get para instalar software pero debe rechazarse si intenta utilizar cualquier otro comando que requiera sudo.

sudo apt-get install finger

sudo apt-get install finger en una ventana de terminal

A Harry se le han otorgado los derechos de sudo adecuados y puede instalar el software.

¿Qué sucede si Harry intenta usar un comando diferente que requiere sudo?

sudo shutdown now

sudo shutdown ahora en una ventana de terminal

Harry no puede ejecutar el comando. Le hemos concedido con éxito acceso específico y restringido. Puede usar el comando designado y nada más.

Uso de alias de usuario de sudoers

Si queremos darle a Mary los mismos privilegios, podríamos agregar una línea en el archivo sudoers para la cuenta de usuario mary exactamente de la misma manera que hicimos con Harry. Otra forma más ordenada de lograr lo mismo es usar un User_Alias.

en el archivo sudoers, un User_Alias ​​contiene una lista de nombres de cuentas de usuario. El nombre de User_Alias ​​se puede usar en una definición para representar todas esas cuentas de usuario. Si desea cambiar los privilegios de esas cuentas de usuario, solo tiene una línea para editar.

Creemos un User_Alias ​​y usémoslo en nuestro archivo sudoers.

sudo visudo

sudo visudo en una ventana de terminal

Scroll down in the file until you come to the User_Alias specification line.

archivo sudoers con Users_Alias ​​agregado

Agregue User_Alias ​​escribiendo:

User_Alias INSTALLERS = harry, mary

Cada elemento está separado por un espacio, no por una pestaña. La lógica se descompone como:

User_Alias: Esto le dice a visudo que será un User_Alias.
INSTALADORES: Este es un nombre arbitrario para este alias.
= harry, mary: la lista de usuarios que se incluirán en este alias.

Ahora editaremos la línea que agregamos anteriormente para la cuenta de usuario harry:

harry    ALL=/usr/bin/apt-get

Cámbielo para que diga:

INSTALLERS    ALL=/usr/bin/apt-get

Esto dice que todas las cuentas de usuario contenidas en la definición de User_Alias ​​“INSTALADORES” pueden ejecutar el comando apt-get. Podemos probar esto con Mary, quien ahora debería poder instalar software.

sudo apt-get install colordiff

sudo apt-get install colordiff en una ventana de terminal

Mary puede instalar el software porque está en el User_Alias ​​de “INSTALADORES” y ese User_Alias ​​ha recibido esos derechos.

Tres trucos rápidos de sudo

Cuando olvide agregar sudo a un comando, escriba

sudo !!

Y el último comando se repetirá con sudo agregado al comienzo de la línea.

Una vez que haya usado sudo y se haya autenticado con su contraseña, no tendrá que usar su contraseña con más comandos de sudo durante 15 minutos. Si desea que se olvide su autenticación de inmediato, utilice:

sudo -k

¿Alguna vez se preguntó dónde puede ver los intentos fallidos del comando sudo? Van al archivo “/var/log/auth.log”. Puedes verlo con:

less /var/log/auth.log

El archivo /var/log/auth.log en una ventana de terminal

Podemos ver la entrada de la cuenta de usuario mary que inició sesión en TTY pts / 1 cuando intentó ejecutar el comando de apagado como usuario «root».

Con gran poder …

… viene la capacidad de delegar partes a otros. Ahora sabe cómo capacitar a otros usuarios de forma selectiva.