Cómo Cambiar Usuario en Linux: La Guía Completa
Linux es un sistema operativo multiusuario por diseño, y la gestión de identidades de usuario es una de las habilidades más fundamentales que cualquier administrador de sistemas necesita dominar. Ya sea que estés administrando un entorno de VPS Hosting, configurando un servidor web o solucionando problemas de permisos de archivo después de una implementación, entender cómo cambiar usuarios en Linux es esencial.
La frase “cambiar usuario” en Linux en realidad cubre varias operaciones distintas, cada una con sus propias herramientas, riesgos y mejores prácticas:
- Cambiar a otra cuenta en el shell (por ejemplo, de
johnaroot) para una sesión interactiva - Ejecutar un único comando como un usuario diferente sin cambiar completamente de sesión
- Cambiar qué usuario ejecuta un servicio o proceso — crítico para el endurecimiento de seguridad
- Cambiar la propiedad de archivos y directorios — esencial después de migraciones, restauraciones o implementaciones
- Modificar atributos de cuenta de usuario — renombrar usuarios, cambiar UIDs o ajustar membresías de grupo
Esta guía cubre todos estos escenarios en profundidad, explicando cuándo usar cada enfoque, cómo hacerlo de forma segura y qué errores evitar — para que puedas administrar usuarios de Linux con confianza sin romper permisos, servicios o acceso.
Tabla de contenidos
- Cambiar a otro usuario (Shell interactivo)
- Ejecutar un único comando como otro usuario
- Cambiar el usuario que ejecuta un servicio (systemd)
- Cambiar la propiedad de archivos con chown
- Confirmar tu identidad actual
- Modificar atributos de cuenta de usuario
- Hoja de referencia rápida
Cambiar a otro usuario (Shell interactivo)
Cuando necesitas una sesión de terminal interactiva completa como otro usuario — para administración del sistema, prueba del comportamiento de la aplicación bajo una cuenta diferente o acceso a una cuenta de servicio — Linux proporciona dos herramientas principales: su y sudo.
Usando su (Switch User)
El comando su sustituye tu identidad de usuario actual con otra:
su - usernameLa bandera - (también escrita como -l o --login) es importante: carga el entorno de inicio completo del usuario objetivo, incluyendo su directorio de inicio, PATH, perfil de shell y variables de entorno. Sin la bandera -, heredas gran parte de tu entorno actual, lo que puede causar comportamiento sutil y confuso — especialmente al ejecutar scripts o servicios.
Para cambiar directamente a root:
su -> Nota de seguridad: En muchas distribuciones Linux modernas, la contraseña de la cuenta root está deshabilitada por defecto (particularmente en sistemas basados en Ubuntu). En estos casos, su a root fallará, y sudo es el enfoque correcto.
Usando sudo -i (Preferido para shells Root/Admin)
sudo -iEsto te da un shell de inicio de root equivalente a su -, pero se autentica usando tus propios privilegios de sudo en lugar de requerir la contraseña de root. Este es el enfoque recomendado en la mayoría de distribuciones modernas porque:
- Evita la necesidad de compartir o conocer la contraseña de root
- Todas las acciones se registran a través del registro de auditoría de sudo
- Respeta tu configuración de sudoers y restricciones
Cambiar a otro usuario con un shell de inicio a través de sudo
sudo -iu usernameEsto combina -i (shell de inicio) y -u (usuario objetivo), dándote un entorno de inicio limpio como el usuario especificado — sin necesidad de la contraseña de ese usuario.
Ejecutar un único comando como otro usuario
A menudo no necesitas una sesión interactiva completa — solo necesitas ejecutar un comando con una identidad diferente. Este es el patrón más común y seguro para la escalada de privilegios.
Usando sudo -u
sudo -u username whoamisudo -u postgres psqlEl segundo ejemplo es extremadamente común en administración de bases de datos — cambiar al usuario del sistema postgres para acceder a PostgreSQL sin autenticación de contraseña.
Ejecutar un comando con un entorno de inicio limpio
sudo -iu username command_hereEsto asegura que el comando se ejecute con el entorno completo del usuario objetivo, no con las variables de tu sesión actual.
Ejecutar un comando como root
sudo systemctl restart nginxEste es el patrón estándar para tareas administrativas: ejecutar un único comando privilegiado sin abrir un shell de root.
Cambiar el usuario que ejecuta un servicio (systemd)
En prácticamente todas las distribuciones Linux modernas, systemd administra servicios. Por seguridad, cada servicio debe ejecutarse bajo una cuenta de usuario dedicada y sin privilegios en lugar de root. Ejecutar servicios como root es un riesgo de seguridad significativo — si el servicio se ve comprometido, el atacante obtiene acceso root a todo el sistema.
Esto es especialmente importante en Servidores Dedicados y entornos VPS de producción donde múltiples servicios pueden estar ejecutándose simultáneamente.
Verificar la configuración actual del servicio
systemctl cat myservice.serviceBusca las directivas User= y Group= en la sección [Service]:
[Service]
User=www-data
Group=www-dataAnular el usuario del servicio (Método seguro)
En lugar de editar el archivo de unidad original (que puede ser sobrescrito en actualizaciones de paquetes), usa systemctl edit para crear una anulación drop-in:
sudo systemctl edit myservice.serviceEsto abre un editor donde añades:
[Service]
User=myuser
Group=mygroupGuarda el archivo, luego aplica los cambios:
sudo systemctl daemon-reload
sudo systemctl restart myservice.serviceVerificar que el servicio se está ejecutando como el usuario correcto
systemctl status myservice.serviceps -eo user,pid,cmd | grep myserviceInspeccionar el usuario de cualquier proceso en ejecución
ps -eo user,pid,cmd | grep nginxps -p <PID> -o user,group,cmd> Importante: Linux no te permite cambiar el usuario de un proceso ya en ejecución en su lugar. Debes reiniciar el proceso (o configurar el administrador de servicios para iniciarlo bajo el usuario correcto) para que el cambio surta efecto.
Cambiar la propiedad de archivos con chown
La propiedad de archivos es una parte central del modelo de permisos de Linux. Después de migraciones, implementaciones, copias de seguridad o restauraciones, la propiedad puede terminar asignada al usuario incorrecto — causando errores de permiso denegado, aplicaciones web rotas o datos inaccesibles. El comando chown es tu herramienta principal para corregir esto.
Esta es una tarea común al configurar entornos de Alojamiento web compartido o implementar aplicaciones web en un VPS.
Cambiar el propietario de un archivo
sudo chown username file.txtCambiar tanto el propietario como el grupo
sudo chown username:groupname file.txtCambio de propiedad recursivo (Usar con cuidado)
sudo chown -R username:groupname /var/www/siteLa bandera -R aplica el cambio recursivamente a todos los archivos y subdirectorios. Usa esto cuidadosamente — aplicarlo a la ruta incorrecta (por ejemplo, / o /etc) puede romper todo tu sistema.
Preservar enlaces simbólicos
sudo chown -h username:groupname symlinkSin -h, chown sigue enlaces simbólicos y cambia la propiedad del archivo objetivo, no del enlace simbólico en sí. Usa -h cuando específicamente quieras cambiar la propiedad del enlace simbólico.
Previsualizar la propiedad antes de hacer cambios
Para árboles de directorios grandes, siempre previsualiza antes de aplicar un chown recursivo:
find /path -maxdepth 2 -printf '%u:%g %pn' | headEsto muestra el propietario y grupo actual para los dos primeros niveles del árbol de directorios, permitiéndote confirmar el alcance del cambio antes de comprometerte.
Confirmar tu identidad actual
Antes de hacer cambios, siempre verifica quién eres y en qué contexto estás operando. Esto previene cambios accidentales realizados bajo la cuenta incorrecta.
Verificar tu usuario actual
whoamiObtener información de identidad completa (usuario, grupos, UIDs)
idSalida de ejemplo:
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(docker)Ver quién está conectado al sistema
whowVerificar el usuario original al usar sudo
Cuando escalas con sudo, dos variables de entorno son relevantes:
echo $USER # The current effective user (root)
echo $SUDO_USER # The original user who invoked sudo (e.g., alice)Esta distinción importa en scripts — $SUDO_USER te dice quién realmente ejecutó el comando.
Modificar atributos de cuenta de usuario
A veces “cambiar usuario” significa modificar la cuenta en sí: renombrarla, cambiar su UID o ajustar membresías de grupo. Estos son cambios permanentes en todo el sistema que pueden afectar inicios de sesión, permisos de archivo y acceso a servicios.
> Mejor práctica: Antes de hacer modificaciones de cuenta, asegúrate de que el usuario esté desconectado y no haya procesos ejecutándose bajo esa cuenta.
Renombrar un usuario (Cambiar nombre de usuario)
sudo usermod -l newname oldnameEsto cambia el nombre de inicio de sesión pero no renombra automáticamente el directorio de inicio. Para también mover y renombrar el directorio de inicio:
sudo usermod -d /home/newname -m newnameSi el usuario tiene un grupo primario con el mismo nombre que su nombre de usuario anterior (que es el predeterminado en la mayoría de distribuciones), actualiza también el nombre del grupo:
sudo groupmod -n newname oldnameCambiar el UID de un usuario
sudo usermod -u 2001 username> Crítico: Después de cambiar un UID, todos los archivos previamente propiedad del UID anterior aparecerán como propiedad de un ID numérico desconocido. Debes corregir esto inmediatamente:
sudo find / -user oldUID -exec chown -h username {} ;Reemplaza oldUID con el UID numérico anterior. Este comando busca en todo el sistema de archivos archivos con el UID anterior y los reasigna al nuevo nombre de usuario.
Añadir un usuario a un grupo
El caso de uso más común es otorgar acceso sudo a un usuario:
Debian/Ubuntu:
sudo usermod -aG sudo usernameRHEL / AlmaLinux / Rocky Linux:
sudo usermod -aG wheel usernameLa bandera -a es crítica — añade el usuario al grupo sin eliminarlo de grupos existentes. Omitir -a reemplazará todas las membresías de grupo solo con el grupo especificado.
Verificar la membresía de grupo
id usernameHoja de referencia rápida
Aquí hay una referencia consolidada para todas las operaciones de cambio de usuario y administración cubiertas en esta guía:
| Tarea | Comando | |
|---|---|---|
| Cambiar a otro usuario (shell de inicio) | su - username | |
| Cambiar a otro usuario a través de sudo | sudo -iu username | |
| Abrir un shell de root | sudo -i | |
| Ejecutar un comando como otro usuario | sudo -u username command | |
| Ejecutar un comando como postgres | sudo -u postgres psql | |
| Verificar usuario actual | whoami | |
| Verificar identidad completa y grupos | id | |
| Verificar invocador original de sudo | echo $SUDO_USER | |
| Cambiar propietario de archivo | sudo chown username file | |
| Cambiar propietario y grupo de archivo | sudo chown username:group file | |
| Cambio de propiedad recursivo | sudo chown -R username:group /path | |
| Previsualizar propiedad de directorio | find /path -maxdepth 2 -printf '%u:%g %pn' | |
| Cambiar usuario del servicio (systemd) | sudo systemctl edit myservice.service | |
| Recargar systemd después de cambios | sudo systemctl daemon-reload | |
| Verificar usuario del proceso | `ps -eo user,pid,cmd | grep service` |
| Renombrar un usuario | sudo usermod -l newname oldname | |
| Mover directorio de inicio | sudo usermod -d /home/newname -m newname | |
| Cambiar UID | sudo usermod -u 2001 username | |
| Corregir propiedad después de cambio de UID | sudo find / -user oldUID -exec chown -h username {} ; | |
| Añadir usuario al grupo sudo | sudo usermod -aG sudo username | |
| Verificar membresía de grupo | id username |
