Saltar al contenido
sudoquest@root
Linux

Usuarios y permisos

Quién puede hacer qué en un servidor: usuarios y grupos, los permisos rwx, dueños, sudo, carpetas de equipo y ACL, con los permisos justos.

25 min de lectura

Un servidor lo usan muchas personas y muchos programas a la vez, y cada uno tiene que poder hacer lo suyo y nada más: la gente de ventas, trabajar con lo de ventas; nginx, leer la web; un becario, lo justo mientras está. Linux lo organiza con usuarios, grupos y permisos, y un usuario especial, root, que lo puede todo.

En este tema aprendes a leer y cambiar permisos, a dar de alta y de baja cuentas, y a montar una carpeta para un equipo. Los ejemplos usan el servidor de ficheros de la empresa, srv-ficheros, y esta vez tu cuenta es de administrador.

Quién soy: id, groups y /etc/passwd

Cada usuario tiene un nombre y un número, el uid; cada grupo, el suyo, el gid. id te dice los tuyos:

tecnico@srv-ficheros:~$ id
uid=1000(tecnico) gid=1000(tecnico) groups=1000(tecnico),27(sudo)

Tu grupo principal (gid) tiene tu mismo nombre: en Ubuntu, cada usuario nace con uno. Los demás son grupos secundarios; aquí, sudo, el de los administradores. id marta (o groups marta) habla de otra persona:

tecnico@srv-ficheros:~$ id marta
uid=1001(marta) gid=1001(marta) groups=1001(marta),1100(contabilidad),1102(direccion)

Las cuentas viven en /etc/passwd, una por línea y con los campos separados por :: el nombre, una x (la contraseña, cifrada, está en /etc/shadow, que solo lee root), el uid, el gid, el nombre completo, la carpeta personal y el shell (el programa que se abre al entrar). Los grupos y sus miembros están en /etc/group:

tecnico@srv-ficheros:~$ grep marta /etc/passwd
marta:x:1001:1001:marta:/home/marta:/bin/bash
tecnico@srv-ficheros:~$ getent group ventas
ventas:x:1101:luis

No todos los usuarios son personas: www-data es el de nginx, y su shell es /usr/sbin/nologin (no se puede entrar con él).

Y para saber quién está conectado ahora, who: cada sesión abierta, con su terminal (pts/0, pts/1…), cuándo entró y desde qué IP. Antes de reiniciar un servidor, o de tocar la cuenta de alguien, se mira:

tecnico@srv-ficheros:~$ who
tecnico  pts/0        2026-10-06 09:15 (192.168.10.50)
marta    pts/1        2026-10-06 09:45 (192.168.10.61)

who am i dice cuál de esas es la tuya, y who -q solo los nombres y cuántos hay.

Ejercicio

¿Quién soy y quién hay?

Primer día con cuenta de administrador en el servidor de ficheros. Antes de tocar nada, mira quién eres tú y quién más hay.

Preparando la máquina…

Los permisos: rwx, para tres

ls -l enseña los permisos al principio de cada línea:

tecnico@srv-ficheros:~$ ls -l
total 8
-rw-r--r-- 1 tecnico tecnico 44 Oct  1 09:15 copia.sh
-rw-rw-r-- 1 tecnico tecnico 38 Oct  1 09:15 notas.txt

Tras el tipo (- un archivo, d una carpeta) vienen tres grupos de tres letras: lo que puede el dueño (rw-), lo que puede el grupo del archivo (rw-) y lo que pueden los demás (r--). Cada letra es un permiso:

En un archivo En una carpeta
r leerlo ver la lista de lo que hay
w cambiarlo crear y borrar dentro
x ejecutarlo (un programa) entrar y llegar a lo de dentro

Una carpeta sin x no se abre, aunque dentro haya archivos con permiso de lectura. Y root no está sujeto a nada de esto: puede leer y cambiarlo todo.

Cambiarlos: chmod

chmod cambia los permisos. Se puede escribir con letras: a quién (u el dueño, g el grupo, o los demás, a todos), qué se hace (+ añadir, - quitar, = dejar exactamente) y qué permisos:

tecnico@srv-ficheros:~$ chmod u+x copia.sh; ls -l copia.sh
-rwxr--r-- 1 tecnico tecnico 44 Oct  1 09:15 copia.sh
tecnico@srv-ficheros:~$ chmod go-rwx notas.txt; ls -l notas.txt
-rw------- 1 tecnico tecnico 38 Oct  1 09:15 notas.txt

O con números: cada grupo de tres es la suma de r = 4, w = 2 y x = 1. Así, 6 es rw-, 5 es r-x, 4 es r-- y 0 es ---, y chmod 640 deja rw-r-----: el dueño lee y escribe, el grupo lee, y los demás, nada. Los más habituales: 644 (archivos), 755 (programas y carpetas), 600 (privado), 750 y 770 (para un grupo).

Con -R, chmod cambia también todo lo que hay dentro de una carpeta. Ahí sirve la X mayúscula: da x solo a las carpetas (y a lo que ya era ejecutable). Así, chmod -R o+rX web deja a los demás leer las páginas y entrar en las carpetas, sin volver programas los archivos.

Ejercicio

Leer y cambiar permisos: chmod

En tu carpeta hay un script de copias que no arranca y unas notas que no debería leer nadie más.

Preparando la máquina…

Dueños: chown y chgrp, con sudo

Todo archivo tiene un dueño y un grupo. chown cambia el dueño (y, con usuario:grupo, las dos cosas) y chgrp, solo el grupo. Cambiar el dueño de algo es cosa de root, así que se hace con sudo delante:

tecnico@srv-ficheros:~$ sudo chown luis:ventas /srv/compartido/ventas/tarifas-2027.ods

sudo ejecuta la orden como root, y solo lo pueden usar los del grupo sudo. Úsalo para lo que de verdad lo necesita, no por costumbre: como root, un error no tiene freno. Con sudo -u usuario lanzas algo como otra persona, la mejor forma de comprobar lo que puede:

tecnico@srv-ficheros:~$ sudo -u auditora ls /srv/compartido/contabilidad
ls: cannot open directory '/srv/compartido/contabilidad': Permission denied

Lo que copias con cp pasa a ser tuyo; con sudo cp -a, la copia queda como el original (dueño, grupo, permisos y fecha): así se repone algo desde una copia de seguridad.

Ejercicio

Dueños y grupos: chown y chgrp

Alguien subió las tarifas de 2027 como root, y en ventas nadie las puede cambiar. Están en /srv/compartido/ventas.

Preparando la máquina…

Altas y bajas: useradd, usermod y userdel

useradd crea una cuenta. Sin opciones hace poco: con -m crea también su carpeta personal (con lo que hay en /etc/skel) y con -s /bin/bash le pone el shell de siempre (si no, le pone /bin/sh). usermod la cambia; lo más habitual, meterla en un grupo:

tecnico@srv-ficheros:~$ sudo useradd -m -s /bin/bash lucia; sudo usermod -aG ventas lucia; id lucia
uid=1011(lucia) gid=1011(lucia) groups=1011(lucia),1101(ventas)

La cuenta nace sin contraseña (bloqueada): se le pone con passwd usuario o, sin preguntar, con echo "usuario:Contraseña" | sudo chpasswd. Y los cambios de grupo no llegan a quien ya está dentro: tiene que volver a entrar (o newgrp).

Para las bajas hay dos caminos. sudo usermod -L usuario bloquea la contraseña (y sudo gpasswd -d usuario sudo le quita el poder de administrador): la cuenta y sus archivos siguen ahí. sudo userdel usuario borra la cuenta y deja sus archivos; con -r borra también su carpeta personal, y eso no se deshace.

Bloquear no borra la contraseña: le pone una ! delante en /etc/shadow. sudo usermod -U usuario se la quita y vuelve a valer la de siempre; sudo passwd -S usuario dice cómo está (P, con contraseña; L, bloqueada).

Ejercicio

Dar de alta a alguien: useradd

Lucía entra hoy en ventas. Su usuario tiene que ser lucia.

Preparando la máquina…

Carpetas de equipo: setgid y umask

Para que un equipo trabaje en una carpeta: un grupo, la carpeta de ese grupo y permisos 770 (el grupo lo puede todo, el resto no entra). Falta un detalle: lo que crea cada uno sería de su grupo principal, y los compañeros no podrían tocarlo. El bit setgid en la carpeta (chmod g+s, o el 2 delante: 2770) hace que todo lo nuevo sea del grupo de la carpeta. En ls -l se ve como una s en la x del grupo:

tecnico@srv-ficheros:~$ ls -ld /srv/compartido/*
drwxrws--- 2 root contabilidad 4096 Oct  1 09:15 /srv/compartido/contabilidad
drwxrws--- 2 root direccion    4096 Oct  1 09:15 /srv/compartido/direccion
drwxrws--- 2 root ventas       4096 Oct  1 09:15 /srv/compartido/ventas

¿Y con qué permisos nace un archivo? Lo decide la umask: los bits que se quitan a lo que pide el programa (666 para un archivo, 777 para una carpeta). En Ubuntu es 0002 (quita la w de los demás): los archivos nacen rw-rw-r--. Con umask 027, rw-r-----:

tecnico@srv-ficheros:~$ umask 027; touch privado.txt; ls -l privado.txt
-rw-r----- 1 tecnico tecnico 0 Oct  6 09:15 privado.txt

Ejercicio

Una carpeta para un equipo

Marta y Luis empiezan un proyecto juntos y necesitan una carpeta en la que los dos puedan trabajar, y nadie más.

Preparando la máquina…

Una sola persona: las ACL

Los permisos de siempre tienen tres casillas: dueño, grupo y los demás. ¿Y si una persona que no es del grupo (una auditora externa) tiene que leer una carpeta? Meterla en el grupo le daría todo lo del grupo; abrirla a “los demás”, a todo el mundo. Para eso están las ACL (listas de control de acceso): permisos para usuarios o grupos concretos.

tecnico@srv-ficheros:~$ sudo setfacl -m u:auditora:rx /srv/compartido/contabilidad
tecnico@srv-ficheros:~$ sudo getfacl /srv/compartido/contabilidad
getfacl: Removing leading '/' from absolute path names
# file: srv/compartido/contabilidad
# owner: root
# group: contabilidad
# flags: -s-
user::rwx
user:auditora:r-x
group::rwx
mask::rwx
other::---

-m añade o cambia una entrada (u: un usuario, g: un grupo), -x la quita y -b las quita todas. Con -R se aplica a todo lo de dentro, y con una X mayúscula, la x solo va a las carpetas (u:auditora:rX): entrar en ellas, pero no ejecutar los archivos. Una carpeta con ACL lleva un + en ls -l (drwxrws---+).

Ejercicio

Acceso para una sola persona: las ACL

Llega la auditora externa (usuario auditora) y tiene que leer lo de contabilidad. No es de la empresa: no la metas en el grupo.

Preparando la máquina…