La comanda find / -perm -u+s busca a tot el sistema els fitxers que tenen activat el bit SUID. Un programa amb SUID s’executa amb els privilegis del seu propietari, i no amb els de l’usuari que el llança. Com que el propietari gairebé sempre és root, aquests fitxers són una peça clau de la seguretat: és una de les primeres comprovacions que es fan en auditar un servidor.
Les peces de la comanda
find / -perm -u+s
| Peça | Significat |
|---|---|
find | Busca fitxers segons els criteris que li donis |
/ | Comença per l’arrel: busca a tot el sistema |
-perm | Filtra per permisos |
-u+s | El guió del davant vol dir «que tingui com a mínim aquests bits»; u+s és el bit SUID |
El que importa aquí és el guió que va davant dels permisos. find té tres maneres de comparar-los:
| Forma | Significat | Exemple |
|---|---|---|
-perm -mode | Tots els bits indicats activats (i els altres, igual) | -perm -4000: té SUID |
-perm /mode | Algun dels bits indicats activat | -perm /6000: té SUID o SGID |
-perm mode | Permisos exactament iguals | -perm 4000: només SUID i cap altre permís (no ho trobaràs gairebé mai) |
-perm -u+s i -perm -4000 són equivalents.
La versió que val la pena fer servir
La comanda tal com està té dos problemes: omple la pantalla d’errors Permission denied dels directoris que no pots llegir, i també entra en discos externs, unitats de xarxa i sistemes de fitxers virtuals, de manera que pot tardar molt. Millor així:
sudo find / -xdev -type f -perm -4000 2>/dev/null
sudo: perquè pugui entrar a tots els directoris.-xdev: no surt del sistema de fitxers on comença (no entra a/proc, a discos muntats a/mnt…). Si tens/usro/varen particions separades, posa-les també com a punt de partida:find / /usr /var -xdev ….-type f: només fitxers normals.2>/dev/null: amaga els missatges d’error.
Per veure també el propietari i els permisos, afegeix -exec ls -l {} +:
$ sudo find / -xdev -type f -perm -4000 -exec ls -l {} + 2>/dev/null
-rwsr-xr-x 1 root root 70760 Apr 19 2025 /usr/bin/chfn
-rwsr-xr-x 1 root root 69224 Apr 19 2025 /usr/bin/chsh
-rwsr-xr-x 1 root root 67832 Jul 16 2025 /usr/bin/fusermount3
-rwsr-xr-x 1 root root 137496 Apr 19 2025 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 133440 Jul 31 17:34 /usr/bin/mount
-rwsr-xr-x 1 root root 67904 Jul 31 17:34 /usr/bin/newgrp
-rwsr-xr-x 1 root root 142424 Apr 19 2025 /usr/bin/passwd
-rwsr-xr-x 1 root root 67800 Jan 17 2025 /usr/bin/pkexec
-rwsr-xr-x 1 root root 133472 Jul 31 17:34 /usr/bin/su
-rwsr-xr-x 1 root root 335168 Apr 11 14:21 /usr/bin/sudo
-rwsr-xr-x 1 root root 67904 Jul 31 17:34 /usr/bin/umount
...
Aquesta és una part de la llista real d’un Raspberry Pi amb Debian 13. La s en el lloc de la x del propietari és el bit SUID.
L’exemple de l’original mostrava /etc/passwd i /bin/ping, i no és correcte: /etc/passwd és un fitxer de text (no té SUID ni té sentit que en tingui), i ping ja no fa servir SUID a les distribucions actuals, perquè pot enviar paquets ICMP sense ser root.
Buscar també SGID
El bit SGID (executar amb els privilegis del grup) té els mateixos riscos. Per buscar fitxers amb qualsevol dels dos:
sudo find / -xdev -type f -perm /6000 2>/dev/null
A la llista hi sortiran, a més, programes com crontab o chage, que tenen SGID per poder accedir als fitxers d’un grup concret (crontab, shadow).
Com interpretar el resultat
La llista no és, en si mateixa, cap problema: passwd, su, sudo, mount o newgrp necessiten SUID per funcionar. El que t’interessa és:
- Fitxers que no esperaves: un binari amb SUID a
/home,/tmp,/var/wwwo qualsevol directori on escriuen els usuaris és molt sospitós. - Fitxers que no són de cap paquet: a Debian i Ubuntu,
dpkg -S /ruta/del/fitxeret diu de quin paquet és; a Red Hat i derivades,rpm -qf /ruta/del/fitxer. - Canvis respecte a l’última vegada: desa la llista i compara-la periòdicament.
sudo find / -xdev -type f -perm /6000 2>/dev/null | sort > suid-avui.txt
diff suid-referencia.txt suid-avui.txt
Si un programa que no fas servir té SUID (per exemple, un que va instal·lar un paquet que ja no necessites), pots treure-l’hi amb chmod u-s, però normalment és millor desinstal·lar el paquet. Hi ha eines com lynis que fan aquesta comprovació, i moltes altres, de manera automàtica.
Comandes relacionades
chmod u+s: activar el bit SUID.chmod u-s: treure’l.- Els bits de permisos d’Unix: SUID, SGID i sticky.
- La comanda
find: totes les opcions. - Guia de permisos de fitxers.