Rechercher des fichiers selon leurs permissions avec find

La commande find dispose de plusieurs options pour rechercher des fichiers/dossiers selon leurs permissions.

Permissions exactes

Tout d’abord, si vous souhaitez trouver les éléments avec le chmod exact :

find / -perm 755

Egal ou plus permissif

Ceux ayant un chmod égal ou supérieur (avec davantage de droits) :

find . -perm -755

Attention cependant car 755 n’est pas supérieur à 766. En effet, le 55 donne les droits de lecture et exécution mais 66 perd le bit d’exécution au profil des droits d’écriture. Il n’est donc pas considérer comme supérieur. En revanche, le filtre matchera avec un 77 (gain des droits en écriture).

Le ‘0’ indique que l’on ignore la valeur. Rechercher 055 signifie donc trouver tous les fichiers dont le groupe et les autres ont les droits en lecture et exécution. Peu importe ce qu’il en est du propriétaire.

setuid / setgid / sticky

Pour trouver les éléments avec un setuid (donc le 1er octet à 4), on utilisera :

find . -perm -4000

Idem avec setgid (1er octet à 2) et le sticky bit (1er octet à 1).

Multiples critères

La dernière syntaxe est lorsque la permission commence par ‘/’. Cela se traduit : cherche les éléments qui répondent à au moins un critère.

Exemple :

find . -perm /222

Le 2 correspond à l’octet d’écriture, on cherche donc un élément dont, de façon inclusive, le propriétaire, le groupe ou les autres possèdent les droits en écriture.

find . -perm /022

Avec le premier octet à 0, on ne recherche plus que dans le groupe ou les autres.

Je trouve cependant plus pratique d’utiliser la syntaxe « longue » lorsque cela se complique :

find . -perm /u=rx,go=r

On recherche ici des éléments dont :

  • soit le propriétaire a les droits de lecture et/ou d’exécution
  • soit le groupe et/ou les autres les droits de lecture.

Pour trouver ceux qui ont le propriétaire en lecture et/ou exécution ET le groupe et/ou les autres en lecture, on chaînera les -perm :

find . -perm /u=rx -perm /go=r

A l’inverse, pour trouver ceux dont le propriétaire a lecture et/ou exécution ET dont le groupe et/ou les autres n’ont pas de droit en lecture, on utilisera le symbole ‘!’ :

find . -perm /u=rx ! -perm /go=r

En espérant avoir été clair 🙂

Pour plus d’informations, je vous invite à lire le manuel de find : www.gnu.org/software/findutils/manual/html_mono/find.html

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s