GNU/Linux >> Tutoriels Linux >  >> Linux

Autorisations de fichiers spéciales sous Linux :SUID, GUID et Sticky Bit

Les autorisations et la propriété des fichiers sont le concept de sécurité de base et pourtant essentiel de Linux. Vous connaissez probablement déjà ces termes. Il ressemble généralement à ceci :

En dehors de ces autorisations régulières, il existe quelques autorisations de fichiers spéciales et peu d'utilisateurs Linux en sont conscients.

Pour commencer à parler des autorisations spéciales, je vais supposer que vous avez une certaine connaissance des autorisations de base sur les fichiers. Si ce n'est pas le cas, veuillez lire notre excellent guide expliquant l'autorisation des fichiers Linux.

Maintenant, je vais vous montrer quelques autorisations spéciales avec de nouvelles lettres sur le système de fichiers Linux.

Dans cet exemple, la commande passwd, chargée de changer le mot de passe d'un utilisateur, a la lettre s au même endroit on s'attend à voir x ou - , pour les autorisations utilisateur. Il est important de noter que ce fichier appartient à l'utilisateur et au groupe root.

Avec cette autorisation, vous n'avez pas besoin de donner sudo accéder à un utilisateur spécifique lorsque vous souhaitez qu'il exécute un script racine.

Qu'est-ce que SUID ?

Lorsque le bit SUID est défini sur un fichier exécutable, cela signifie que le fichier sera exécuté avec les mêmes autorisations que le propriétaire du fichier exécutable.

Prenons un exemple pratique. Si vous regardez le fichier exécutable binaire de la commande passwd, le bit SUID est défini.

linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22  2019 /usr/bin/passwd

Cela signifie que tout utilisateur exécutant la commande passwd l'exécutera avec la même autorisation que root.

Quel est l'avantage ? La commande passwd doit éditer des fichiers comme /etc/passwd, /etc/shadow pour changer le mot de passe. Ces fichiers appartiennent à root et ne peuvent être modifiés que par root. Mais grâce au drapeau setuid (bit SUID), un utilisateur normal pourra également modifier ces fichiers (qui appartiennent à root) et changer son mot de passe.

C'est la raison pour laquelle vous pouvez utiliser la commande passwd pour changer votre propre mot de passe malgré le fait que les fichiers que cette commande modifie appartiennent à root.

Pourquoi un utilisateur normal ne peut-il pas changer le mot de passe des autres utilisateurs ?

Notez qu'un utilisateur normal ne peut pas changer les mots de passe des autres utilisateurs, uniquement pour lui-même. Mais pourquoi? Si vous pouvez exécuter la commande passwd en tant qu'utilisateur normal avec les mêmes autorisations que root et modifier les fichiers comme /etc/passwd, pourquoi ne pouvez-vous pas changer le mot de passe des autres utilisateurs ?

Si vous vérifiez le code de la commande passwd, vous constaterez qu'il vérifie l'UID de l'utilisateur dont le mot de passe est en cours de modification avec l'UID de l'utilisateur qui a exécuté la commande. S'il ne correspond pas et si la commande n'a pas été exécutée par root, une erreur est générée.

Le concept setuid/SUID est délicat et doit être utilisé avec la plus grande prudence, sinon vous laisserez des failles de sécurité dans votre système. C'est un concept de sécurité essentiel et de nombreuses commandes (comme la commande ping) et programmes (comme sudo) l'utilisent.

Maintenant que vous comprenez le concept SUID, voyons comment définir le bit SUID.

Comment définir le bit SUID ?

Je trouve la manière symbolique plus facile lors de la définition du bit SUID. Vous pouvez utiliser la commande chmod de cette manière :

chmod u+s file_name

Voici un exemple :

linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Vous pouvez également utiliser la voie numérique. Il vous suffit d'ajouter un quatrième chiffre aux autorisations normales. Le nombre octal utilisé pour définir SUID est toujours 4.

linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt

Comment supprimer SUID ?

Vous pouvez utiliser soit le mode symbolique dans la commande chmod comme ceci :

chmod u-s test.txt

Ou utilisez la méthode numérique avec 0 au lieu de 4 avec les autorisations que vous souhaitez définir :

chmod 0766 test2.txt

Différence entre le petit s et le S majuscule en tant que bit SUID

Vous souvenez-vous de la définition de SUID ? Il permet à un fichier d'être exécuté avec les mêmes autorisations que le propriétaire du fichier.

Mais que se passe-t-il si le fichier n'a pas de bit d'exécution défini en premier lieu ? Comme ceci :

linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt

Si vous définissez le bit SUID, il affichera un S majuscule, pas un petit s :

linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Le drapeau S en tant que SUID signifie qu'il y a une erreur que vous devriez examiner. Vous voulez que le fichier soit exécuté avec la même autorisation que le propriétaire, mais il n'y a pas d'autorisation exécutable sur le fichier. Ce qui signifie que même le propriétaire n'est pas autorisé à exécuter le fichier et si le fichier ne peut pas être exécuté, vous n'obtiendrez pas l'autorisation en tant que propriétaire. Cela échoue sur tout le point de définition du bit SUID.

Comment trouver tous les fichiers avec SUID défini ?

Si vous souhaitez rechercher des fichiers avec cette autorisation, utilisez la commande find dans le terminal avec l'option -perm.

find / -perm /4000

Qu'est-ce que le SGID ?

SGID est similaire à SUID. Avec le bit SGID défini, tout utilisateur exécutant le fichier aura les mêmes autorisations que le groupe propriétaire du fichier.

Son avantage réside dans la gestion du répertoire. Lorsque l'autorisation SGID est appliquée à un répertoire, tous les sous-répertoires et fichiers créés dans ce répertoire obtiendront la même propriété de groupe que le répertoire principal (et non la propriété de groupe de l'utilisateur qui a créé les fichiers et répertoires).

Ouvrez votre terminal et vérifiez la permission sur le fichier /var/local :

linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24  2018 /var/local

Ce dossier /var/local a la lettre « s » au même endroit où vous vous attendez à voir « x » ou « - » pour les autorisations de groupe.

Un exemple pratique de SGID est avec le serveur Samba pour partager des fichiers sur votre réseau local. Il est garanti que tous les nouveaux fichiers ne perdront pas les autorisations souhaitées, peu importe qui les a créés.

Comment définir le SGID ?

Vous pouvez définir le bit SGID en mode symbolique comme ceci :

chmod g+s directory_name

Voici un exemple :

linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/

Vous pouvez également utiliser la voie numérique. Il vous suffit d'ajouter un quatrième chiffre aux autorisations normales. Le nombre octal utilisé pour SGID est toujours 2.

linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/

Comment supprimer le bit SGID ?

Utilisez simplement le -s au lieu de + comme ceci :

chmod g-s folder

La suppression du SGID revient au même que la suppression du SGID. Utilisez le 0 supplémentaire devant les autorisations que vous souhaitez définir :

chmod 0755 folder

Comment rechercher des fichiers avec SGID défini sous Linux

Pour trouver tous les fichiers avec le bit SGID défini, utilisez cette commande :

find . -perm /2000

Qu'est-ce qu'un Sticky Bit ?

Le sticky bit fonctionne sur le répertoire. Avec un sticky bit défini sur un répertoire, tous les fichiers du répertoire ne peuvent être supprimés ou renommés que par les propriétaires de fichiers uniquement ou par la racine.

Ceci est généralement utilisé dans le répertoire /tmp qui fonctionne comme la corbeille des fichiers temporaires.

linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp

Comme vous pouvez le voir, le dossier /tmp, a la lettre t au même endroit on s'attend à voir x ou pour les autres autorisations. Cela signifie qu'un utilisateur (sauf root) ne peut pas supprimer les fichiers temporaires créés par d'autres utilisateurs dans le répertoire /tmp.

Comment définir le sticky bit ?

Comme toujours, vous pouvez utiliser à la fois le mode symbolique et le mode numérique pour définir le sticky bit sous Linux.

chmod +t my_dir

Voici un exemple :

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/

La méthode numérique consiste à ajouter un quatrième chiffre aux autorisations normales. Le nombre octal utilisé pour le sticky bit est toujours 1.

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/

Comment retirer le sticky bit :

Vous pouvez utiliser le mode symbolique :

chmod -t my_dir

Soit le mode numérique avec 0 devant les permissions habituelles :

chmod 0775 tmp2

Comment trouver des fichiers avec sticky bit défini sous Linux

Cette commande renverra tous les fichiers/répertoires avec le sticky bit défini :

linuxhandbook:~$ find . -perm /1000

Si le répertoire n'a pas l'autorisation d'exécution définie pour tous, la définition d'un bit collant entraînera l'affichage de T au lieu de t. Une indication que les choses ne sont pas tout à fait correctes avec le bit collant.

Conclusion

Je mets cette image ici pour rappeler ce que vous venez d'apprendre :

Cette flexibilité pour gérer les dossiers, les fichiers et toutes leurs autorisations est si importante dans le travail quotidien d'un administrateur système. Vous pouvez voir que toutes ces autorisations spéciales ne sont pas si difficiles à comprendre, mais elles doivent être utilisées avec la plus grande prudence.

J'espère que cet article vous a donné une bonne compréhension de SUID, GUID et Sticky Bit sous Linux. Si vous avez des questions ou des suggestions, veuillez laisser un commentaire ci-dessous.


Linux
  1. Comment trouver des fichiers avec des autorisations SUID et SGID sous Linux

  2. Autorisations de fichiers et sauvegarde ?

  3. UNIX / Linux :Comment utiliser Sticky Bit sur un répertoire et un fichier

  4. Qu'est-ce que SUID, SGID et Sticky bit ?

  5. Questions d'entretien Linux - Autorisations spéciales (SUID, SGID et sticky bit)

Comprendre les autorisations de fichiers Linux

Commande Chmod sous Linux (autorisations de fichiers)

Autorisations et propriété des fichiers Linux expliquées avec des exemples

Autorisations de fichiers sous Linux avec exemple

Comprendre les autorisations de fichiers de base et la propriété sous Linux

Questions d'entretien Linux - Autorisations de base sur les fichiers et les répertoires