15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
08.10.2024

Cómo agregar un usuario al grupo root y otorgar privilegios en Linux

Otorgar privilegios elevados en Linux significa dar a una cuenta de usuario la capacidad de ejecutar comandos que requieren acceso a nivel de superusuario — ya sea añadiéndolos a un grupo privilegiado como `sudo` o `wheel`, o configurando explícitamente entradas en el archivo `/etc/sudoers`. El método más seguro y auditable siempre es la delegación basada en `sudo`, no la membresía directa en el grupo `root`.

Esta guía cubre todos los caminos prácticos: añadir usuarios al grupo `sudo` o `wheel`, editar el archivo `sudoers` con `visudo`, limitar privilegios a comandos específicos, revocar el acceso correctamente, y entender exactamente por qué la membresía directa en el grupo `root` es una responsabilidad de seguridad en entornos de producción.

Comprendiendo el Modelo de Privilegios de Linux

Linux aplica una separación estricta entre contextos de ejecución privilegiados y no privilegiados. Cada proceso se ejecuta bajo un UID (ID de Usuario), y UID 0 — el usuario `root` — omite prácticamente todas las verificaciones de permisos aplicadas por el kernel. Esto no es solo una convención; se aplica a nivel de syscall.

Mecanismos de privilegios clave que necesitas entender:

  • Usuario root (UID 0): Acceso sin restricciones a todos los archivos, dispositivos, parámetros del kernel y llamadas al sistema. Un solo comando mal configurado ejecutado como root puede dañar irreversiblemente un sistema en funcionamiento.
  • sudo: Un binario setuid que permite a un usuario autorizado ejecutar un comando como otro usuario (típicamente root), sujeto a la política definida en `/etc/sudoers`. Cada invocación se registra en syslog o journald.
  • El grupo `sudo` (Debian/Ubuntu): Los miembros de este grupo reciben acceso sudo completo mediante una regla predeterminada en `/etc/sudoers`.
  • El grupo `wheel` (RHEL/CentOS/Fedora/AlmaLinux): El equivalente funcional del grupo `sudo` en distribuciones basadas en Red Hat.
  • El grupo `root` (GID 0): La membresía aquí NO otorga ejecución de comandos a nivel root. Solo permite el acceso a archivos propiedad del grupo `root` con permisos de lectura o escritura de grupo. Esto se malentiende con frecuencia.

Grupo Root vs. Grupo sudo: Una Distinción Crítica

PropiedadGrupo `root` (GID 0)Grupo `sudo` / `wheel`
Otorga ejecución con UID 0NoSí (vía sudo)
Permite leer archivos de root legibles por el grupoNo (a menos que también sea root)
Registrado en la pista de auditoríaNoSí (syslog/journald)
Requiere confirmación de contraseñaNoSí (por defecto)
Recomendado para delegación de administraciónNo
Nivel de riesgoAlto (acceso silencioso a archivos)Controlado
Caso de uso típicoConfiguraciones heredadas, ACLs de archivos específicosToda delegación de administración moderna

Añadir un usuario al grupo `root` no lo convierte en root. Otorga silenciosamente acceso de lectura/escritura a cualquier archivo donde el grupo `root` tenga permisos — lo que en un sistema mal configurado puede incluir archivos de configuración sensibles, claves privadas o directorios cron. Por eso es peligroso y rara vez es la solución correcta.

Requisitos Previos

Antes de continuar, confirma lo siguiente:

  • Tienes una sesión activa con privilegios de root o sudo.
  • La cuenta de usuario objetivo ya existe. Si no existe, créala:

“`bash

sudo adduser username

“`

En sistemas mínimos o distribuciones basadas en RHEL, usa `useradd` con opciones explícitas:

“`bash

sudo useradd -m -s /bin/bash username

sudo passwd username

“`

  • Conoces el nombre del grupo privilegiado de tu distribución (`sudo` en Debian/Ubuntu, `wheel` en RHEL/CentOS/AlmaLinux/Fedora).

Si estás gestionando un entorno de VPS Hosting, estos pasos se aplican de forma idéntica tanto en un servidor físico como en una máquina virtual — el modelo de privilegios de Linux es a nivel de SO, no a nivel de hipervisor.

Paso 1: Añadir el Usuario al Grupo sudo o wheel

Este es el método correcto y recomendado para otorgar acceso administrativo en todas las distribuciones Linux modernas.

En Debian, Ubuntu y Derivados

El grupo `sudo` está preconfigurado en `/etc/sudoers` con una regla que otorga acceso sudo completo:

“`bash

sudo usermod -aG sudo username

“`

El indicador `-aG` es crítico: `-a` significa añadir (no eliminar las membresías de grupo existentes), y `-G` especifica el grupo suplementario. Omitir `-a` reemplazará todos los grupos suplementarios con solo el especificado — un error común y destructivo.

En RHEL, CentOS, AlmaLinux, Rocky Linux y Fedora

Usa el grupo `wheel` en su lugar:

“`bash

sudo usermod -aG wheel username

“`

En sistemas CentOS 6 más antiguos, la regla del grupo `wheel` en `/etc/sudoers` puede estar comentada. Verifica que esté activa:

“`bash

sudo grep -i wheel /etc/sudoers

“`

Deberías ver una línea sin comentar como:

“`

%wheel ALL=(ALL) ALL

“`

Si está comentada, descoméntala usando `visudo` (cubierto en el Paso 2).

Verificando la Membresía de Grupo

Los cambios de grupo tienen efecto en el próximo inicio de sesión. Para verificar inmediatamente sin cerrar sesión:

“`bash

groups username

“`

O inspecciona `/etc/group` directamente:

“`bash

grep -E '^sudo:|^wheel:' /etc/group

“`

Para aplicar el nuevo grupo a una sesión existente sin volver a iniciar sesión, el usuario puede ejecutar:

“`bash

newgrp sudo

“`

Ten en cuenta que `newgrp` genera un nuevo shell con el contexto de grupo actualizado — no modifica la sesión principal.

Paso 2: Configurar Privilegios Granulares mediante el Archivo sudoers

Para sistemas de producción, el acceso sudo completo sin restricciones suele ser excesivo. El archivo `/etc/sudoers` te permite delimitar los privilegios con precisión — por comando, por usuario objetivo, por host, y con o sin solicitudes de contraseña.

Edita siempre `/etc/sudoers` usando `visudo`. Esta herramienta bloquea el archivo contra ediciones concurrentes y realiza validación de sintaxis antes de guardar. Un error de sintaxis en `/etc/sudoers` puede bloquear a todos los usuarios del acceso sudo en el sistema — `visudo` previene esto.

“`bash

sudo visudo

“`

Otorgar Acceso sudo Completo a un Usuario Específico

Añade esta línea al final del archivo (o en un archivo drop-in bajo `/etc/sudoers.d/`):

“`

username ALL=(ALL:ALL) ALL

“`

Desglosando la sintaxis:

  • `username` — la cuenta a la que aplica esta regla.
  • Primer `ALL` — aplica en todos los nombres de host (relevante para archivos sudoers compartidos distribuidos mediante gestión de configuración).
  • `(ALL:ALL)` — el usuario puede ejecutar comandos como cualquier usuario (primer `ALL`) y cualquier grupo (segundo `ALL`).
  • `ALL` final — se permiten todos los comandos.

Otorgar Acceso Solo a Comandos Específicos (Mínimo Privilegio)

Este es el patrón que debes usar en producción. Por ejemplo, para permitir a un usuario reiniciar Nginx y nada más:

“`

username ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx

“`

O para permitir gestionar un servicio específico con confirmación de contraseña:

“`

username ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl stop nginx

“`

Advertencia: Usa siempre rutas absolutas en las reglas de sudoers. Las rutas relativas son rechazadas por sudo y fallarán silenciosamente o causarán errores.

Usar Archivos Drop-in en /etc/sudoers.d/

En lugar de editar directamente el archivo principal `sudoers`, coloca las reglas específicas de usuario en `/etc/sudoers.d/`:

“`bash

sudo visudo -f /etc/sudoers.d/username

“`

Añade tu regla, guarda y verifica que el archivo tenga los permisos correctos:

“`bash

sudo chmod 440 /etc/sudoers.d/username

“`

Este enfoque se integra limpiamente con herramientas de gestión de configuración como Ansible, Puppet y Chef, y facilita significativamente la auditoría de privilegios.

Otorgar Acceso NOPASSWD (Usar con Precaución)

Para scripts automatizados o cuentas de servicio que necesitan ejecutar comandos privilegiados sin solicitudes interactivas:

“`

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

“`

Nota de seguridad: `NOPASSWD` elimina la barrera de autenticación. Úsalo solo para comandos con alcance estrictamente limitado en cuentas con autenticación fuerte basada en claves SSH. Nunca otorgues `NOPASSWD: ALL` en un servidor de producción.

Paso 3: Probar la Configuración

Después de realizar cambios, prueba antes de terminar tu sesión privilegiada actual — si has cometido un error, todavía tienes tu sesión existente para corregirlo.

Cambia al usuario objetivo y verifica:

“`bash

su – username

sudo whoami

“`

Salida esperada: `root`

Para listar todos los comandos que el usuario tiene permitido ejecutar:

“`bash

sudo -l -U username

“`

Este es un comando de diagnóstico esencial. Muestra la política sudoers efectiva para cualquier usuario sin necesidad de iniciar sesión como ellos.

Paso 4: Añadir un Usuario al Grupo root (Advertencia Explícita)

Si una aplicación heredada específica o un requisito de permisos de archivo genuinamente exige la membresía en el grupo `root` — y has agotado alternativas como ACLs y conjuntos de capacidades — el comando es:

“`bash

sudo usermod -aG root username

“`

Lo que esto realmente hace: El usuario obtiene acceso a archivos donde el grupo `root` tiene permisos de lectura o escritura. En una instalación Linux predeterminada, esto incluye archivos en `/etc/`, `/root/`, y potencialmente `/var/` dependiendo de las decisiones de empaquetado específicas de la distribución.

Lo que esto no hace: No otorga la capacidad de ejecutar comandos como root. No habilita `sudo`. No cambia el UID del usuario.

Alternativa recomendada: Usa ACLs POSIX para otorgar acceso a un archivo específico en lugar de añadir un usuario al grupo `root`:

“`bash

sudo setfacl -m u:username:r /etc/specific-config-file

“`

Esto otorga acceso de lectura a exactamente un archivo sin ninguna exposición a nivel de grupo.

Paso 5: Revocar Privilegios

La revocación de privilegios debe ser inmediata y verificable. No dependas de que el usuario cierre sesión — elimina la membresía de grupo y verifica.

Eliminar del Grupo sudo (Debian/Ubuntu)

“`bash

sudo deluser username sudo

“`

O usando el método portable `gpasswd` (funciona en todas las distribuciones):

“`bash

sudo gpasswd -d username sudo

“`

Eliminar del Grupo wheel (basado en RHEL)

“`bash

sudo gpasswd -d username wheel

“`

Eliminar un Archivo Drop-in de sudoers.d

“`bash

sudo rm /etc/sudoers.d/username

“`

Verificar la Revocación Inmediatamente

“`bash

sudo -l -U username

“`

La salida no debería mostrar entradas coincidentes o debería indicar explícitamente que el usuario no puede ejecutar sudo.

Caso límite: Si el usuario tiene una sesión activa, los cambios de membresía de grupo no afectan esa sesión hasta que cierre sesión y vuelva a iniciarla. Para forzar efecto inmediato, termina sus sesiones activas:

“`bash

sudo pkill -u username

“`

En sistemas que ejecutan Servidores Dedicados con múltiples administradores concurrentes, este paso es innegociable al revocar el acceso a un miembro del equipo que se va.

Paso 6: Auditar el Uso de sudo

Cada invocación de `sudo` queda registrada. En sistemas basados en systemd:

“`bash

sudo journalctl -u sudo

“`

O mediante syslog tradicional:

“`bash

sudo grep sudo /var/log/auth.log # Debian/Ubuntu

sudo grep sudo /var/log/secure # RHEL/CentOS

“`

Una entrada de registro típica tiene este aspecto:

“`

Jan 15 14:32:01 hostname sudo: username : TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/bin/systemctl restart nginx

“`

Esto registra el usuario de origen, el terminal, el directorio de trabajo, el usuario objetivo y el comando exacto. Esta pista de auditoría es invaluable para la respuesta a incidentes y los requisitos de cumplimiento.

Para una auditoría mejorada, considera habilitar el registro `sudo` en un archivo de registro dedicado añadiendo a `/etc/sudoers`:

“`

Defaults logfile="/var/log/sudo.log"

Defaults log_input, log_output

“`

`log_input` y `log_output` registran la E/S completa de cada sesión sudo — particularmente útil al investigar qué hizo realmente un usuario privilegiado durante una sesión.

Refuerzo de Seguridad: Más Allá de la Configuración Básica de sudo

Los administradores que gestionan VPS con cPanel o stacks Linux personalizados deben aplicar estos controles adicionales:

Restringir sudo a TTYs específicos:

“`

Defaults requiretty

“`

Esto evita que sudo sea invocado desde scripts no interactivos o trabajos cron a menos que se permita explícitamente.

Establecer un tiempo de espera de sesión sudo:

“`

Defaults timestamp_timeout=5

“`

Esto establece la caché de credenciales en 5 minutos. Establecerlo en `0` requiere una contraseña para cada invocación individual de sudo.

Limitar sudo a IPs de origen específicas (para servidores multiusuario):

“`

username 192.168.1.0/24=(ALL) ALL

“`

Usar `sudo` con saneamiento de entorno:

Por defecto, sudo restablece el entorno a un estado seguro. Verifica que `env_reset` esté activo en tu archivo sudoers:

“`

Defaults env_reset

“`

Deshabilitar el inicio de sesión SSH de root: Una vez configurado sudo, deshabilita el inicio de sesión directo de root vía SSH en `/etc/ssh/sshd_config`:

“`

PermitRootLogin no

“`

Esto obliga a que todas las acciones administrativas pasen por sesiones sudo auditables en lugar de inicios de sesión root anónimos. Este es un requisito básico para cualquier servidor expuesto a internet, incluidos los que ejecutan stacks de Hosting Web Compartido o entornos multiinquilino.

Gestión de Privilegios en Distribuciones: Referencia Rápida

DistribuciónGrupo PrivilegiadoRegla sudoers Predeterminada ActivaPaquete para sudo
Ubuntu 20.04+`sudo``sudo` (preinstalado)
Debian 11+`sudo``sudo` (instalar manualmente)
CentOS 7/8`wheel``sudo` (preinstalado)
AlmaLinux 8/9`wheel``sudo` (preinstalado)
Rocky Linux 8/9`wheel``sudo` (preinstalado)
Fedora 38+`wheel``sudo` (preinstalado)
Arch Linux`wheel`No (debe descomentarse)`sudo` (instalar manualmente)
openSUSE`wheel``sudo` (preinstalado)

En Arch Linux, después de instalar `sudo`, debes descomentar explícitamente la línea `%wheel` en `/etc/sudoers` mediante `visudo` antes de que la membresía de grupo tenga algún efecto.

Matriz de Decisión Práctica: Qué Método Usar

EscenarioEnfoque Recomendado
Desarrollador necesita administración completa en un VPS de desarrolloAñadir al grupo `sudo`/`wheel`
Cuenta de servicio necesita reiniciar un demonioEntrada `sudoers` con `NOPASSWD` limitado a ese comando
Acceso de administrador temporal para un contratistaArchivo drop-in `sudoers.d` (fácil de eliminar)
Aplicación heredada requiere acceso de grupo root a archivosACL POSIX en archivos específicos (`setfacl`)
Pipeline CI/CD necesita comandos de despliegue privilegiadosCuenta de servicio dedicada con reglas `NOPASSWD` de alcance limitado
Entorno de hosting compartido, múltiples usuariosNo otorgar sudo; usar acceso basado en roles del panel de control
Entorno de cumplimiento que requiere pista de auditoría completasudo con `log_input`/`log_output` habilitados

Lista de Verificación de Puntos Clave

Antes de considerar completa la escalada de privilegios en cualquier sistema Linux, verifica cada uno de los siguientes puntos:

  • [ ] El usuario está añadido a `sudo` (Debian/Ubuntu) o `wheel` (basado en RHEL) — no directamente al grupo `root`.
  • [ ] Se usó `visudo` para todas las ediciones de `/etc/sudoers` — nunca un editor de texto plano.
  • [ ] El alcance de privilegios es lo más reducido posible — comandos específicos en lugar de `ALL` donde sea factible.
  • [ ] `sudo -l -U username` confirma exactamente los permisos previstos y nada más.
  • [ ] `PermitRootLogin no` está configurado en `/etc/sshd_config` en servidores expuestos a internet.
  • [ ] El registro de auditoría de sudo está activo y los archivos de registro están siendo monitoreados o enviados a un SIEM.
  • [ ] Un procedimiento de revocación está documentado y probado — incluyendo la terminación de sesiones activas con `pkill -u`.
  • [ ] Los archivos drop-in en `/etc/sudoers.d/` tienen permisos `440` — los archivos sudoers legibles por todos son rechazados por sudo.
  • [ ] `timestamp_timeout` está configurado con un valor apropiado para tu política de seguridad.
  • [ ] Las concesiones de privilegios se revisan según un calendario definido (mensual o por ciclo de revisión de acceso).

Para equipos que gestionan múltiples servidores — ya sea en Paneles de Control VPS o en servidores físicos — centralizar esta configuración mediante Ansible o herramientas similares garantiza consistencia y elimina la deriva manual.

Preguntas Frecuentes

¿Cuál es la diferencia entre añadir un usuario al grupo root y otorgar acceso sudo?

Añadir un usuario al grupo `root` (GID 0) otorga acceso a archivos propiedad de ese grupo — no permite ejecutar comandos como root. Otorgar acceso sudo (mediante el grupo `sudo` o `wheel`, o una entrada en sudoers) permite al usuario ejecutar comandos con privilegios de UID 0, sujeto a política y autenticación por contraseña.

¿Por qué debería usar `visudo` en lugar de editar `/etc/sudoers` directamente con nano o vim?

`visudo` bloquea el archivo para evitar ediciones concurrentes y realiza validación de sintaxis antes de guardar. Un error de sintaxis guardado directamente en `/etc/sudoers` puede hacer que sudo sea completamente no funcional para todos los usuarios, potencialmente bloqueándote del acceso administrativo al sistema por completo.

¿Cómo otorgo acceso sudo sin requerir contraseña para un comando específico?

Añade una regla `NOPASSWD` limitada al comando exacto en `/etc/sudoers` o en un archivo drop-in: `username ALL=(ALL) NOPASSWD: /path/to/command`. Usa siempre la ruta absoluta y restringe esto a los comandos mínimos necesarios.

¿Los cambios de membresía de grupo tienen efecto inmediato para los usuarios que han iniciado sesión?

No. Los grupos suplementarios de un usuario se evalúan en el momento del inicio de sesión. Un usuario que ya ha iniciado sesión no ganará ni perderá acceso sudo basado en grupos hasta que inicie una nueva sesión. Para forzar la revocación inmediata, termina sus sesiones activas usando `sudo pkill -u username`.

¿Cómo puedo verificar qué permisos sudo tiene actualmente un usuario sin iniciar sesión como él?

Ejecuta `sudo -l -U username` como root u otro usuario sudo. Este comando muestra la política sudoers efectiva completa para el usuario especificado, incluyendo todos los comandos permitidos, indicadores NOPASSWD y cualquier valor predeterminado aplicable.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar