Permissions des fichiers

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous allez découvrir les permissions des fichiers sous Linux. Vous étudierez trois commandes essentielles : chown, touch et chmod. Ces outils sont indispensables pour gérer l'accès aux fichiers et aux répertoires sur un système Linux. À la fin du laboratoire, vous saurez créer des fichiers, modifier leur propriétaire et changer leurs permissions. La maîtrise de ces commandes vous permettra de contrôler qui peut lire, écrire et exécuter les fichiers sur votre système.

Créer un fichier

Commencez par créer un fichier avec la commande touch. Cette commande polyvalente peut créer des fichiers vides et mettre à jour les horodatages de fichiers existants. Elle permet donc soit de créer rapidement un fichier, soit d'actualiser l'heure de son dernier accès.

Vérifiez d'abord que vous vous trouvez dans le bon répertoire. Vous allez travailler dans votre répertoire project :

cd ~/project

La commande cd signifie « change directory » et permet de changer de répertoire. Le symbole ~ représente votre répertoire personnel et /project désigne le sous-répertoire dans lequel vous voulez vous déplacer. Si le répertoire project n'existe pas, cette commande échouera probablement. En cas de doute, il est généralement recommandé de créer d'abord le répertoire. Dans cet environnement de laboratoire, il devrait toutefois déjà exister.

Créez maintenant un fichier nommé example.txt :

touch example.txt

Cette commande crée un fichier vide appelé example.txt dans le répertoire courant. Pour vérifier que le fichier a bien été créé, utilisez la commande ls :

ls

ls signifie « list » et affiche les fichiers et les répertoires situés à l'emplacement courant. La sortie doit contenir example.txt. Si ce n'est pas le cas, vérifiez que vous avez exécuté correctement la commande touch et que vous vous trouvez bien dans le répertoire ~/project.

Modifier le propriétaire d'un fichier

Maintenant que vous avez créé un fichier, apprenez à modifier son propriétaire. La commande chown permet de changer à la fois le propriétaire utilisateur et le groupe propriétaire d'un fichier. Le propriétaire détermine qui contrôle le fichier.

Vérifiez d'abord le propriétaire actuel du fichier example.txt :

ls -l example.txt

La commande ls -l (« list » au format long) fournit des informations détaillées sur le fichier, notamment ses permissions, son propriétaire et son groupe. Vous devriez obtenir une sortie similaire à celle-ci :

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

Voici comment lire cette sortie :

  1. -rw-rw-r-- représente les permissions du fichier, que vous étudierez plus en détail à l'étape 4. Le premier caractère indique le type de fichier (- pour un fichier ordinaire, d pour un répertoire, etc.). Les caractères suivants représentent les permissions de lecture, d'écriture et d'exécution pour le propriétaire, le groupe et les autres utilisateurs.
  2. Le premier labex est le propriétaire actuel du fichier, c'est-à-dire le nom du compte utilisateur qui possède le fichier.
  3. Le second labex est le groupe actuel du fichier. Un groupe est un ensemble d'utilisateurs pouvant partager des permissions.
  4. 0 correspond à la taille du fichier en octets. Comme le fichier est vide, sa taille est nulle.
  5. Jul 29 15:11 correspond à la date et à l'heure de la dernière modification.
  6. example.txt est le nom du fichier.

Modifiez maintenant le propriétaire du fichier pour le compte utilisateur root. root est le compte administrateur des systèmes Linux et dispose de privilèges particuliers.

sudo chown root:root example.txt

Cette commande fonctionne de la manière suivante :

  • sudo exécute la commande avec les privilèges de root. Votre mot de passe vous sera probablement demandé. chown nécessite des privilèges élevés, car cette commande peut avoir un impact important sur la sécurité du système. Sans sudo, vous obtiendrez une erreur « Permission denied ».
  • chown est la commande qui permet de modifier le propriétaire.
  • root:root définit le nouveau propriétaire et le nouveau groupe, tous deux sur root. La syntaxe est owner:group.
  • example.txt est le fichier cible.

Vérifiez la modification :

ls -l example.txt

Le propriétaire et le groupe doivent maintenant être root :

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Si labex apparaît toujours à la place de root, vérifiez que vous avez utilisé sudo avec la commande chown et que vous avez saisi correctement votre mot de passe.

Modifier le propriétaire d'un répertoire

La commande chown peut également modifier le propriétaire d'un répertoire entier et de son contenu. Observez cette opération. Elle est particulièrement utile pour gérer des structures de répertoires complexes lorsque vous voulez attribuer le même propriétaire à tous les fichiers et sous-répertoires.

Créez d'abord un nouveau répertoire contenant quelques fichiers :

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

Voici ce que font ces commandes :

  • mkdir -p new-dir/subdir crée le répertoire new-dir et son sous-répertoire subdir. L'option -p demande à mkdir de créer les répertoires parents nécessaires. Sans -p, la création de new-dir/subdir échouerait si new-dir n'existait pas.
  • echo "Hello, world" > new-dir/file1.txt crée un fichier nommé file1.txt dans le répertoire new-dir et y écrit le texte "Hello, world". Le symbole > sert à rediriger la sortie : il envoie la sortie de la commande echo vers le fichier indiqué.
  • echo "Another file" > new-dir/subdir/file2.txt crée de la même manière un fichier nommé file2.txt dans le répertoire new-dir/subdir et y écrit le texte "Another file".

Vérifiez maintenant les propriétaires actuels :

ls -lR new-dir

ls -lR affiche récursivement le contenu de new-dir. L'option -R (« recursive ») demande à ls d'afficher tous les fichiers et sous-répertoires de new-dir, ainsi que leur contenu.

Vous devriez obtenir une sortie similaire à celle-ci :

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

Cette sortie indique que le répertoire new-dir, son sous-répertoire subdir et les fichiers file1.txt et file2.txt appartiennent tous à labex.

Modifiez maintenant le propriétaire de new-dir et de tout son contenu pour le compte utilisateur root :

sudo chown -R root:root new-dir

Dans cette commande :

  • L'option -R demande à chown d'effectuer la modification récursivement, c'est-à-dire de changer le propriétaire de tous les fichiers et sous-répertoires situés dans new-dir. Cette option est essentielle : sans elle, seul le répertoire new-dir changerait de propriétaire, tandis que les fichiers et les sous-répertoires qu'il contient appartiendraient toujours à labex.

Vérifiez la modification :

ls -lR new-dir

Vous devriez maintenant obtenir :

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

Comme vous pouvez le constater, le propriétaire du répertoire et de tout son contenu est désormais root. Cet exemple montre l'utilité de l'option -R pour appliquer largement une modification de propriétaire à une structure de répertoires.

Modifier les permissions d'un fichier

Sous Linux, les permissions des fichiers sont représentées par une série de lettres ou de chiffres. Apprenez à les lire et à les modifier. La compréhension des permissions est essentielle pour sécuriser vos fichiers et empêcher les accès non autorisés.

Commencez par afficher les permissions actuelles du fichier example.txt :

ls -l example.txt

Vous pouvez obtenir une sortie similaire à celle-ci :

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

La partie -rw-rw-r-- représente les permissions du fichier. C'est ici qu'interviennent les notations numérique et symbolique. Décomposons cette valeur :

  • Le premier caractère (-) indique qu'il s'agit d'un fichier ordinaire. Les autres indicateurs courants sont d pour un répertoire et l pour un lien symbolique.
  • Les trois caractères suivants (rw-) représentent les permissions du propriétaire : lecture et écriture, mais pas d'exécution.
    • r signifie permission de lecture : le propriétaire peut ouvrir et lire le fichier.
    • w signifie permission d'écriture : le propriétaire peut modifier le fichier.
    • x signifie permission d'exécution : le propriétaire peut exécuter le fichier s'il s'agit d'un programme ou d'un script. Un - signifie que la permission est refusée.
  • Les trois caractères suivants (rw-) concernent le groupe. Ils ont la même signification, mais s'appliquent aux membres du groupe associé au fichier.
  • Les trois derniers caractères (r--) concernent les autres utilisateurs, c'est-à-dire tous les utilisateurs qui ne sont ni le propriétaire ni membres du groupe du fichier. Ils ont la même signification, mais s'appliquent à ces utilisateurs.

Modifiez maintenant ces permissions avec la commande chmod. chmod signifie « change mode » et permet de modifier les permissions. Commencez par la notation numérique.

sudo chmod 700 example.txt

Dans cette commande :

  • 700 est une représentation numérique des permissions :
    • Le premier chiffre (7) représente les permissions du propriétaire.
    • Le deuxième chiffre (0) représente les permissions du groupe.
    • Le troisième chiffre (0) représente les permissions des autres utilisateurs.

Chaque chiffre est compris entre 0 et 7. Il est calculé en additionnant les valeurs correspondant aux permissions de lecture (4), d'écriture (2) et d'exécution (1) :

  • 4 : permission de lecture
  • 2 : permission d'écriture
  • 1 : permission d'exécution
  • 0 : aucune permission

Ainsi, 7 (premier chiffre) donne au propriétaire les permissions de lecture (4), d'écriture (2) et d'exécution (1) : 4+2+1=7
0 (deuxième chiffre) donne au groupe aucune permission (0+0+0=0).
0 (troisième chiffre) donne aux autres utilisateurs aucune permission (0+0+0=0).

Par conséquent, 700 signifie : propriétaire : lecture, écriture et exécution ; groupe : aucune permission ; autres utilisateurs : aucune permission.

Vérifiez la modification :

ls -l example.txt

Vous devriez maintenant obtenir :

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

Le propriétaire dispose désormais des permissions rwx (lecture, écriture et exécution), tandis que le groupe et les autres utilisateurs n'ont aucune permission.

Modifier les permissions d'un répertoire

La modification des permissions d'un répertoire fonctionne de manière similaire à celle des permissions d'un fichier. Créez un nouveau répertoire, puis modifiez ses permissions. Les permissions d'un répertoire déterminent qui peut en afficher le contenu, y créer de nouveaux fichiers et accéder aux fichiers qu'il contient déjà.

Créez d'abord un nouveau répertoire et définissez des permissions non standard :

mkdir ~/test-dir
chmod 700 ~/test-dir

Vérifiez maintenant les permissions actuelles :

ls -ld ~/test-dir

Dans ls -l, l'option -d demande à ls d'afficher le répertoire lui-même plutôt que son contenu. Sans -d, ls afficherait les fichiers et les sous-répertoires à l'intérieur de test-dir, qui est actuellement vide. Vous devriez obtenir :

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Le d au début indique qu'il s'agit d'un répertoire. rwx------ indique que le propriétaire dispose des permissions de lecture, d'écriture et d'exécution, tandis que le groupe et les autres utilisateurs n'ont aucune permission. Pour les répertoires :

  • La permission de lecture (r) permet d'afficher le contenu du répertoire avec ls.
  • La permission d'écriture (w) permet de créer de nouveaux fichiers et sous-répertoires dans le répertoire.
  • La permission d'exécution (x) permet d'accéder aux fichiers et aux sous-répertoires du répertoire, notamment d'y entrer avec cd.

Modifiez maintenant les permissions :

chmod -R 755 ~/test-dir

Dans cette commande :

  • L'option -R applique la modification récursivement à tous les fichiers et sous-répertoires. Le répertoire est vide dans cet exemple, mais il est recommandé d'utiliser cette option avec les répertoires au cas où vous y ajouteriez des fichiers ultérieurement.
  • 755 accorde au propriétaire les permissions de lecture, d'écriture et d'exécution, et au groupe ainsi qu'aux autres utilisateurs les permissions de lecture et d'exécution.

Décomposons 755 :

  • Propriétaire (7) : lecture (4) + écriture (2) + exécution (1) = 7
  • Groupe (5) : lecture (4) + exécution (1) = 5
  • Autres utilisateurs (5) : lecture (4) + exécution (1) = 5

Vérifiez la modification :

ls -ld ~/test-dir

Vous devriez maintenant obtenir :

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

La modification est clairement visible : auparavant, seul le propriétaire avait accès au répertoire (700) ; désormais, il dispose de tous les droits, tandis que les autres utilisateurs peuvent le lire et y accéder (755). Tout utilisateur peut maintenant afficher le contenu de test-dir et accéder aux fichiers qu'il contient, mais seul le propriétaire peut y créer de nouveaux fichiers ou modifier ceux qui existent déjà.

Utiliser la notation symbolique des permissions

La notation numérique est concise, mais la notation symbolique peut être plus intuitive, notamment lorsque vous ne voulez modifier qu'une seule permission. Elle utilise des lettres pour représenter l'utilisateur, le groupe et les autres utilisateurs, ainsi que des opérateurs pour ajouter ou supprimer des permissions.

Dans cette étape, vous allez créer un petit script shell, puis lui ajouter la permission d'exécution.

Créez d'abord un nouveau fichier de script contenant quelques lignes :

cd ~/project
echo '#!/bin/bash' > script.sh
echo 'echo "Hello, World"' >> script.sh

Ces commandes effectuent deux opérations :

  • La première commande echo crée script.sh et y écrit la première ligne, #!/bin/bash. Cette ligne s'appelle un shebang et indique à Linux d'exécuter le script avec Bash.
  • La seconde commande echo ajoute une nouvelle ligne à la fin du fichier avec >>. Elle écrit echo "Hello, World", qui affichera Hello, World lors de l'exécution du script.

Vérifiez que le fichier contient maintenant deux lignes distinctes avec la commande suivante :

cat script.sh

Vous devriez obtenir :

#!/bin/bash
echo "Hello, World"

Vérifiez maintenant ses permissions initiales :

ls -l script.sh

Vous devriez obtenir une sortie similaire à celle-ci :

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Comme vous pouvez le constater, le script dispose initialement des permissions de lecture et d'écriture pour le propriétaire et le groupe, et de la permission de lecture pour les autres utilisateurs. Il ne possède pas la permission d'exécution, indispensable pour l'exécuter comme un programme.

Essayez d'exécuter le script :

./script.sh

Vous devriez obtenir une erreur « Permission denied », car le script ne possède pas encore la permission d'exécution. La partie ./ indique au shell d'exécuter le script situé dans le répertoire courant.

Ajoutez maintenant la permission d'exécution pour le propriétaire avec la notation symbolique :

chmod u+x script.sh

Dans cette commande :

  • u désigne l'utilisateur, c'est-à-dire le propriétaire. Les autres lettres sont g pour le groupe, o pour les autres utilisateurs et a pour tous les utilisateurs (propriétaire, groupe et autres).
  • +x ajoute la permission d'exécution. Le symbole + ajoute une permission et le symbole - en supprime une.

Ainsi, u+x signifie « ajouter la permission d'exécution au propriétaire ».

Vérifiez la modification :

ls -l script.sh

Vous devriez maintenant obtenir :

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Le propriétaire dispose désormais des permissions rwx (lecture, écriture et exécution).

Exécutez à nouveau le script :

./script.sh

Cette fois, la sortie suivante doit s'afficher :

Hello, World

Cet exemple montre clairement pourquoi il faut ajouter la permission d'exécution aux scripts, ainsi que la différence entre leur état avant et après cette modification. La notation symbolique permet de modifier facilement des permissions précises sans recalculer toute la représentation numérique.

Résumé

Dans ce laboratoire, vous avez étudié des commandes Linux essentielles pour gérer les permissions des fichiers :

  1. Vous avez utilisé touch pour créer de nouveaux fichiers et mettre à jour des fichiers existants.
  2. Vous avez appris à utiliser chown pour modifier le propriétaire des fichiers et des répertoires, y compris récursivement pour des structures de répertoires entières.
  3. Vous avez utilisé chmod avec les notations numérique et symbolique pour modifier les permissions des fichiers et des répertoires, en distinguant les niveaux de permission du propriétaire, du groupe et des autres utilisateurs.
  4. Vous avez observé pourquoi les permissions sont importantes dans des situations concrètes, notamment parce que la permission d'exécution est nécessaire pour lancer des scripts.
  5. Vous avez clarifié la différence entre les notations numérique et symbolique de chmod, ainsi que les situations dans lesquelles chacune peut être la plus appropriée.

Ces commandes sont essentielles pour maintenir la sécurité et contrôler les accès sur les systèmes Linux. Soyez toujours prudent lorsque vous modifiez des permissions, en particulier avec sudo, car des changements incorrects peuvent avoir des conséquences importantes sur la sécurité et le fonctionnement du système. Vérifiez toujours vos commandes avant de les exécuter et assurez-vous de comprendre les effets des modifications apportées.