Un sticky bit est un bit d'autorisation sur un fichier ou un répertoire qui permet uniquement au propriétaire du fichier/répertoire ou à l'utilisateur root de supprimer ou de renommer le fichier. Aucun autre utilisateur ne peut supprimer un fichier qu'un autre utilisateur a créé. Imaginez un scénario dans lequel vous créez un répertoire Linux qui peut être utilisé par tous les utilisateurs du système Linux pour créer des fichiers. Les utilisateurs peuvent créer, supprimer ou renommer des fichiers à leur convenance dans ce répertoire. Alors avant de continuer on pourrait tout d'abord ce poser la question du pourquoi un tel répertoire serait-il créé ? En fait il existe, par exemple, le répertoire /tmp dans le système Linux qui peut être utilisé par différents utilisateurs de Linux pour créer des fichiers temporaires.
Maintenant, que se passe-t-il si un utilisateur supprime (ou renomme) accidentellement ou délibérément un fichier créé par un autre utilisateur dans ce répertoire ? Eh bien, c'est pour éviter ce genre de problèmes, que le concept de sticky bit est utilisé.
Un sticky bit est un bit d'autorisation défini sur un fichier ou un répertoire qui permet uniquement au propriétaire du fichier/répertoire ou à l'utilisateur root de supprimer ou de renommer le fichier. Aucun autre utilisateur n'a le droit de supprimer un fichier créé par un autre utilisateur. C'est un indicateur de droits d'accès propre à un système de type Unix qui peut être attribué aux fichiers et aux répertoires.
Dans la cinquième édition d'Unix (en 1974), le sticky bit a été introduit pour être utilisé avec des fichiers purement exécutables. À l'époque, l'objectif du sticky bit était différent. Il a été introduit pour minimiser le délai introduit chaque fois qu'un programme est exécuté. Lorsqu'un programme est exécuté, il faut du temps pour charger le programme en mémoire avant que l'utilisateur puisse commencer à l'utiliser. Si un programme, par exemple un éditeur, est utilisé fréquemment par les utilisateurs, le délai de démarrage était une charge supplémentaire à l'époque. Pour améliorer ce délai, le sticky bit a été introduit. Le système d'exploitation vérifiait que si le sticky bit d'un exécutable était activé, le segment de texte de l'exécutable était conservé dans l'espace d'échange. Ainsi, il était facile de recharger l'exécutable en RAM lorsque le programme était relancé, ce qui minimisait le délai.Bien que cette méthode se soit avérée efficace pour minimiser le délai de démarrage, un problème majeur est apparu à cause de cette opération. En effet, si un correctif est appliqué à l'exécutable, qu'il s'agisse d'une correction de bogue ou d'une nouvelle fonctionnalité, les étapes suivantes doivent être exécutées :
- D'abord, supprimer le bit collant de l'exécutable.
- Maintenant, exécutez l'exécutable et quittez-le pour que le segment de texte existant du swap soit effacé.
- Maintenant, remettre le sticky bit sur l'exécutable et relancer l'exécutable pour que le nouveau segment de texte soit stocké dans la mémoire swap.
Les étapes ci-dessus étaient nécessaires pour que le programme reflète les nouvelles fonctionnalités ou les corrections de bogues qui ont été ajoutées à l'exécutable.
C'était donc l'un des principaux problèmes. De plus, avec l'évolution de la technologie, les techniques d'accès rapide à la mémoire ont évolué, ce qui a en quelque sorte rendu obsolète le besoin de sticky bit à cette fin.
Exemples d'utilisation du sticky bit
Créez un répertoire et donnez à tous les utilisateurs un accès en lecture-écriture-exécution à ce répertoire :
Nous voyons donc qu'un répertoire nommé 'toutAccess' est créé et que l'accès en lecture-écriture-exécution à ce répertoire est donné à tous les utilisateurs par la commande chmod.
Maintenant, créez plusieurs fichiers dans ce répertoire (avec différents utilisateurs) de sorte que tous les utilisateurs aient un accès en lecture-écriture-exécution à ces fichiers.
Par exemple :
Les fichiers utilisateur-fichier1 et utilisateur-fichier2 sont créés par des utilisateurs différents mais ont un accès en lecture-écriture-exécution pour tous les utilisateurs. Cela signifie que l'utilisateur 'henzo' peut supprimer ou renommer le fichier créé par l'utilisateur 'bob'.
Afin d'éviter cela, un sticky bit peut être défini sur le répertoire toutAccess.
Maintenant, activez le sticky bit sur le répertoire en utilisant le drapeau +t de la commande chmod.
Comme on peut le constater, un bit de permission 't' est introduit dans les bits de permission du répertoire.
Maintenant, si l'utilisateur 'henzo' essaie de renommer le fichier 'utilisateur-fichier2', voici ce qui se passe :
Nous voyons donc que l'opération n'est pas autorisée.
Pour Supprimer le sticky bit : l'option -t
Le sticky bit peut être supprimé des permissions d'un répertoire grâce à l'option -t de la commande chmod.
Voici un exemple :
Nous voyons donc que le bit de permission 't' a été supprimé du répertoire.
Les différents systèmes d'exploitation se comportent différemment avec les sticky bits , Par exemple, Linux ne recherche le sticky bit que si un utilisateur tente de renommer un fichier. Il ne vérifiera pas le sticky bit si un fichier est supprimé.