Setuid

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Dans le cadre des permissions Unix, Setuid (parfois suid) est un terme UNIX, abréviation de « Set User ID ».

Article principal : permissions Unix.

Setuid et Setgid pour les exécutables[modifier | modifier le code]

Il s'agit d'une propriété qui est appliquée aux fichiers et répertoires d'un système d'exploitation UNIX. Grâce à cette propriété, un processus exécutant un tel fichier peut s'exécuter au nom d'un autre utilisateur.

Quand un fichier exécutable est propriété de l'utilisateur root, et est rendu setuid, tout processus exécutant ce fichier peut effectuer ses tâches avec les permissions associées au root, ce qui peut constituer un risque de sécurité pour la machine, s'il existe une faille dans ce programme. En effet, un hacker pourrait utiliser cette faille pour s'arroger des droits d'administrateur et effectuer des opérations réservées, par exemple en se créant un compte d'accès illimité en temps et en pouvoirs.

Notez qu'il est parfaitement possible de rendre un programme setuid d'un compte non-root, ce qui diminue nettement les risques.

Pour d'évidentes raisons de sécurité, un processus ne peut être tracé par un utilisateur non privilégié au travers de l'exécution d'un programme setuid. Toute tentative de traçage d'un tel processus se traduit généralement par la simple non-application du changement d'utilisateur que prévoyait le bit setuid.

Il existe également une propriété Setgid (« Set Group ID ») qui modifie le groupe d'un processus, de la même façon que le Setuid modifie l'utilisateur au nom duquel il s'exécute. Les mêmes remarques de sécurité s'appliquent au bit setuid et au bit setgid.

Setgid pour les répertoires[modifier | modifier le code]

Sur les systèmes UNIX et Linux, Setuid n'a pas d'effet sur les répertoires.

Le fonctionnement de Setgid sur un répertoire est très différent de celui sur les exécutables : si cette propriété est appliquée à un répertoire, tout fichier ou sous-répertoire créé dans ce répertoire parent appartiendra au groupe de celui-ci et non au groupe de l'utilisateur qui crée l'élément. Ceci est utile par exemple dans un dossier de partage, où l'on souhaite que tous les membres d'un groupe de superviseurs puissent modifier ou supprimer les contributions des membres d'un autre groupe.

Lorsqu'un sous-répertoire est créé, il hérite lui aussi de la propriété Setgid. En revanche, si des sous-répertoires existent déjà au moment de l'ajout du Setgid, ils ne sont pas affectés par celui-ci (sauf avec un setgid récursif).

En pratique[modifier | modifier le code]

  • Vous pouvez voir si un fichier est Setuid ou Setgid en tapant la commande :

ls -l nom_du_fichier

Vous verrez alors s'afficher une ligne dans le style :

_rwsr_sr_x 1 propriétaire group 158998 mars 12 17:12 nom_du_fichier

Le s dans la première partie (réservée au propriétaire) _rws indique que le fichier est Setuid, le s dans la deuxième partie (réservée au group) r_s indique que le fichier est SetGid. Si le s est en minuscule c'est que le fichier est exécutable par contre s'il est majuscule c'est qu'il n'est pas exécutable.

  • Pour mettre un fichier en Setuid ou Setgid, voire les deux en même temps vous pouvez utiliser la commande chmod comme dans les exemples suivants, notez que ces deux méthodes permettent de faire la même chose mais de façons différentes :

- méthode .1

chmod ug+s nom_du_fichier pour activer les Setuid et Setgid

chmod u+s nom_du_fichier pour activer le Setuid

chmod g+s nom_du_fichier pour activer le Setgid

- méthode .2

La valeur octale de Setuid est 4 sur le bit de poids fort, celle de Setgid est de 2 sur ce même bit. Ainsi, la commande chmod peut également être utilisée, par exemple, de la sorte :

chmod 4755 nom_du_fichier Ce fichier bénéficiera du Setuid ('4'), son propriétaire pourra le lire, le modifier et l'exécuter ('7'), tandis que les membres de son groupe ainsi que le reste des utilisateurs ne pourront que le lire et l'exécuter, mais pas le modifier ('5').

chmod 6755 nom_du_fichier Le cas est identique, mais en plus du Setuid, on a ici mis en place le Setgid (4 et 2 faisant 6). Bien entendu, le Setgid peut être mis en place seul.

Sécurité[modifier | modifier le code]

Mettre un fichier et surtout un programme en Setuid ou Setgid n'est pas anodin car cela court-circuite le système de protection. Ainsi si vous tapez chmod ug+s /bin/bash vous donnez les droits root à toute personne qui ouvre un terminal ou qui lance l'interpréteur de commande bash.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Lien externe[modifier | modifier le code]