Ir directamente al contenido

Ajustes de cookies

Elija por tipo qué cookies permite. Puede cambiar su elección en cualquier momento en Ajustes de cookies, al pie de cada página. Declaración de privacidad

Necesarias

Siempre activadas

Necesarias para iniciar sesión, conservar su carrito y recordar sus preferencias. Siempre están activadas.

¿Qué cookies?
  • weboke_sessie, weboke_klant, weboke_remember: su sesión y mantener la sesión iniciada
  • weboke_basket: su carrito
  • wkBtwIncl: mostrar los precios con o sin IVA
  • wok_cookies: su elección de cookies, 12 meses

Mide qué anuncio lleva a una visita o a un pedido, para no pagar por anuncios que no sirven de nada.

¿Qué cookies?
  • Google Ads a través de Google Tag Manager (_gcl_au, _gcl_aw), hasta 90 días
  • OpenAI Ads, anuncios en ChatGPT
  • wok_aff: a través de qué socio llegó a nosotros (programa de afiliados), 60 días

4,6

País e idioma

Cada país tiene su propio sitio, con los precios y el IVA de ese país.

Ver

Módulo 3 · 3.1

Usuarios, grupos y permisos de archivos

Módulo 3: Usuarios, permisos y sudo · Tiempo de lectura: 12 minutos

Objetivo de aprendizaje: Después de esta lección, sabrá crear y consultar usuarios y grupos, leer los permisos de un archivo o de una carpeta en ls -l y ajustarlos correctamente con chmod y chown sin abrirlo todo.

Conceptos clave: root (UID 0), usuario normal, usuario del sistema, /etc/passwd, /etc/shadow, grupo, adduser, id, rwx, propietario, grupo, otros, octal (644, 755, 600), chmod, chown, umask, setuid, 777

Todos son un número

Linux se diseñó desde el principio para varios usuarios en una sola máquina. Cada proceso que se ejecuta lo hace en nombre de un usuario, y cada archivo tiene un propietario. Para el sistema, un usuario es sobre todo un número, el UID:

  • root tiene el UID 0. Root puede hacerlo todo: leer y modificar cualquier archivo, detener cualquier servicio, crear cualquier usuario. No hay ningún "¿está seguro?".
  • Los usuarios normales, como anna, reciben en Debian y Ubuntu un UID a partir de 1000. Pueden escribir en su propia carpeta personal y poco más.
  • Los usuarios del sistema tienen un número bajo y normalmente no tienen contraseña ni shell. Los servicios se ejecutan con un usuario de este tipo: nginx con www-data, PostgreSQL con postgres. Si alguien ataca con éxito uno de esos servicios, el intruso solo tiene los permisos de ese usuario, no los de root.

Quién es usted lo ve con id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Anna tiene el UID 1000, un grupo propio anna y además pertenece a los grupos sudo y users.

Dónde están los usuarios

La lista de usuarios está en /etc/passwd, con una línea por usuario:

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Los campos, separados por dos puntos, son: nombre, x (la contraseña está en otro lugar), UID, grupo principal, descripción, carpeta personal y shell. En www-data aparece como shell /usr/sbin/nologin: no es posible iniciar sesión.

Las contraseñas en sí están cifradas (en forma de hash) en /etc/shadow. Solo root puede leer ese archivo. Un ! o * al principio del campo de la contraseña significa que no se puede iniciar sesión con contraseña. Así es como root está bloqueado de forma predeterminada en Ubuntu, y en Debian si no indicó una contraseña de root durante la instalación.

Crear usuarios y grupos

En Debian y Ubuntu se usa el práctico adduser:

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

adduser crea el usuario, un grupo propio con el mismo nombre y una carpeta personal, y le pide una contraseña. También existe el comando de más bajo nivel useradd (que es el comando habitual en AlmaLinux y Rocky Linux), pero sin opciones hace menos: no establece contraseña y en algunos sistemas no crea la carpeta personal.

Un grupo es una forma de dar permisos a varios usuarios a la vez. Para añadir un usuario a un grupo:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # lo mismo, funciona en todas partes

Fíjese en la -a de usermod: sin -a sustituye todos los grupos adicionales del usuario por este único grupo. Un grupo nuevo solo se aplica después de volver a iniciar sesión.

Para bloquear una cuenta sin eliminarla (por ejemplo, la de un antiguo compañero):

root@web1:~# usermod -L -e 1 jan

-L bloquea la contraseña y -e 1 hace que la cuenta caduque. Atención: una contraseña bloqueada no siempre impide el acceso con una clave SSH. Por eso, elimine también las claves de /home/jan/.ssh/authorized_keys (lección 2.3); la cuenta caducada (-e 1) sí la rechaza sshd.

Leer permisos

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

El primer bloque de diez caracteres es la clave de todo:

  • Carácter 1: el tipo. - es un archivo normal, d una carpeta (directorio), l un acceso directo (enlace simbólico).
  • Caracteres 2 a 4: lo que puede hacer el propietario.
  • Caracteres 5 a 7: lo que puede hacer el grupo.
  • Caracteres 8 a 10: lo que pueden hacer los otros (todos los demás).

Después vienen el número de enlaces, el propietario, el grupo, el tamaño y la fecha.

Las letras significan lo siguiente en un archivo:

LetraSignificado en un archivo
rleer
wmodificar
xejecutar como programa o script

Y en una carpeta, algo ligeramente distinto:

LetraSignificado en una carpeta
rconsultar los nombres de los archivos de la carpeta
wcrear, renombrar y eliminar archivos en la carpeta
xentrar en la carpeta y abrir los archivos que contiene

Esto último sorprende a mucha gente. Sin x en una carpeta no puede acceder a los archivos que contiene, aunque esos archivos sean legibles. Y quien tiene w en una carpeta puede eliminar archivos de ella, aunque pertenezcan a otra persona.

En el ejemplo: index.html lo puede leer cualquiera; config.php (con la contraseña de la base de datos) lo puede leer y modificar Anna, el grupo www-data (es decir, el servidor web) solo leerlo, y el resto nada. En uploads el servidor web puede escribir, porque ahí van los archivos que suben los visitantes.

Permisos como número

Los permisos se escriben a menudo como tres cifras, el número octal. Cada letra tiene un valor: r = 4, w = 2, x = 1. Se suman por grupo:

PermisosNúmeroUso
rw-r--r--644archivo normal que cualquiera puede leer
rw-r-----640archivo para el propietario y el grupo, como una configuración con una contraseña
rw-------600archivo secreto, como authorized_keys o una clave privada
rwxr-xr-x755carpeta o programa que cualquiera puede usar
rwx------700carpeta privada, como ~/.ssh

Cambiar permisos: chmod y chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

chmod cambia los permisos, con un número o con letras (u, g, o para propietario, grupo y otros; + o - y la letra). chown eigenaar:groep cambia el propietario y el grupo; eso solo puede hacerlo root. Con -R ambos actúan sobre una carpeta entera, y ahí es donde suelen surgir los problemas: chmod -R 644 en una carpeta deja inutilizables todas las subcarpetas, porque las carpetas necesitan x. Para un árbol completo, use mejor find:

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Nunca 777

"No funcionaba, así que le he puesto 777." 777 significa: cualquiera en el servidor puede leer, modificar y ejecutar esto. Si algún día falla la seguridad de un solo servicio o de un solo sitio web de su servidor, el intruso podrá escribir en todo lo que tenga 777, incluidos sus archivos PHP. El verdadero problema casi siempre es el propietario o el grupo: dé al servidor web, a través del grupo, exactamente el permiso que necesita, y solo en la carpeta donde lo necesita.

Permisos predeterminados y bits especiales

Los archivos nuevos reciben sus permisos a través de la umask. Con la umask habitual 022, los archivos nuevos quedan en 644 y las carpetas nuevas en 755. Puede ver su umask con el comando umask.

A veces verá una s en lugar de una x, como en /usr/bin/passwd (-rwsr-xr-x). Es el bit setuid: el programa se ejecuta con los permisos del propietario (root), aunque lo inicie un usuario normal. Es necesario para algunos programas del sistema, pero nunca lo ponga usted en un script. Un archivo setuid inesperado es una señal conocida de intrusión; con find / -perm -4000 -type f 2>/dev/null los verá todos.

En AlmaLinux y Rocky Linux

Allí adduser es otro nombre de useradd; use useradd -m anna y después passwd anna. Para añadir grupos se usa usermod -aG. SELinux añade una capa adicional a los permisos de esta lección: un archivo con los permisos correctos puede ser rechazado igualmente si tiene una etiqueta SELinux incorrecta (ls -Z la muestra).

Resumen

  • Cada usuario tiene un UID; root (0) puede hacerlo todo y los servicios se ejecutan con sus propios usuarios del sistema sin shell.
  • Los usuarios están en /etc/passwd y los hashes de las contraseñas en /etc/shadow. Cree usuarios con adduser y añada grupos con usermod -aG.
  • ls -l muestra el tipo, los permisos del propietario, del grupo y de otros, y después el propietario y el grupo. En una carpeta, x significa entrar y w crear y eliminar archivos.
  • Números habituales: 644 y 755 para lo público, 640 para configuraciones con secretos, 600 y 700 para lo privado. Nunca 777.
  • Use find para establecer permisos en un árbol completo; vigile los archivos setuid.

Cuestionario

1. ¿Qué significa -rw-r----- en un archivo con propietario anna y grupo www-data?



2. ¿Qué ocurre si una carpeta tiene los permisos drw-r--r-- (es decir, ninguna x)?



3. Ejecuta usermod -G www-data anna (sin -a). ¿Cuál es la consecuencia?



4. Un plugin no puede escribir en /var/www/example.com/uploads. ¿Cuál es la mejor solución?



5. ¿Por qué nginx se ejecuta con el usuario www-data y no con root?



Ejercicio

Ejercicio Z3.1: Leer permisos. Abra el archivo de ejemplo rechten-1.txt: contiene la salida de id para tres usuarios y la de ls -l en una carpeta web. Responda en cada pregunta quién puede hacer qué (por ejemplo: "¿puede el servidor web modificar config.php?", "¿qué archivo tiene permisos demasiado amplios?", "¿qué número corresponde a .env?"). El programa compara sus respuestas con la clave fija y explica el porqué en cada pregunta.

Ejercicio Z3.1: Leer permisos

Archivo de este ejercicio: rechten-1.txt










No guardamos lo que escriba ni lo que encontremos. Su navegador recuerda sus respuestas y si ha superado el ejercicio. Si ha iniciado sesión, en Mis cursos solo guardamos que el ejercicio estaba (casi) correcto; allí también puede eliminarlo.

Para saber más

Los pasos de estos artículos se aplican a los planes de hosting y a los VPS de WebOké; con otros proveedores funciona de forma similar.

Un momento…

Configure sus dominios

Configure para cada dominio los servidores de nombres, la vinculación a su hosting y quién será el titular.

Cargando sus dominios…