Recherche de site Web

Utilisation et exemples du shell Linux Sticky Bit


Avant de parler de ce qu’est un Sticky bit, commençons par expliquer pourquoi nous en avons besoin. Par exemple, nous avons un répertoire /var/share quelque part sur le système de fichiers avec un accès complet pour tous les groupes de permissions, c’est-à-dire owner, group et any, donc tous les bits de permission sont définis sur « on » drwxrwxrwx :


ls -ld /var/share/
drwxrwxrwx. 2 root root 4096 Mar  5 11:02 /var/share/

D’après ce qui précède, nous pouvons voir que tout utilisateur a des autorisations de lecture, d’écriture et d’exécution sur le répertoire /var/share. Ensuite, dans notre scénario, nous avons deux utilisateurs nommés utilisateur1 et utilisateur2. Comme tout le monde a maintenant accès au répertoire /var/share, notre utilisateur1 peut naviguer vers ce répertoire et créer simplement n’importe quel fichier arbitraire :


user1@localhost ~]$ cd /var/share/
[user1@localhost share]$ touch file1
[user1@localhost share]$ ls -l file1 
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:08 file1
[user1@localhost share]$

Le fichier1 a été créé avec un bit d’autorisation défini par la valeur umask de l’utilisateur et la propriété de l’utilisateur et du groupe est définie sur son créateur, c’est-à-dire utilisateur1. Jusqu’à présent, nous n’avons aucun problème et tout fonctionne parfaitement comme prévu. Plus tard, notre utilisateur2 navigue vers le répertoire /var/share et décide de renommer ou de supprimer fichier1 en fichier2 :


[user2@localhost share]$ cd /var/share/
[user2@localhost share]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:20 file1
[user2@localhost share]$ mv file1 file2
[user2@localhost share]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:20 file2
[user2@localhost share]$ rm file2 
rm: remove write-protected regular empty file ‘file2’? y
[user2@localhost share]$ ls
[user2@localhost share]$

Ce qui s’est passé dans l’exemple ci-dessus, c’est que notre utilisateur2 a navigué vers le répertoire /var/share, a listé tous les fichiers et a trouvé file1. Avec l’utilisation de la commande mv, l’utilisateur a renommé file1 en file2. Le fichier a été renommé alors que le propriétaire et le groupe du fichier sont restés inchangés. Après cela, l’utilisateur2 a simplement décidé de supprimer le fichier à l’aide de la commande rm.

À ce stade, nous avons besoin d’un mécanisme pour empêcher les utilisateurs qui ne possèdent pas le répertoire ou le fichier réel dans le répertoire de renommer ou de supprimer les fichiers d’autres utilisateurs. Ce mécanisme s’appelle le « Sticky Bit ». Le sticky bit permet uniquement à la racine, au propriétaire du répertoire et au propriétaire du fichier de renommer et de supprimer des fichiers. Utilisez la commande chmod pour définir un sticky bit sur un répertoire :


[root@localhost ~]# chmod +t /var/share/
[root@localhost ~]# ls -ld /var/share/
drwxrwxrwt. 2 root root 4096 Mar  5 11:21 /var/share/

Le dernier bit d’autorisation exécutable pour tous les utilisateurs est maintenant défini sur t, ce qui signifie qu’un bit autocollant est maintenant en place et que seuls les propriétaires de racine, de fichier ou de répertoire peuvent renommer et supprimer des fichiers. Reproduisons le scénario ci-dessus et laissons utilisateur1 créer un nouveau fichier fichier1 :


[user1@localhost share]$ ls
[user1@localhost share]$ touch file1
[user1@localhost share]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:34 file1
[user1@localhost share]$

file1 est maintenant créé et puisque le post-it est maintenant en place, l’utilisateur2 ne pourra plus renommer ou supprimer un fichier qui ne lui appartient pas :


[user2@localhost share]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:34 file1
[user2@localhost share]$ mv file1 file2
mv: cannot move ‘file1’ to ‘file2’: Operation not permitted
[user2@localhost share]$ rm file1 
rm: remove write-protected regular empty file ‘file1’? y
rm: cannot remove ‘file1’: Operation not permitted
[user2@localhost share]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Mar  5 11:34 file1
[user2@localhost share]$

Dans l’exemple ci-dessus, nous pouvons voir que user2 n’a pas pu renommer ou supprimer un fichier parce qu’il appartient à un autre utilisateur, alors que ce comportement est appliqué par le mécanisme Sticky bit. Le meilleur exemple d’utilisation du sticky bit est le répertoire /tmp/.


ls -ld /tmp/
drwxrwxrwt. 18 root root 480 Mar  5 11:42 /tmp/

Tout utilisateur a accès à /tmp/, cependant, pour empêcher d’autres utilisateurs de renommer ou de supprimer des fichiers appartenant à différents utilisateurs, le sticky bit est défini par défaut sur ce répertoire. Juste pour être complet, notez que vous pouvez supprimer un post-it d’un répertoire avec la commande chmod déjà mentionnée :


[root@localhost ~]# ls -ld /var/share/
drwxrwxrwt. 2 root root 4096 Mar  5 11:38 /var/share/
[root@localhost ~]# chmod -t /var/share/
[root@localhost ~]# ls -ld /var/share/
drwxrwxrwx. 2 root root 4096 Mar  5 11:38 /var/share/
[root@localhost ~]#

Articles connexes: