Les permissions SUID et SGID permettent d'obtenir les droits du proprietaire et/ou du groupe d'un fichier quand celui-ci est execute par un autre utilisateur. Leur utilisation est particulierement sensible quand elles permettent l'execution en tant qu'utilisateur 'root'.
L'utilisation de procedures shell SUID appartenant a 'root' est a proscrire. Il n'y en a pas dans les systemes livres par les constructeurs, il ne faut pas en creer.
Pour obtenir dans le fichier 'ListeCourante' la liste des fichiers ayant la permission SUID ou SGID, utiliser la commande:
$ find /bin -type f \( -perm -4000 -perm -2000 \)-exec ls -lg {} \; > ListeCourante
Vous pouvez aussi utiliser la commande 'find' pour detecter les procedures shell SUID ou SGID, exemple:
$ find / -type f \( -perm -4000 -perm -2000 \)-exec file {} \; | grep shell
Le logiciel COPS du domaine public fournit entre autres cette fonctionnalite. Il verifie egalement que les fichiers SUID appartenant a 'root' ne sont pas reinscriptibles de maniere publique.
Sur la plupart des systemes la commande 'mount' a une option 'nosuid' qui inhibe la permission SUID pour les fichiers appartenant au file system monte.
Les fichiers avec les permissions SUID et/ou SGID doivent faire l'objet d'une surveillance reguliere. La liste obtenue avec la commande 'find' sera comparee a une liste de reference pour detecter les changements intervenus. On peut utiliser la commande:
$ diff ListeReference ListeCourante
La liste de reference sera etablie avec la plus grande attention lors de l'installation ou d'un changement de version du systeme.
Comme il a ete dit, les procedures shell SUID root sont a proscrire. Dans bien des cas elles peuvent etre avantageusement remplacees par un programme C.
La creation de fichiers executables avec la permission SUID root est a deconseiller. On lui preferera le regroupement des objets dont l'acces est rendu necessaire pour la fonctionnalite recherchee dans un groupe specifique. Les fichiers executables auront alors la permission SGID sur ce groupe.
Il faut refuser d'installer un programme SUID root si on ne dispose pas du code source. La qualite de celui-ci doit etre verifiee avant l'installation. On verifiera notamment qu'il n'appelle pas des commandes autorisant le lancement de shell fils ou d'editeurs donnant a l'utilisateur les privileges de 'root' de maniere incontrolee.