Hosting Equipo Avantys 7 min

Usuarios y Permisos en VPS: Guía Completa

Gestiona usuarios y permisos en tu VPS correctamente. Crear usuarios, grupos, sudo, permisos de archivos y mejores prácticas de seguridad.

// Compartir

Usuarios y Permisos en VPS: Guía Completa
Usuarios y permisos en VPS

Usar root para todo es tentador pero peligroso. Un error y borras el sistema. Un atacante que entre tiene acceso total. La gestión correcta de usuarios y permisos es fundamental para la seguridad.

Esta guía te enseña a gestionar usuarios y permisos como un profesional.

Por qué no usar root para todo

Usando rootUsando usuarios separados
Un error = desastreErrores contenidos
Sin auditoríaSabes quién hizo qué
Todo o nadaPermisos granulares
Atacante = acceso totalAtacante = acceso limitado

Estructura recomendada

Estructura de usuarios en VPS
root          → Solo para emergencias
├── admin     → Tu usuario con sudo
├── deploy    → Despliegues automáticos
├── www-data  → Servidor web
└── mysql     → Base de datos

Gestión de usuarios

Crear usuario

# Crear usuario básico
sudo adduser nombre_usuario

# Crear usuario sin directorio home
sudo adduser --no-create-home nombre_usuario

# Crear usuario de sistema (sin login)
sudo adduser --system --no-create-home nombre_usuario

# Crear con shell específico
sudo adduser --shell /bin/bash nombre_usuario

Ver información de usuario

# Info del usuario actual
whoami
id

# Info de otro usuario
id nombre_usuario

# Ver grupos del usuario
groups nombre_usuario

# Ver todos los usuarios
cat /etc/passwd

# Solo nombres de usuarios con shell
grep -E '/bin/(bash|sh|zsh)' /etc/passwd | cut -d: -f1

Modificar usuario

# Cambiar shell
sudo usermod -s /bin/bash nombre_usuario

# Añadir a grupo
sudo usermod -aG grupo nombre_usuario

# Cambiar directorio home
sudo usermod -d /nuevo/home nombre_usuario

# Bloquear usuario
sudo usermod -L nombre_usuario

# Desbloquear usuario
sudo usermod -U nombre_usuario

# Cambiar nombre de usuario
sudo usermod -l nuevo_nombre viejo_nombre

Eliminar usuario

# Eliminar usuario (mantiene home)
sudo deluser nombre_usuario

# Eliminar usuario y su home
sudo deluser --remove-home nombre_usuario

# Eliminar usuario y todos sus archivos
sudo deluser --remove-all-files nombre_usuario

Cambiar contraseña

# Cambiar tu contraseña
passwd

# Cambiar contraseña de otro usuario (como root)
sudo passwd nombre_usuario

# Forzar cambio en próximo login
sudo passwd -e nombre_usuario

# Ver estado de contraseña
sudo passwd -S nombre_usuario

Gestión de grupos

Crear y gestionar grupos

# Crear grupo
sudo addgroup nombre_grupo

# Añadir usuario a grupo
sudo adduser nombre_usuario nombre_grupo
# o
sudo usermod -aG nombre_grupo nombre_usuario

# Ver miembros de un grupo
getent group nombre_grupo

# Eliminar usuario de grupo
sudo deluser nombre_usuario nombre_grupo

# Eliminar grupo
sudo delgroup nombre_grupo

Grupos comunes

GrupoPropósito
sudoPermisos de administrador
www-dataServidor web
dockerEjecutar Docker sin sudo
admLeer logs del sistema
sshAcceso SSH (si se configura)

Sudo: Permisos de administrador

Añadir usuario a sudo

# Método 1: Añadir al grupo sudo
sudo usermod -aG sudo nombre_usuario

# Método 2: Editar sudoers
sudo visudo

Configuración de sudoers

# /etc/sudoers (usar visudo para editar)

# Usuario con todos los permisos
nombre_usuario ALL=(ALL:ALL) ALL

# Usuario sin pedir contraseña
nombre_usuario ALL=(ALL) NOPASSWD: ALL

# Usuario solo puede reiniciar nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

# Usuario puede ejecutar comandos como www-data
deploy ALL=(www-data) NOPASSWD: ALL

# Grupo con permisos
%developers ALL=(ALL) NOPASSWD: /usr/bin/git, /usr/bin/npm

Usar sudo

# Ejecutar comando como root
sudo comando

# Ejecutar como otro usuario
sudo -u www-data comando

# Abrir shell como root
sudo -i

# Abrir shell como otro usuario
sudo -u nombre_usuario -i

# Ver qué puedes hacer con sudo
sudo -l

Sistema de permisos

Sistema de permisos en Linux

Entender los permisos

-rwxr-xr-x 1 usuario grupo 4096 Feb 11 10:00 archivo.sh
│├─┤├─┤├─┤
│ │  │  └── Otros (o)
│ │  └───── Grupo (g)
│ └──────── Usuario/Owner (u)
└────────── Tipo (- archivo, d directorio, l enlace)

Significado de rwx

PermisoEn archivosEn directorios
r (4)Leer contenidoListar contenido
w (2)ModificarCrear/eliminar archivos
x (1)EjecutarEntrar (cd)

Permisos en números

NúmeroPermisosSignificado
7rwxTodo
6rw-Leer y escribir
5r-xLeer y ejecutar
4r—Solo leer
0---Nada

Ejemplos comunes

PermisoSignificado
755rwxr-xr-x → Dueño todo, otros leer/ejecutar
644rw-r—r— → Dueño leer/escribir, otros solo leer
700rwx------ → Solo el dueño
600rw------- → Solo el dueño, sin ejecutar
775rwxrwxr-x → Dueño y grupo todo

Cambiar permisos con chmod

Modo numérico

# Permisos típicos para archivos
chmod 644 archivo.txt      # rw-r--r--
chmod 600 archivo_privado  # rw-------

# Permisos típicos para scripts
chmod 755 script.sh        # rwxr-xr-x
chmod 700 script_privado   # rwx------

# Permisos para directorios
chmod 755 directorio/      # rwxr-xr-x
chmod 700 directorio_privado/

# Recursivo
chmod -R 755 directorio/

Modo simbólico

# Añadir permiso
chmod +x script.sh         # Añadir ejecución a todos
chmod u+x script.sh        # Añadir ejecución solo al dueño
chmod g+w archivo.txt      # Añadir escritura al grupo

# Quitar permiso
chmod -x script.sh         # Quitar ejecución
chmod o-rwx archivo.txt    # Quitar todo a otros

# Establecer exactamente
chmod u=rwx,g=rx,o=r archivo

# Copiar permisos
chmod g=u archivo.txt      # Grupo igual que usuario

Cambiar propietario con chown

# Cambiar dueño
sudo chown usuario archivo.txt

# Cambiar dueño y grupo
sudo chown usuario:grupo archivo.txt

# Solo cambiar grupo
sudo chown :grupo archivo.txt
# o
sudo chgrp grupo archivo.txt

# Recursivo
sudo chown -R usuario:grupo directorio/

# Cambiar siguiendo enlaces simbólicos
sudo chown -H usuario archivo

Permisos para web

Estructura típica

/var/www/sitio/
├── public/          # 755, www-data:www-data
   ├── index.php    # 644
   └── assets/      # 755
├── storage/         # 775 (escritura)
├── cache/           # 775 (escritura)
└── .env             # 600 (privado)

Configurar permisos web

# Propietario www-data
sudo chown -R www-data:www-data /var/www/sitio

# Permisos base
sudo find /var/www/sitio -type d -exec chmod 755 {} \;
sudo find /var/www/sitio -type f -exec chmod 644 {} \;

# Directorios de escritura
sudo chmod -R 775 /var/www/sitio/storage
sudo chmod -R 775 /var/www/sitio/cache

# Archivos sensibles
sudo chmod 600 /var/www/sitio/.env

Tu usuario + www-data

# Añadir tu usuario al grupo www-data
sudo usermod -aG www-data tu_usuario

# Crear con grupo www-data
sudo chown -R tu_usuario:www-data /var/www/sitio

# Permisos que permiten a ambos
sudo chmod -R 775 /var/www/sitio

# Nuevos archivos heredan grupo
sudo chmod g+s /var/www/sitio

Usuario para deploy

Crear usuario deploy

# Crear usuario
sudo adduser --disabled-password deploy

# Añadir a www-data
sudo usermod -aG www-data deploy

# Configurar sudo limitado
sudo visudo
# Añadir:
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart php8.2-fpm
deploy ALL=(www-data) NOPASSWD: ALL

Configurar SSH para deploy

# Crear directorio SSH
sudo mkdir -p /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh

# Añadir clave pública (de GitHub Actions, etc.)
sudo nano /home/deploy/.ssh/authorized_keys
# Pegar la clave pública

sudo chmod 600 /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh

Permisos especiales

SUID, SGID, Sticky bit

# SUID (4): Ejecutar como el dueño
chmod 4755 archivo    # -rwsr-xr-x
chmod u+s archivo

# SGID (2): Ejecutar como el grupo / heredar grupo en dirs
chmod 2755 directorio  # drwxr-sr-x
chmod g+s directorio

# Sticky bit (1): Solo el dueño puede borrar (para /tmp)
chmod 1777 directorio  # drwxrwxrwt
chmod +t directorio

ACLs (permisos avanzados)

# Ver ACLs
getfacl archivo

# Añadir permiso a usuario específico
setfacl -m u:usuario:rwx archivo

# Añadir permiso a grupo específico
setfacl -m g:grupo:rx archivo

# Permisos por defecto en directorio
setfacl -d -m u:usuario:rwx directorio/

# Eliminar ACL
setfacl -x u:usuario archivo

# Eliminar todas las ACLs
setfacl -b archivo

Auditoría

Ver quién hizo qué

# Últimos logins
last

# Logins fallidos
lastb

# Quién está conectado
who
w

# Historial de comandos de un usuario
cat /home/usuario/.bash_history

# Ver uso de sudo
grep sudo /var/log/auth.log

Buscar archivos por permisos

# Archivos con SUID
find / -perm -4000 -type f 2>/dev/null

# Archivos escribibles por todos
find /var/www -perm -002 -type f

# Archivos sin dueño
find / -nouser -o -nogroup 2>/dev/null

Preguntas frecuentes

¿Debo usar root o crear otro usuario?

Crea un usuario con sudo para uso diario. Root solo para emergencias o tareas que específicamente lo requieran. Esto limita el daño de errores y mejora la auditoría.

¿Qué permisos debo dar a los archivos de mi web?

Generalmente 644 para archivos y 755 para directorios. Archivos sensibles como .env deben ser 600. Directorios que necesitan escritura (uploads, cache) pueden ser 775.

¿Por qué mi script no se ejecuta aunque tenga permisos?

Verifica que tenga permiso de ejecución (chmod +x). También revisa el shebang (#!/bin/bash) y que el intérprete exista. Si está en un sistema de archivos montado con 'noexec', no funcionará.

¿Cómo permito que mi usuario y www-data editen los mismos archivos?

Añade tu usuario al grupo www-data (usermod -aG www-data tu_usuario), haz que los archivos pertenezcan a tu_usuario:www-data, y usa permisos 775/664.

¿Qué es el sticky bit y para qué sirve?

El sticky bit en directorios (como /tmp) hace que solo el dueño de un archivo pueda borrarlo, aunque el directorio tenga permisos de escritura para todos.

Nuestra recomendación

Setup básico:

  1. Crear usuario admin con sudo
  2. Deshabilitar login de root por SSH
  3. Usuario deploy para CI/CD
  4. Permisos correctos en /var/www

Mejores prácticas:

  • Nunca uses root para tareas diarias
  • Permisos mínimos necesarios
  • Audita accesos regularmente
  • Documenta qué usuario hace qué

¿Necesitas gestión profesional? La administración gestionada de Avantys incluye configuración segura de usuarios y permisos.


Conclusión

La gestión correcta de usuarios y permisos es la base de la seguridad de tu VPS. Tómate el tiempo de configurarlo bien desde el principio.

Recuerda: permisos mínimos necesarios, usuarios separados por función, y nunca uses root para tareas diarias.

¿Necesitas un VPS seguro? Explora los VPS de Avantys con configuración de seguridad incluida.


¿Quieres que lo hagamos por ti?

En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.

Hablar con Avantys
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.