Setuid, setgid et bit collant expliqué

Setuid, setgid et bit collant expliqué
Linux a 3 types d'accès aux fichiers et répertoires: lecture, écriture et autorisation d'exécution.

La lecture des subventions des utilisateurs d'accéder aux fichiers de lecture lors de la rédaction d'autorisations permettant aux utilisateurs de modifier ou de supprimer des fichiers, les autorisations d'exécution leur permettent d'exécuter des fichiers.

Ces autorisations peuvent être appliquées avec des différences pour le propriétaire du fichier, les utilisateurs appartenant au groupe du fichier et tous les utilisateurs (pas le propriétaire ni les utilisateurs du groupe).

Le bit setuid, Setgid et Sticky vous permettent d'implémenter des restrictions ou des privilèges supplémentaires sans modifier le tableau des autorisations.

Les autorisations Linux régulières ont été profondément expliquées lors des autorisations Linux expliquées, une lecture recommandée avant de continuer avec ce tutoriel. Le tutoriel actuel se concentre sur les drapeaux setuid, setgid et collants pour «hériter» du propriétaire de fichier ou des autorisations de groupe aux utilisateurs ayant un accès restreint et empêcher les utilisateurs non privilégiés de supprimer les fichiers qu'ils ne possèdent pas.

Comprendre le bit seuid:

La capture d'écran suivante montre le contenu du répertoire Linuxhintsetuid et les autorisations de fichier:

Comme vous pouvez le voir, tous les fichiers appartiennent à l'utilisateur et au groupe linuxhint; le fichier Didacticiel.SMS a des autorisations de lecture et d'écriture pour le propriétaire, de lire les autorisations pour les utilisateurs du même groupe, et aucune autorisation du tout pour les autres utilisateurs.

Si un utilisateur autre que le propriétaire du fichier, qui n'appartient pas au groupe, essaie de lire le fichier, il échouera en raison du manque d'autorisations pour tous les utilisateurs ou autres utilisateurs.

La capture d'écran suivante montre l'utilisateur torvalds essayé sans succès d'accéder au Didacticiel.SMS déposer.

Supposons maintenant l'utilisateur linuxhint veut garder le tutoriel.TXT restreint tout en permettant aux utilisateurs de le lire uniquement via une application spécifique. Cela peut être réalisé en utilisant le drapeau setuid.

En d'autres termes, l'utilisateur torvalds ne pourra pas lire le fichier Didacticiel.SMS. Pourtant, il dirigera le lecteur-appartenant à l'utilisateur linuxhint, hériter de ses autorisations pendant le processus d'exécution. Cela est possible si le propriétaire ajoute le setuid Bid au tableau d'autorisation du fichier, instruisant le fichier d'être toujours traité comme par le propriétaire et avec les privilèges du propriétaire même s'ils sont exécutés par un autre utilisateur comme torvalds.

NOTE: Vous pouvez utiliser le code C ci-dessous pour reproduire les exemples suivants. Compiler la course Code CC.C -o lecteur

Code d'application du lecteur:

#inclure
#include // pour la fonction exit ()
int main()
char C [1000];
Fichier * fptr;
if ((fptr = fopen ("tutoriel.txt "," r ")) == null)
printf ("Erreur! Le fichier ne peut pas être ouvert.");
// Programme sort si le pointeur de fichier renvoie nul.
sortie (1);

sommeil (5);
// lit du texte jusqu'à ce que Newline soit rencontrée
fscanf (fptr, "% [^ \ n]", c);
printf ("Données du fichier: \ n% s", c);
fclose (fptr);
retour 0;

Avant de continuer, voyons ce qui se passe si l'utilisateur Torvalds, qui a des autorisations pour exécuter l'application lecteur, exécute le lecteur Avant que Linuxhint applique l'indicateur setuid.

Comme vous pouvez le voir, Torvalds a réussi à exécuter le lecteur, un programme C conçu pour lire le tutoriel.txt avec le tableau des autorisations suivantes, mais le lecteur n'a pas accordé l'accès à Didacticiel.SMS parce que torvalds n'a pas d'autorisations pour le lire.

Lecteur Le tableau des autorisations est indiqué ci-dessous:

-RWXR-XR-X 1 Linuxhint LinuxHint lecteur

Voyons maintenant ce qui se passe quand linuxhint ajoute l'indicateur setuid au lecteur Tableau des autorisations en fonctionnant:

Lecteur Chmod U + S

Si vous courez ls -l , Vous remarquerez que le tableau des autorisations a changé et le nom du programme apparaît en rouge, vous alertant sur le risque possible. Le nouveau tableau des autorisations ressemble à ceci:

-rwsr-xr-x

Le nouveau S J'ai mis en évidence en bleu affiche que le fichier a le drapeau setuid; Chaque fois que le fichier est exécuté, le processus appartiendra au propriétaire de fichier indépendamment de qui exécutera le programme. Étant donné que le propriétaire exécutera le fichier avant le système, l'exécution héritera des autorisations du propriétaire. C'est pourquoi maintenant, après linuxhint Ajout de l'indicateur setuid, l'utilisateur torvalds Doit être capable de lire le tutoriel.txt à travers le lecteur.

NOTE: Torvalds peut exécuter le lecteur Parce que tous les utilisateurs ont des droits d'exécution; si linuxhint Supprime les autorisations d'exécution pour tous les utilisateurs, torvalds ne pourra pas l'exécuter.

Le setuid L'indicateur définit le fichier comme par le propriétaire, et l'utilisateur qui l'exécute héritera les autorisations du propriétaire, mais SetUid ne définit pas qui peut exécuter le fichier.

Comme vous pouvez le voir, Torvalds a réussi à lire «Données du fichier:

Vous ne devriez pas pouvoir lire ceci ".

Si tandis que Torvalds exécute le script, j'exécute la commande PS suivante, vous verrez une différence entre l'utilisateur réel (Ruser) et l'utilisateur effectif (utilisateur) du processus 4332 (lecteur).

PS -AO PID, UID, RUSER, utilisateur, RGroup, Egroup, Commande

La capture d'écran ci-dessus se manifeste malgré le véritable utilisateur en cours d'exécution lecteur est Torvalds ou un autre utilisateur, le fichier est toujours traité comme par linuxhint, avec ses autorisations, et c'est pourquoi Torvalds ne peut voir le fichier que via la demande.

Le drapeau setuid peut être supprimé en fonctionnant:

chmod u-s

Comprendre le bit setgid:

SetGid est similaire à SetUid, mais au lieu de modifier l'utilisateur qui traite le fichier, il remplace le groupe effectif du groupe de fichiers, accordant l'accès en fonction des autorisations de groupe.

Si le bit setgid est appliqué à un répertoire, tous les fichiers créés dans le répertoire appartiendront au groupe du répertoire.

La capture d'écran suivante montre que Torvalds n'a pas la permission de lire le tutoriel.txt, seul le propriétaire et le groupe peuvent lire le fichier. Même avec un lecteur, Torvalds ne peut pas lire le fichier car il n'a aucune autorisation, et aucun bit setuid n'a été ajouté.

Voyons ce qui se passe après que Linuxhint ajoute Setgid:

Lecteur Chmod G + S


-RWXR-SR-X: Comme vous pouvez le voir dans le tableau d'autorisation, le S est maintenant sur la colonne de groupe, ce qui signifie que lorsque le programme est exécuté, il fonctionnera toujours avec ses propres privilèges de groupe.

Alors voyons ce qui se passe lorsque Torvalds essaie d'accéder au tutoriel.txt à nouveau à l'aide du lecteur:

Torvalds a réussi à lire le tutoriel.SMS; Voyons ce que la commande PS montre sur le processus du lecteur:

PS -AO PID, UID, RUSER, utilisateur, RGroup, Egroup, Commande

Comme vous pouvez le voir dans le processus 6713, l'utilisateur exécutant le fichier est Torvalds, mais le groupe effectif est LinuxHint, le groupe du fichier; C'est pourquoi Torvalds pourrait accéder au tutoriel.TXT avec les autorisations de groupe du lecteur.

Le bit setgid peut être supprimé en fonctionnant:

Chmod G-S

Comprendre le bit collant:

Un autre bit d'autorisation est le bit collant qui, s'il est défini, empêche les utilisateurs non privilégiés de supprimer le contenu. Si le bit collant est appliqué, seul le propriétaire ou la racine peut supprimer les fichiers, mais pas tous les utilisateurs, même s'ils ont des autorisations d'écriture.

L'exemple suivant montre que l'utilisateur LinuxHint ajoute le bit collant au répertoire actuel:

chmod + t .

drwxr-xr-t: Comme vous pouvez le voir maintenant, il y a un T à la fin du tableau des autorisations du Linuxhintsetuid annuaire. Cela signifie que les utilisateurs ne peuvent pas supprimer les fichiers qu'ils ne possèdent pas dans le répertoire, même s'ils ont des autorisations d'écriture.

La capture d'écran suivante affiche des autorisations pour un fichier appelé «quelque chose»Sous le répertoire Linuxhintsetuid avec le bit collant spécial:

Comme vous pouvez le voir, malgré les autorisations d'écriture à la fois sur le répertoire et sur le fichier, Torvalds ne peut pas supprimer le fichier quelque chose:

J'espère que vous avez trouvé ce tutoriel sur SetUid, Setgid et Sticky Bit utile. Continuez à suivre Linuxhint pour plus de conseils et de tutoriels Linux.