Gentoo Logo

[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


6. Permissions de fichiers

Table des matières :

6.a. Lecture pour tous

Les utilisateurs normaux ne devraient pas avoir accès aux fichiers de configuration ou de mots de passe. Un attaquant pourrait dérober les mots de passe d'une base de données ou d'un site Internet et les utiliser pour modifier, voire effacer des données. C'est pourquoi il est important que les permissions des fichiers soient correctes. Si vous êtes certain qu'un fichier n'est utilisé que par root, assignez-lui les permissions 0600 et assignez au fichier l'utilisateur approprié avec chown.

6.b. Écriture pour tous les utilisateurs et tous les groupes

Exemple de code 2.1 : trouver des fichiers et répertoires accessibles en écriture pour tous

# find / -type f \( -perm -2 -o -perm -20 \) \ -exec ls -lg {} \; 2>/dev/null >writable.txt
# find / -type d \( -perm -2 -o -perm -20 \) \ -exec ls -ldg {} \; 2>/dev/null >>writable.txt

Cela créera un long fichier contenant la liste des fichiers qui ont un droit d'écriture pour tout le monde ou pour le groupe. Vérifiez les permissions et éliminez les droits sur les fichiers qui sont accessibles en écriture par tout le monde en exécutant la commande /bin/chmod o-w sur ces fichiers.

6.c. Les fichiers SUID/SGID

Les fichiers dont le bit SUID ou SGID est activé sont exécutés avec les privilèges de l'utilisateur ou du groupe possédant ce fichier, et non avec ceux de l'utilisateur qui exécute le fichier. Normalement, ces bits sont utilisés sur des fichiers qui doivent fonctionner en tant que root pour accomplir leur travail. Ces fichiers peuvent mener à une exploitation locale de votre système avec les droits root s'ils contiennent des failles de sécurité. Ceci est dangereux, et les fichiers avec des bits SUID ou SGID doivent être évités à tout prix. Si vous n'utilisez pas ces fichiers, faites un chmod 0 dessus ou bien désinstallez les paquets qui ont généré ces fichiers. (Vérifiez à quel paquet ils appartiennent avec la commande equery. Si elle n'est pas déjà installée, faites emerge gentoolkit). Pour les fichiers que vous utilisez, modifiez juste le bit SUID en faisant chmod -s.

Exemple de code 3.1 : trouver des fichiers setuid

# find / -type f \( -perm -004000 -o -perm -002000 \) \ -exec ls -lg {} \; 2>/dev/null >suidfiles.txt

Cette commande crée un fichier contenant la liste de tous les fichiers SUID/SGID.

Exemple de code 3.2 : liste des binaires setuid

/bin/su
/bin/ping
/bin/mount
/bin/umount
/var/qmail/bin/qmail-queue
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/crontab
/usr/bin/chage
/usr/bin/expiry
/usr/bin/sperl5.6.1
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/suidperl
/usr/lib/misc/pt_chown
/usr/sbin/unix_chkpwd
/usr/sbin/traceroute
/usr/sbin/pwdb_chkpwd

Gentoo Linux ne contient pas beaucoup de fichiers SUID par défaut (cela dépend de ce que vous avez installé). Vous pouvez néanmoins obtenir une liste similaire à celle ci-dessus. La plupart de ces commandes ne devraient pas être utilisées par des utilisateurs normaux et devraient donc être restreintes à root. Désactivez le mode suid sur ping, mount, umount, chfn, chsh, newgrp, suidperl, pt_chown et traceroute en faisant chmod -s sur chacun de ces fichiers. N'enlevez pas ce mode sur les fichiers su, qmail-queue ou unix_chkpwd. Cela vous empêcherait de pouvoir faire des su ou bien de recevoir des courriers. En modifiant ce bit (lorsque c'est sécuritaire), vous enlevez la possibilité à un utilisateur normal (ou à un attaquant) d'obtenir un accès root grâce à ces fichiers.

Les seuls fichiers en mode SUID que j'ai sur mon système sont su, passwd, gpasswd, qmail-queue, unix_chkpwd et pwdb_chkpwd. Mais, si vous utilisez X, vous en aurez sans doute davantage, puisque X requiet l'accès privilégié qui lui est conféré par SUID.

6.d. Binaires SUID/SGID et liens non symboliques

Un fichier n'est considéré comme effacé qu'une fois qu'il n'y a plus de liens pointant vers celui-ci. Cela peut sembler un peu étrange, mais regardez : un fichier comme /usr/bin/perl n'est en fait qu'un lien vers l'inode sur lequel les données sont sauvegardées. On peut créer le nombre de liens qu'on veut vers ce fichier, et tant que tous n'auront pas été supprimés, le fichier continuera d'exister.

Si vos utilisateurs ont accès à une partition qui n'est pas montée avec l'option nosuid ou noexec (par exemple, si /tmp, /home, ou /var/tmp ne sont pas des partitions séparées) vous devez faire attention à ce que vos utilisateurs ne créent pas de liens en dur vers des binaires SGID, pour qu'après une mise à jour avec Portage, ils puissent continuer à avoir accès aux anciennes versions.

Attention : si vous obtenez un avertissement de Portage à propos de liens en durs qui resteraient, et que vos utilisateurs peuvent écrire sur une partition qui leur permette d'exécuter des fichiers SUID/SGID, vous devez lire cette section avec attention. L'un de vos utilisateur pourrait essayer de contourner votre mise à jour pour garder une ancienne version d'un programme. Si vos utilisateurs ne peuvent pas créer leurs propres fichiers SUID, ou qu'ils ne peuvent exécuter de programmes qu'en utilisant un chargeur dynamique (partitions montées avec l'option noexec), vous n'avez pas à vous inquiéter.

Note : les utilisateurs n'ont pas besoin de pouvoir avoir un accès en lecture pour créer un lien pointant vers celui-ci. Ils ont seulement besoin d'une permission de lecture sur le répertoire qui le contient.

Pour vérifier de combien de liens un fichier dispose, vous pouvez utiliser la commande stat.

Exemple de code 4.1 : la commande stat

$ stat /bin/su
  File: `/bin/su'
  Size: 29350           Blocks: 64         IO Block: 131072 regular file
Device: 900h/2304d      Inode: 2057419     Links: 1
Access: (4711/-rws--x--x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2005-02-07 01:59:35.000000000 +0000
Modify: 2004-11-04 01:46:17.000000000 +0000
Change: 2004-11-04 01:46:17.000000000 +0000

Pour trouver les fichiers SUID ou SGID disposant de plusieurs liens, vous pouvez utiliser find.

Exemple de code 4.2 : trouver les binaires SUID/SGID ayant plusieurs liens

$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls

[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


Imprimer

Voir tout

Dernière mise à jour le 2 avril 2010

Résumé : Sécurisez vos fichiers.

Kim Nielsen
Auteur

John P. Davis
Correcteur

Eric R. Stockbridge
Correcteur

Carl Anderson
Correcteur

Jorge Paulo
Correcteur

Sven Vermeulen
Correcteur

Benny Chuang
Correcteur

Sune Jeppesen
Correcteur

Tiemo Kieft
Correcteur

Zack Gilburd
Correcteur

Dan Margolis
Correcteur

FRLinux
Traducteur

Matthieu Montaudouin
Traducteur

Olivier Fisette
Traducteur

Clément Varaldi
Traducteur

Xavier Neys
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.