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…