Permissions Spéciales dans Linux : SUID, SGID et Bit Collant

Avez-vous déjà été confronté à une situation où vous deviez effectuer une tâche sur un système Linux, pour vous retrouver confronté à un refus d’accès frustrant ? Eh bien, dites adieu à ces soucis et bienvenue dans le monde des permissions spéciales sous Linux !

Ce tutoriel est votre passeport pour maîtriser les subtilités des permissions spéciales sous Linux : le bit collant, l’ID utilisateur défini (SUID) et l’ID de groupe défini (SGID). Ces permissions spéciales offrent un niveau supérieur de contrôle de sécurité.

Continuez la lecture et gérez vos fichiers en toute sécurité avec précision et confiance !

Prérequis

Avant de plonger dans les détails des permissions spéciales sous Linux, assurez-vous d’avoir une machine Linux. Ce tutoriel utilise Ubuntu 22.04 LTS (Jammy Jellyfish) pour des démonstrations pratiques.

Exécution de fichiers avec des permissions spéciales sous Linux (SUID)

Les permissions de fichier Linux déterminent généralement la capacité d’un utilisateur à lire, écrire ou exécuter un fichier en fonction de ses autorisations et de celles de son groupe. Cependant, il existe des situations où un utilisateur doit exécuter un fichier avec les autorisations du propriétaire du fichier plutôt que les siennes.

Par exemple, considérez un programme que seuls les utilisateurs root peuvent exécuter, mais il est nécessaire qu’un utilisateur régulier l’exécute pour une tâche spécifique. Dans de tels cas, l’SUID devient inestimable.

Pour voir comment définir les autorisations SUID, suivez ces étapes:

1. Ouvrez le terminal et exécutez les commandes suivantes pour créer un utilisateur (useradd) appelé A-utilisateur (arbitraire) et attribuez-lui un mot de passe (passwd).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Ensuite, exécutez la commande stat ci-dessous pour voir les autorisations existantes de la commande cat.

stat /usr/bin/cat

Prenez note des autorisations d’accès ci-dessous, car vous en aurez besoin pour les comparaisons ultérieures:

  • 0755 – Permet au fichier d’être exécuté avec les autorisations de son propriétaire, fournissant des privilèges élevés aux utilisateurs non privilégiés lors de l’exécution du fichier.
  • -rwxr-xr-x – Définit les autorisations du propriétaire pour lire, écrire et exécuter le fichier (rwx), tandis que les membres du groupe et les autres utilisateurs peuvent lire et exécuter le fichier (r-x et r-x).
Viewing access permissions of the cat command

3. Maintenant, exécutez la commande chmod ci-dessous, qui ne fournit pas de sortie mais définit le bit SUID sur la commande cat.

Cette commande permet à la commande cat de s’exécuter avec les autorisations du propriétaire du fichier plutôt qu’avec les autorisations de l’utilisateur exécutant la commande.

? Notez que l’utilisation de SUID doit être faite avec prudence, car elle peut potentiellement introduire des risques de sécurité si elle n’est pas correctement mise en œuvre. Assurez-vous d’appliquer SUID uniquement aux commandes et fichiers de confiance.

sudo chmod u+s /usr/bin/cat

4. Une fois que vous avez défini le bit SUID, exécutez la commande stat suivante pour vérifier le bit SUID en réexaminant les permissions de la commande cat.

stat /usr/bin/cat

Si réussi, vous verrez ce qui suit, où vous ferez une comparaison avec les informations que vous avez notées à l’étape deux :

  • 0755 changé en 4755, où le nombre 4 représente le bit SUID.
  • -rwxr-xr-x changé en -rwsr-xr-x, où s représente respectivement l’emplacement de permission d’exécution (x) de l’utilisateur.
Verifying the SUID bit

5. Exécutez la commande cat ci-dessous pour tester la permission de l’utilisateur actuellement connecté d’accéder au fichier /etc/shadow. Ce fichier est un fichier système critique qui stocke les mots de passe des utilisateurs chiffrés et des informations connexes, auquel seul un utilisateur root peut accéder.

Par défaut, la commande cat vous permet de voir le contenu d’un fichier sous Linux. Mais ce comportement n’est pas toujours vrai pour chaque fichier.

cat /etc/shadow

Le message ci-dessous apparaît puisque l’utilisateur actuel n’a pas la permission d’accéder au fichier.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

6. Maintenant, exécutez chaque commande ci-dessous pour passer (su) à l’utilisateur nouvellement créé (A-user) et essayez d’accéder à nouveau au fichier /etc/shadow.

Cette fois, la commande cat s’exécute avec les autorisations du propriétaire du fichier (généralement root) plutôt qu’avec les autorisations de l’utilisateur qui a exécuté la commande.

# Passer à A-user
su A-user
# Voir le contenu du fichier /etc/shadow
cat /etc/shadow

Étant donné que vous avez temporairement accordé la permission à A-user de lire le contenu de ce fichier, vous obtiendrez une sortie comme celle ci-dessous.

Viewing the /etc/shadow file’s content

7. Pour des raisons de sécurité, exécutez les commandes suivantes pour quitter l’utilisateur actuel (A-user) et restaurer les autorisations de la commande cat à leur état d’origine.

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Enfin, exécutez la commande ci-dessous pour vérifier que le bit SUID a été supprimé.

stat /usr/bin/cat

Remarquez que les bits SUID 4 et s ne sont plus dans les autorisations d’accès.

Confirming the SUID bit removal

Activation des flux de travail collaboratifs dans les répertoires Linux (SGID)

L’exécution de fichiers avec des autorisations spéciales dans Linux via SUID fonctionne indubitablement bien. Mais que se passe-t-il si vous visez des flux de travail collaboratifs, où plusieurs utilisateurs collaborent sur des projets? En général, vous devez vous assurer que les fichiers nouvellement créés héritent de la propriété de groupe du répertoire parent.

Lorsque vous êtes confronté à ce scénario, le SGID se révèle être le facteur déterminant. Cette fonctionnalité puissante simplifie la gestion des ressources partagées et améliore les flux de travail basés sur les groupes dans les environnements Linux.

Pour voir comment fonctionne le SGID, vous allez créer un groupe, y ajouter des utilisateurs, définir les permissions SGID sur un répertoire, et tester sa fonctionnalité comme suit :

1. Exécutez les commandes suivantes pour vous connecter en tant qu’utilisateur root et créer un nouveau groupe nommé demo (arbitraire). Ce groupe est celui que vous utiliserez pour tester la fonctionnalité SGID.

Ces commandes ne produisent pas de sortie

# Passer en tant que root
sudo su
# Créer un nouveau groupe
groupadd demo
Switching to root and creating a job

2. Ensuite, exécutez les commandes ci-dessous pour créer deux utilisateurs (userA et userB) que vous utiliserez pour simuler un environnement collaboratif.

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. Après avoir créé de nouveaux utilisateurs, exécutez les commandes usermod ci-dessous, qui n’affichent pas de sortie dans le terminal mais ajoutent les utilisateurs (userA et userB) au groupe demo.

usermod -aG demo userA
usermod -aG demo userB

4. Maintenant, exécutez chaque commande ci-dessous, créez un répertoire (mkdir) appelé /demo-dir (arbitraire), et définissez les propriétaires du répertoire sur userA et demo, respectivement.

? Lorsque ces commandes réussissent, elles ne produisent pas de sortie, ce qui s’applique tout au long de ce tutoriel.

# Créer un répertoire
mkdir /demo-dir
# Changer la propriété du répertoire
chown userA:demo /demo-dir

5. Ensuite, exécutez la commande ls suivante pour voir les permissions du répertoire /demo-dir.

ls -ld /demo-dir/

La sortie ci-dessous vérifie que l’utilisateur du répertoire /demo-dir est défini sur utilisateurA et le groupe sur demo.

Viewing the /demo-dir directory’s permissions

6. Avec les autorisations vérifiées, exécutez la commande chmod ci-dessous pour définir le bit SGID sur le répertoire /demo-dir/ comme suit :

  • g+s – Set the SGID bit on the /demo-dir/ directory.
  • o-rwx – Remove all permissions (read, write, execute) for others.
  • u+rwx – Grant read, write, and execute permissions to the owner.
  • g+rwx – Grant read, write, and execute permissions to the group.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. Une fois que le bit SGID est défini, exécutez la commande suivante pour vérifier les autorisations du répertoire /demo-dir.

stat /demo-dir

Si la commande réussit, vous verrez le bit SGID défini, représenté par le numéro 2 avant le mode d’autorisation octal et s à la place de l’autorisation d’exécution du propriétaire du groupe (x) (rws).

Verifying the SGID bit set to the /demo-dir directory

8. Ensuite, exécutez chaque commande ci-dessous pour créer un répertoire /home pour utilisateurA.

mkdir /home/userA
chown userA:userA /home/userA

9. Exécutez les commandes suivantes pour passer en (su) utilisateurA et créer un fichier (touch) appelé textA.txt (arbitraire) dans le répertoire /demo-dir.

Ces commandes n’ont pas de sortie (ce qui s’applique tout au long de ce tutoriel), mais vous vérifierez les autorisations du fichier à l’étape suivante.

# Passer à utilisateurA
su - userA
# Changer de répertoire
cd /demo-dir
# Créer un fichier texte
touch textA.txt

10. Exécutez la commande ls ci-dessous pour voir les autorisations du fichier textA.txt.

ls -l textA.txt

Ci-dessous, le groupe propriétaire du fichier textA.txt est demo, qui est le groupe principal du créateur, userA. Les membres du groupe demo peuvent lire et modifier le fichier, tandis que les autres ne peuvent que le lire.

Pour garantir que les nouveaux fichiers dans le répertoire /demo-dir héritent de la propriété de groupe du répertoire, un bit SGID doit être défini sur le répertoire, comme vous le verrez dans les étapes suivantes.

Verifying the textA.txt file’s permissions

11. À présent, invoquez les commandes suivantes pour quitter l’utilisateur actuel (userA) et définir le bit SGID (chmod g+s) dans le répertoire /demo-dir

# Quitter userA
exit
# Définir SGID sur /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Une fois que le SGID est défini, exécutez la commande ci-dessous pour vérifier le bit SGID ajouté au répertoire /demo-dir.

stat /demo-dir

Comme indiqué ci-dessous, vous remarquerez que le bit SUID 2 est ajouté, et il y a un s à l’emplacement de l’exécution du groupe propriétaire. Cette sortie confirme que le bit SGID a été défini avec succès pour le répertoire /demo-dir.

Verifying the SGID is set to the /demo-dir directory

13. Ensuite, revenez à l’utilisateur userA et créez un autre fichier appelé testA.txt (arbitraire) dans le répertoire /demo-dir.

# Revenir à userA
su - userA
# Changer de répertoire
cd /demo-dir
# Créer un fichier texte
touch testA.txt

14. Une fois créé, exécutez la commande ls ci-dessous pour vérifier la propriété du nouveau fichier (testA.txt).

ls -l testA.txt

Si le SGID fonctionne comme prévu, la sortie indique que tandis que userA est le propriétaire, la propriété du groupe est demo en raison du bit SGID défini sur le répertoire /demo-dir.

Verifying permissions of the testA.txt file

15. Maintenant, créez un répertoire /home pour userB afin de tester davantage la fonctionnalité SGID.

mkdir /home/userB
chown userB:userB /home/userB

16. Passez à l’utilisateur userB et créez un fichier appelé testB.txt (arbitraire) dans le même répertoire /demo-dir.

# Passez à l'utilisateur B
su - userB
# Changez de répertoire
cd /demo-dir
# Créez un fichier texte
touch testB.txt
Switching to userB and creating the testB.txt file

17. Affichez (ls) les informations sur le nouveau fichier (testB.txt).

ls -l testB.txt

Vérifiez la propriété du fichier textB.txt.

Checking the ownership of the textB.txt file

Protection des fichiers dans les répertoires (Bit collant)

La promotion de workflows collaboratifs dans les répertoires Linux favorise le travail d’équipe et la collaboration transparente. Mais lorsque vous devez établir un environnement sécurisé pour gérer efficacement les fichiers, les autorisations du Bit collant feront l’affaire.

En définissant le Bit collant, vous confiez essentiellement les « clés du château » au propriétaire du fichier, au propriétaire du répertoire ou à l’utilisateur root. Cela garantit que seuls eux ont le pouvoir de supprimer ou de renommer le fichier dans le répertoire, offrant une protection supplémentaire pour les données sensibles.

Pour définir les autorisations du Bit collant, vous devez d’abord créer un répertoire partagé en suivant les étapes suivantes :

1. Connectez-vous en tant qu’utilisateur root et créez un répertoire partagé (mkdir) où plusieurs utilisateurs peuvent créer des fichiers.

# Passez en mode root
sudo su
# Créez un répertoire (partagé)
mkdir /shared-dir

2. Ensuite, exécutez les commandes suivantes pour modifier les autorisations du répertoire /shared-dir afin d’accorder des permissions d’écriture à tout le monde.

Le premier chiffre (1) dans 1777 définit le bit collant, tandis que le reste (777) rend le répertoire lisible, inscriptible et exécutable par tout le monde.

# Modifiez les autorisations, définissez le bit collant
chmod 1777 /shared-dir
# Affichez les autorisations du répertoire
ls -ld /shared-dir

Les fonctionnalités ou attributs du bit collant dans un système Linux sont les suivants :

Feature Function
Directory Protection When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users.
Shared Directories The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users.

ci-dessous, vous pouvez voir la lettre ‘t’ dans la partie finale du champ d’autorisation, ce qui indique que le bit collant est défini pour le répertoire /shared-dir.

Viewing permissions of the /shared-dir directory

3. Passez à userA et créez un fichier appelé fileA.txt (arbitraire) dans le répertoire /shared-dir :

# Passez à l'utilisateur A
su - userA
# Créez un fichier texte
touch /shared-dir/fileA.txt

4. Quittez l’utilisateur A, passez à userB et créez un autre fichier appelé fileB.txt (arbitraire) dans le même répertoire /shared-dir.

# Quitter utilisateurA
exit
# Passer à l'utilisateurB
su - userB
# Créer un fichier texte
touch /shared-dir/fileB.txt

5. Maintenant, quittez utilisateurB, passez à utilisateurA et tentez de supprimer le fichier fileB.txt de utilisateurB.

# Quitter utilisateurB
exit
# Passer à utilisateurA
su - userA
# Supprimer un fichier appartenant à utilisateurB
rm /shared-dir/fileB.txt

Vous obtiendrez une sortie comme celle ci-dessous puisque seul le propriétaire du fichier peut apporter des modifications ou supprimer le fichier.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Enfin, exécutez la liste de commandes suivante (ls) pour répertorier tous les fichiers dans le répertoire partagé (/shared-dir).

ls /shared-dir/

Si les autorisations du Sticky Bit fonctionnent, vous verrez que le fichier fileB.txt créé par utilisateurB est intact et n’a pas été supprimé.

Confirming the fileB.txt file still exists

Conclusion

En concluant cette exploration des autorisations spéciales dans Linux, vous avez débloqué un ensemble robuste d’outils : le SUID, le SGID et le Sticky Bit. Armé de ces connaissances, vous pouvez désormais affiner le contrôle d’accès et protéger vos fichiers avec précision.

Mais ne vous arrêtez pas là ! Pourquoi ne pas essayer de configurer un répertoire partagé avec SGID et expérimenter la manière dont les fichiers héritent de la propriété de groupe ? Le monde Linux est à votre portée, et à chaque entreprise, vous maîtriserez l’art de sécuriser votre système avec finesse !

Source:
https://adamtheautomator.com/special-permissions-in-linux/