Cercar fitxers a LinuxPermisos de fitxers a Linux

La comanda find / -perm -u+s a Linux: trobar fitxers amb SUID



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çaSignificat
findBusca fitxers segons els criteris que li donis
/Comença per l’arrel: busca a tot el sistema
-permFiltra per permisos
-u+sEl 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:

FormaSignificatExemple
-perm -modeTots els bits indicats activats (i els altres, igual)-perm -4000: té SUID
-perm /modeAlgun dels bits indicats activat-perm /6000: té SUID o SGID
-perm modePermisos 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 /usr o /var en 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/www o 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/fitxer et 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