Chaque fichier Linux a un bit d'exécution. Voici ce que cela signifie
Sommaire
Résumé
-
Le bit d'exécution détermine si l'autorisation est accordée ou non pour exécuter un fichier en tant que programme ou script.
-
La définition du bit d'exécution sur un répertoire décide de la capacité d'accès, permettant l'entrée et l'accès aux fichiers.
-
La compréhension et la manipulation des autorisations de fichiers à l'aide de commandes comme Stat et ChMOD sont essentielles pour les utilisateurs de Linux.
Le système d'autorisation de fichier Linux de base est simple et robuste, et il n'est pas surprenant qu'il ait survécu intact pendant plus de 50 ans. Mais le bit d'exécution est un élément déroutant, qui vaut la peine d'être compris en détail.
Quel est le bit d'exécution et comment puis-je voir ce que c'est?
Chaque fichier sur un système Linux a un ensemble d'autorisations qui contrôlent ce qui peut en faire: peut-il être lu, écrit ou exécuté? Il y a trois niveaux d'utilisateur, chacun avec son propre ensemble d'autorisations: le propriétaire du fichier (utilisateur), les membres du groupe propriétaire du fichier et tout le monde (autre). Ces trois actions et trois types d'utilisateurs nous donnent un total de neuf autorisations pour chaque fichier:
N'oubliez pas que, sur Unix & Linux, les répertoires sont également des fichiers. Ils ont les mêmes données d'autorisation que les autres fichiers, bien que la signification de ces autorisations soit légèrement différente.
Les autorisations de lecture et d'écriture sont assez explicites, mais le «bit d'exécution» est un peu plus mystérieux, même magique. Une fois que vous l'avez compris, cependant, c'est assez simple et particulièrement utile lorsque vous en avez besoin.
Vous pouvez examiner les autorisations d'un fichier à l'aide d'un outil comme LS ou STAT. Essayez de courir ls -l Contre un fichier sur votre système, et vous verrez quelque chose comme les suivants:
Il y a beaucoup d'informations sur le fichier ici, mais les autorisations ne sont que l'ensemble des lettres au début. Dans ce cas, « RWXR-XR-X » signifie que, alors que seul le propriétaire du fichier peut lui écrire, tout le monde peut le lire et l'exécuter. Vous entendrez le terme «bit d'exécution» mais, vraiment, il y a trois bits d'exécution par fichier.
Que fait le bit d'exécution à un fichier?
L'objectif principal du bit d'exécution est de contrôler si vous pouvez ou non exécuter un fichier en tant que programme ou script. Si vous entrez le nom d'un fichier sur votre ligne de commande, votre shell tentera de l'exécuter. Essayer d'exécuter un fichier de données comme un document ou une image produira une erreur d'autorisation:
En effet, le bit d'exécution n'est pas défini sur un tel fichier. Cependant, le bit d'exécution n'est pas magique; Vous ne pouvez pas agiter votre baguette CHMOD sur un fichier image et la transformer en programme exécutable:
Vous ne pouvez exécuter un fichier que s'il s'agit d'un certain type. D'une manière générale, il existe deux types de fichiers que vous pouvez exécuter directement sur Linux:
- Un exécutable binaire: Il s'agit d'un fichier qui a été compilé à partir du code source et emballé pour une architecture spécifique, en utilisant des instructions de code machine pour effectuer sa tâche. Vous pouvez compiler un tel programme à partir de la source, le télécharger ou l'installer à l'aide d'un gestionnaire de packages.
- Un fichier de script: Il s'agit d'un fichier texte écrit dans une langue lisible par l'homme qui peut être exécuté avec un autre programme, un interprète. Il peut s'agir d'un script shell ou d'un programme dans une langue de script comme Perl ou PHP.
Lorsque vous exécutez directement un fichier de script, en tapant son chemin, votre shell décide quel interprète à utiliser en fonction de la ligne Shebang du script. Par exemple, un script Python peut commencer par cette ligne:
#!/usr/bin/python
Cela renforce le fait que le bit d'exécution concerne les autorisations et rien de plus. C'est ce qui permet au shell décider si vous devez être autorisé à essayer d'exécuter un fichier en tant que programme, et non si l'exécuter a réellement un sens.
Il est important de comprendre que le bit d'exécution n'est pas un moyen infaillible d'empêcher l'exécution. Prenez ce script shell à titre d'exemple:
#!/bin/sh
echo "pretend this script does something dangerous like rm -rf / ..."
Vous pourriez penser que la suppression de l'autorisation d'exécution vous protège:
Cependant, considérez le cas suivant:
Catastrophe! Le script s'exécute maintenant parce que:
-
Tout le monde peut exécuter le programme / bin / sh.
-
Le programme SH essaiera d'exécuter le nom de fichier passé comme argument, sans vérifier son bit d'exécution.
Ainsi, l'exécution d'un programme implique deux aspects distincts. Les autorisations du fichier déterminent si vous pouvez essayer de l'exécuter en tapant son chemin. Le contenu du fichier détermine s'il fait réellement quelque chose lorsqu'il est exécuté. En fin de compte, le bit d'exécution est un mécanisme de sécurité pour vous empêcher d'exécuter accidentellement un fichier.
Que fait le bit Exécute à un répertoire?
Le bit d'exécution fonctionne très différemment lorsque vous le définissez sur un répertoire. Après tout, un répertoire ne peut pas être un programme, il n'a donc aucun sens d'en exécuter un. Au lieu de cela, le bit EXECUTE détermine si vous pouvez saisir un répertoire et accéder à ses fichiers.
Avec le bit Exécute défini sur un répertoire, vous pouvez utiliser la commande CD pour y entrer et la commande LS pour afficher les détails de son contenu:
Cependant, si vous supprimez cette autorisation, vous ne pourrez plus saisir ce répertoire ou afficher les détails des fichiers à l'intérieur:
Notez que la commande LS affiche toujours une liste longue, mais elle remplace la plupart des données par des points d'interrogation, indiquant qu'il ne peut pas le lire. Les noms réels des fichiers à l'intérieur d'un répertoire sont stockés dans le cadre de ce répertoire, donc Lire l'autorisation accorde à leur accès. Mais toute autre donnée, comme la taille d'un fichier ou sa date de modification, est inaccessible sans exécuter l'autorisation sur le répertoire.
Cela peut entraîner des erreurs confuses si vous avez une commande aliasée. Par exemple, sur mon système Ubuntu, LS est aliasé à LS – Colorqui utilise certaines données de fichier pour colorer sa sortie. Sur un répertoire non exécutable, cela produit des erreurs:
Mais, sans cette option, LS Fonctionne très bien sur un tel répertoire car tout ce qu'il doit afficher est des noms de fichiers.
Comment puis-je utiliser et changer le bit d'exécution?
Si vous avez besoin de vous concentrer uniquement sur les autorisations d'un fichier, vous pouvez utiliser STAT pour obtenir des résultats plus fins que LS. L'option -C du programme STAT vous permet de spécifier un format pour extraire les métadonnées exactes dont vous avez besoin. Par exemple, pour afficher uniquement les autorisations d'un fichier à côté de son nom, utilisez ce format:
stat -c "%a %n"
Vous devrez modifier cette commande sur macOS qui utilise une version BSD de STAT plutôt que la version Linux GNU:
Si vous voulez juste la chaîne d'autorisation, vous pouvez supprimer le «% n», c'est-à-dire:
stat -c "%a"
Cela peut être utile pour les scripts. Par exemple, vous pouvez utiliser cette ligne unique pour obtenir des informations récapitulatives des différents paramètres d'autorisation pour tous les fichiers d'un répertoire:
stat -c "%a" ~/home/projects/all
En rapport
Comment utiliser la commande stat sur Linux
Plus de détails que LS.
Vous pouvez modifier les autorisations d'un fichier à l'aide de la commande CHMOD. La syntaxe complète de ChMOD est assez compliquée car c'est un outil puissant. Cependant, si vous vous souvenez des actions basées sur des lettres de base et des abréviations (u = utilisateur / propriétaire, g = groupe, o = autre, a = all), il est facile à utiliser.
Pour rendre un fichier exécutable par quiconque, utilisez cette commande:
chmod a+x file
Pour supprimer l'autorisation exécutable de tous les utilisateurs, saisissez ceci:
chmod a-x file
En rapport
Comment utiliser la commande chmod sur Linux
Découvrez comment fonctionnent les autorisations de fichiers Linux et comment utiliser la commande CHMOD.