El sistema de permisos de Linux se basa en el principio del privilegio mínimo. Esto significa que los usuarios y procesos deben tener acceso estrictamente a lo que necesitan para trabajar, reduciendo la superficie de ataque en caso de vulnerabilidades.
En esta guía práctica, abordamos cómo crear usuarios, agruparlos y controlar el acceso a archivos y directorios utilizando comandos esenciales de la terminal.
1. Creación y Administración de Usuarios
Nunca ejecute su aplicación ni comparta cuentas utilizando el usuario root directamente. Cree cuentas individuales y con privilegios limitados.
Comandos útiles:
- Crear usuario:
sudo adduser nombre_usuario
(El comando adduser crea automáticamente la carpeta home del usuario y solicita la creación de la contraseña). - Eliminar usuario:
sudo deluser nombre_usuario - Agregar usuario al grupo sudo (administrador):
sudo usermod -aG sudo nombre_usuario
2. Creación y Administración de Grupos
Los grupos facilitan el intercambio de directorios entre múltiples usuarios (por ejemplo, desarrolladores que necesitan editar los mismos archivos de un sitio web en WordPress).
Cómo estructurar:
- Cree el grupo de trabajo:
sudo groupadd devteam - Agregue los usuarios al grupo:
sudo usermod -aG devteam usuario1sudo usermod -aG devteam usuario2
3. Cambio de Propietarios de Archivos con chown
Cada archivo y carpeta en Linux pertenece a un usuario y a un grupo. El comando chown (change owner) cambia esta propiedad.
Uso práctico:
Para establecer el usuario www-data y el grupo devteam como propietarios de una carpeta de aplicación web de forma recursiva (todas las subcarpetas): sudo chown -R www-data:devteam /var/www/misitio
4. Administración de Permisos con chmod
El comando chmod (change mode) define quién puede leer (r), escribir (w) o ejecutar (x) archivos y directorios.
Los permisos se distribuyen en tres clases:
- Propietario (User - u)
- Grupo (Group - g)
- Otros (Others - o)
Representación Numérica (Octal):
4= Leer (read)2= Escribir (write)1= Ejecutar (execute)
Sumando los valores, generamos el permiso. Por ejemplo:
7(4+2+1): Permiso total (leer, escribir y ejecutar).6(4+2): Leer y escribir.5(4+1): Leer y ejecutar.4: Solo leer.
Ejemplos comunes de chmod:
chmod 755 archivo.sh: Permite que el propietario haga todo, mientras que el grupo y otros solo pueden leer y ejecutar (común para scripts públicos).chmod 600 id_rsa: Permite que solo el propietario lea y escriba en el archivo (obligatorio para llaves privadas SSH).chmod -R 775 /var/www: Otorga permiso total al propietario y al grupo de desarrollo, y lectura/ejecución a otros.
5. Ejemplo: usuario de deploy y la carpeta del sitio
Cuenta sin clave de login, grupo del sitio, dueño y permiso. El 2775 en los directorios activa el bit setgid: el archivo nuevo hereda el grupo web.
sudo adduser --disabled-password --gecos "" deploy
sudo groupadd --force web
sudo usermod -aG web deploy
sudo mkdir -p /var/www/misitio
sudo chown -R deploy:web /var/www/misitio
sudo find /var/www/misitio -type d -exec chmod 2775 {} \;
sudo find /var/www/misitio -type f -exec chmod 664 {} \;
id deploy
namei -l /var/www/misitio
id muestra los grupos. namei -l muestra el permiso de cada carpeta en la ruta. La clave pública entra con modo 600, y el directorio .ssh con 700:
sudo -u deploy mkdir -p /home/deploy/.ssh
sudo -u deploy chmod 700 /home/deploy/.ssh
echo 'ssh-ed25519 AAAA... deploy@notebook' | sudo -u deploy tee /home/deploy/.ssh/authorized_keys
sudo chmod 600 /home/deploy/.ssh/authorized_keys
Cambie AAAA... por la clave real. chmod 777 no entra en este recorrido: cualquier usuario del servidor pasaría a escribir en la aplicación.
Conclusión
Mantener el control correcto de propietarios y permisos es uno de los pilares de la seguridad de cualquier servidor Linux. Aplicar el chown y chmod correctos evita brechas de seguridad en archivos confidenciales sin interferir con el funcionamiento de sus aplicaciones.