Cómo editar el archivo sudoers

Introducción

Índice
  1. Introducción
  • Cómo obtener privilegios de root
    1. Iniciar sesión como root
    2. Usando supara convertirse en root
    3. Uso sudopara ejecutar comandos como root
  • ¿Qué es Visudo?
  • Cómo modificar el archivo sudoers
    1. Líneas predeterminadas
    2. Líneas de privilegios de usuario
    3. Líneas de privilegio grupal
    4. Línea /etc/sudoers.d incluida
  • Cómo otorgarle privilegios sudo a un usuario
  • Cómo configurar reglas personalizadas
    1. Cómo crear alias
    2. Cómo bloquear las reglas
  • Información miscelánea
  • Conclusión
  • La separación de privilegios es uno de los paradigmas de seguridad fundamentales implementados en Linux y sistemas operativos similares a Unix. Los usuarios comunes operan con privilegios limitados para reducir el alcance de su influencia a su propio entorno y no al sistema operativo en general.

    Un usuario especial, llamado root , tiene privilegios de superusuario . Se trata de una cuenta administrativa sin las restricciones que tienen los usuarios normales. Los usuarios pueden ejecutar comandos con privilegios de superusuario o root de distintas maneras.

    En este artículo, analizaremos cómo obtener privilegios de root de forma correcta y segura , con un enfoque especial en la edición del /etc/sudoersarchivo.

    Completaremos estos pasos en un servidor Ubuntu 20.04, pero la mayoría de las distribuciones de Linux modernas como Debian y CentOS deberían funcionar de manera similar.

    Esta guía supone que ya ha completado la configuración inicial del servidor que se describe aquí. Inicie sesión en su servidor como usuario normal, no como usuario root , y continúe con los pasos a continuación.

    Nota: Este tutorial profundiza en la escalada de privilegios y el sudoersarchivo. Si solo desea agregar sudoprivilegios a un usuario, consulte nuestros tutoriales de inicio rápido Cómo crear un nuevo usuario habilitado para Sudo para Ubuntu y CentOS .

    Cómo obtener privilegios de root

    Hay tres formas básicas de obtener privilegios de root , que varían en su nivel de sofisticación.

    Iniciar sesión como root

    El método más simple y directo de obtener privilegios de root es iniciar sesión directamente en su servidor como usuario root .

    Si está iniciando sesión en una máquina local (o usando una función de consola fuera de banda en un servidor virtual), ingrese rootsu nombre de usuario en el mensaje de inicio de sesión e ingrese la contraseña de root cuando se le solicite.

    Si inicia sesión a través de SSH, especifique el usuario raíz antes de la dirección IP o el nombre de dominio en su cadena de conexión SSH:

    1. ssh root@server_domain_or_ip

    Si no ha configurado claves SSH para el usuario root , ingrese la contraseña root cuando se le solicite.

    Usando supara convertirse en root

    Generalmente no se recomienda iniciar sesión directamente como root , porque es fácil comenzar a utilizar el sistema para tareas no administrativas, lo cual es peligroso.

    La siguiente forma de obtener privilegios de superusuario le permite convertirse en el usuario root en cualquier momento, según lo necesite.

    Podemos hacer esto invocando el sucomando que significa “usuario sustituto”. Para obtener privilegios de root , escriba:

    1. su

    Se le solicitará la contraseña del usuario root , después de lo cual será llevado a una sesión de shell root .

    Cuando haya terminado las tareas que requieren privilegios de root , regrese a su shell normal escribiendo:

    1. exit

    Uso sudopara ejecutar comandos como root

    La última forma de obtener privilegios de root que discutiremos es con el sudocomando.

    El sudocomando permite ejecutar comandos puntuales con privilegios de root , sin necesidad de crear un nuevo shell. Se ejecuta de la siguiente manera:

    1. sudo command_to_execute

    A diferencia de su, el sudocomando solicitará la contraseña del usuario actual , no la contraseña root .

    Debido a sus implicaciones de seguridad, sudoel acceso no se otorga a los usuarios de forma predeterminada y se debe configurar para que funcione correctamente. Consulta nuestros tutoriales de inicio rápido Cómo crear un nuevo usuario habilitado con Sudo para Ubuntu y CentOS para aprender a configurar un sudousuario habilitado con Sudo.

    En la siguiente sección, discutiremos cómo modificar la sudoconfiguración con mayor detalle.

    ¿Qué es Visudo?

    El sudocomando se configura a través de un archivo ubicado en /etc/sudoers.

    Advertencia: ¡Nunca edites este archivo con un editor de texto normal! ¡Utiliza siempre el visudocomando en su lugar!

    Debido a que una sintaxis incorrecta en el /etc/sudoersarchivo puede dejarlo con un sistema dañado donde es imposible obtener privilegios elevados, es importante usar el visudocomando para editar el archivo.

    El visudocomando abre un editor de texto de forma normal, pero valida la sintaxis del archivo al guardarlo. Esto evita que errores de configuración bloqueen sudolas operaciones, que pueden ser la única forma de obtener privilegios de root .

    Tradicionalmente, visudoel /etc/sudoersarchivo se abre con el vieditor de texto. Sin embargo, Ubuntu lo ha configurado visudopara utilizar el nanoeditor de texto en su lugar.

    Si desea volver a cambiarlo a vi, emita el siguiente comando:

    1. sudo update-alternatives --config editor
    OutputThere are 4 choices for the alternative editor (providing /usr/bin/editor).  Selection    Path                Priority   Status------------------------------------------------------------* 0            /bin/nano            40        auto mode  1            /bin/ed             -100       manual mode  2            /bin/nano            40        manual mode  3            /usr/bin/vim.basic   30        manual mode  4            /usr/bin/vim.tiny    10        manual modePress enter to keep the current choice[*], or type selection number:

    Seleccione el número que corresponde con la elección que desea realizar.

    En CentOS, puede cambiar este valor agregando la siguiente línea a su ~/.bashrc:

    1. export EDITOR=`which name_of_editor`

    Obtenga el archivo para implementar los cambios:

    1. . ~/.bashrc

    Después de haber configurado visudo, ejecute el comando para acceder al /etc/sudoersarchivo:

    1. sudo visudo

    Cómo modificar el archivo sudoers

    Se le presentará el /etc/sudoersarchivo en el editor de texto seleccionado.

    He copiado y pegado el archivo de Ubuntu 20.04, sin los comentarios. El /etc/sudoersarchivo de CentOS tiene muchas más líneas, algunas de las cuales no analizaremos en esta guía.

    /etc/sudoers

    Defaults        env_resetDefaults        mail_badpassDefaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"root    ALL=(ALL:ALL) ALL%admin ALL=(ALL) ALL%sudo   ALL=(ALL:ALL) ALL#includedir /etc/sudoers.d

    Echemos un vistazo a lo que hacen estas líneas.

    Líneas predeterminadas

    La primera línea, Defaults env_reset, restablece el entorno de la terminal para eliminar todas las variables de usuario. Se trata de una medida de seguridad que se utiliza para eliminar de la sudosesión las variables de entorno potencialmente dañinas.

    La segunda línea, Defaults mail_badpass, le indica al sistema que envíe avisos de sudointentos incorrectos de ingresar la contraseña al mailtousuario configurado. De manera predeterminada, esta es la cuenta raíz .

    La tercera línea, que comienza con Defaults secure_path=..., especifica los PATHlugares en el sistema de archivos donde el sistema operativo buscará aplicaciones que se utilizarán para sudolas operaciones. Esto evita el uso de rutas de usuario que pueden ser perjudiciales.

    Líneas de privilegios de usuario

    La cuarta línea, que indica los privilegios del usuario rootsudo , es diferente de las líneas anteriores. Veamos qué significan los distintos campos:

    • root ALL=(ALL:ALL) ALLEl primer campo indica el nombre de usuario al que se aplicará la regla ( root ).

    • root ALL=(ALL:ALL) ALLEl primer “ALL” indica que esta regla se aplica a todos los hosts.

    • root ALL=(ALL:ALL) ALLEste “ALL” indica que el usuario root puede ejecutar comandos como todos los usuarios.

    • root ALL=(ALL:ALL) ALLEste “ALL” indica que el usuario root puede ejecutar comandos como todos los grupos.

    • root ALL=(ALL:ALL) ALLEl último “ALL” indica que estas reglas se aplican a todos los comandos.

    Esto significa que nuestro usuario root puede ejecutar cualquier comando usando sudo, siempre que proporcione su contraseña.

    Líneas de privilegio grupal

    Las siguientes dos líneas son similares a las líneas de privilegios de usuario, pero especifican sudoreglas para los grupos.

    Los nombres que comienzan con %indican nombres de grupos.

    Aquí, vemos que el grupo admin puede ejecutar cualquier comando como cualquier usuario en cualquier host. De manera similar, el grupo sudo tiene los mismos privilegios, pero también puede ejecutar como cualquier grupo.

    Línea /etc/sudoers.d incluida

    La última línea podría parecer un comentario a primera vista:

    /etc/sudoers

    . . .#includedir /etc/sudoers.d

    Comienza con un , que generalmente indica un comentario. Sin embargo, esta línea en realidad indica que también se obtendrán y aplicarán los archivos dentro del directorio .#/etc/sudoers.d

    Los archivos dentro de ese directorio siguen las mismas reglas que el /etc/sudoersarchivo en sí. Cualquier archivo que no termine en ~y que no tenga una .en él se leerá y se agregará a la sudoconfiguración.

    Esto está pensado principalmente para que las aplicaciones modifiquen sudolos privilegios al instalarse. Poner todas las reglas asociadas dentro de un solo archivo en el /etc/sudoers.ddirectorio puede facilitar la visualización de los privilegios asociados con las cuentas y revertir las credenciales fácilmente sin tener que intentar manipular el /etc/sudoersarchivo directamente.

    Al igual que con el /etc/sudoersarchivo en sí, siempre debe editar los archivos dentro del /etc/sudoers.ddirectorio con visudo. La sintaxis para editar estos archivos sería:

    1. sudo visudo -f /etc/sudoers.d/file_to_edit

    Cómo otorgarle privilegios sudo a un usuario

    La operación más común que los usuarios desean realizar al administrar sudopermisos es otorgarle a un nuevo usuario sudoacceso general. Esto resulta útil si desea otorgarle a una cuenta acceso administrativo completo al sistema.

    La forma más fácil de hacer esto en un sistema configurado con un grupo de administración de propósito general, como el sistema Ubuntu en esta guía, es agregar el usuario en cuestión a ese grupo.

    Por ejemplo, en Ubuntu 20.04, el sudogrupo tiene privilegios de administrador completos. Podemos otorgarle a un usuario estos mismos privilegios agregándolo al grupo de la siguiente manera:

    1. sudo usermod -aG sudo username

    El gpasswdcomando también se puede utilizar:

    1. sudo gpasswd -a username sudo

    Ambos lograrán lo mismo.

    En CentOS, normalmente es el wheelgrupo en lugar del sudogrupo:

    1. sudo usermod -aG wheel username

    O bien, utilizando gpasswd:

    1. sudo gpasswd -a username wheel

    En CentOS, si agregar el usuario al grupo no funciona de inmediato, es posible que tengas que editar el /etc/sudoersarchivo para descomentar el nombre del grupo:

    1. sudo visudo

    /etc/sudoers

    . . .%wheel ALL=(ALL) ALL. . .

    Cómo configurar reglas personalizadas

    Ahora que nos hemos familiarizado con la sintaxis general del archivo, creemos algunas reglas nuevas.

    Cómo crear alias

    El sudoersarchivo se puede organizar más fácilmente agrupando cosas con varios tipos de “alias”.

    Por ejemplo, podemos crear tres grupos diferentes de usuarios, con membresía superpuesta:

    /etc/sudoers

    . . .User_AliasGROUPONE = abby, brent, carlUser_AliasGROUPTWO = brent, doris, eric,User_AliasGROUPTHREE = doris, felicia, grant. . .

    Los nombres de los grupos deben comenzar con mayúscula. Podemos permitir que los miembros GROUPTWOactualicen la aptbase de datos creando una regla como esta:

    /etc/sudoers

    . . .GROUPTWOALL = /usr/bin/apt-get update. . .

    Si no especificamos un usuario/grupo para ejecutar, como se indicó anteriormente, sudoel valor predeterminado es el usuario root .

    Podemos permitir que los miembros GROUPTHREEapaguen y reinicien la máquina creando un “alias de comando” y usándolo en una regla para GROUPTHREE:

    /etc/sudoers

    . . .Cmnd_AliasPOWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restartGROUPTHREEALL = POWER. . .

    Creamos un alias de comando llamado POWERque contiene comandos para apagar y reiniciar la máquina. Luego permitimos que los miembros de GROUPTHREEejecuten estos comandos.

    También podemos crear alias “Ejecutar como”, que pueden reemplazar la parte de la regla que especifica que el usuario debe ejecutar el comando como:

    /etc/sudoers

    . . .Runas_AliasWEB = www-data, apacheGROUPONEALL = (WEB) ALL. . .

    Esto permitirá que cualquier persona que sea miembro de GROUPONEejecute comandos como www-datausuario o como apacheusuario.

    Simplemente tenga en cuenta que las reglas posteriores prevalecerán sobre las reglas anteriores cuando haya un conflicto entre ambas.

    Cómo bloquear las reglas

    Hay varias formas de lograr un mayor control sobre cómo sudoreacciona ante una llamada.

    El updatedbcomando asociado al mlocatepaquete es relativamente inofensivo en un sistema monousuario. Si queremos permitir que los usuarios lo ejecuten con privilegios de root sin necesidad de escribir una contraseña, podemos crear una regla como esta:

    /etc/sudoers

    . . .GROUPONEALL = NOPASSWD: /usr/bin/updatedb. . .

    NOPASSWDes una “etiqueta” que significa que no se solicitará ninguna contraseña. Tiene un comando complementario llamado PASSWD, que es el comportamiento predeterminado. Una etiqueta es relevante para el resto de la regla a menos que su etiqueta “gemela” la anule más adelante.

    Por ejemplo, podemos tener una línea como esta:

    /etc/sudoers

    . . .GROUPTWOALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill. . .

    Otra etiqueta útil es NOEXEC, que puede usarse para evitar algunos comportamientos peligrosos en ciertos programas.

    Por ejemplo, algunos programas, como less, pueden generar otros comandos escribiendo esto desde su interfaz:

    !command_to_run

    Básicamente, esto ejecuta cualquier comando que el usuario le dé con los mismos permisos con los que lessse está ejecutando, lo que puede ser bastante peligroso.

    Para restringir esto, podríamos usar una línea como esta:

    /etc/sudoers

    . . .usernameALL = NOEXEC: /usr/bin/less. . .

    Información miscelánea

    Hay algunos datos más que pueden resultar útiles a la hora de tratar con sudo.

    Si especificó un usuario o grupo para “ejecutar como” en el archivo de configuración, puede ejecutar comandos como esos usuarios utilizando los indicadores -uy -g, respectivamente:

    1. sudo -u run_as_user command
    2. sudo -g run_as_group command

    Para mayor comodidad, de forma predeterminada, sudose guardarán los datos de autenticación durante un tiempo determinado en una terminal. Esto significa que no tendrá que volver a escribir su contraseña hasta que se agote el tiempo.

    Por motivos de seguridad, si desea borrar este temporizador cuando haya terminado de ejecutar comandos administrativos, puede ejecutar:

    1. sudo -k

    Si, por el contrario, deseas “preparar” el sudocomando para que no se te solicite más tarde, o para renovar tu sudocontrato de arrendamiento, siempre puedes escribir:

    1. sudo -v

    Se le solicitará su contraseña, que se almacenará en caché para sudousos posteriores hasta que sudoexpire el período de tiempo.

    Si simplemente se pregunta qué tipo de privilegios están definidos para su nombre de usuario, puede escribir:

    1. sudo -l

    Esto mostrará todas las reglas del /etc/sudoersarchivo que se aplican a su usuario. Esto le dará una buena idea de lo que podrá o no podrá hacer como sudousuario.

    Hay muchas ocasiones en las que ejecutarás un comando y fallará porque olvidaste anteponerlo con sudo. Para evitar tener que volver a escribir el comando, puedes aprovechar una función de bash que significa “repetir el último comando”:

    1. sudo !!

    El doble signo de exclamación repetirá el último comando. Lo hemos precedido con sudopara cambiar rápidamente el comando sin privilegios a un comando privilegiado.

    Para divertirte un poco, puedes agregar la siguiente línea a tu /etc/sudoersarchivo con visudo:

    1. sudo visudo

    /etc/sudoers

    . . .Defaultsinsults. . .

    Esto hará sudoque se devuelva un insulto tonto cuando un usuario escriba una contraseña incorrecta para sudo. Podemos usar sudo -kpara borrar la sudocontraseña anterior almacenada en caché para probarlo:

    1. sudo -k
    2. sudo ls
    Output[sudo] password for demo:    # enter an incorrect password here to see the resultsYour mind just hasn't been the same since the electro-shock, has it?[sudo] password for demo:My mind is going. I can feel it.

    Conclusión

    Ahora debería tener una comprensión básica de cómo leer y modificar el sudoersarchivo, y una comprensión de los distintos métodos que puede utilizar para obtener privilegios de root .

    Remember, super-user privileges are not given to regular users for a reason. It is essential that you understand what each command does that you execute with root privileges. Do not take the responsibility lightly. Learn the best way to use these tools for your use-case, and lock down any functionality that is not needed.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

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

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion