Permissions des fichiers

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, nous allons plonger dans l'univers des permissions de fichiers sous Linux. Nous explorerons trois commandes essentielles : chown, touch et chmod. Ces outils sont cruciaux pour gérer l'accès aux fichiers et aux répertoires sur un système Linux. À la fin de ce laboratoire, vous maîtriserez la création de fichiers, le changement de propriétaire et la modification des permissions. La compréhension de ces commandes vous permettra de contrôler qui peut lire, écrire et exécuter des fichiers sur votre système.

Création d'un nouveau fichier

Commençons par créer un nouveau fichier à l'aide de la commande touch. Cette commande polyvalente permet de créer de nouveaux fichiers vides et de mettre à jour les horodatages de fichiers existants. Considérez-la comme un moyen rapide de « toucher » un fichier, soit pour le faire exister, soit pour mettre à jour sa dernière date d'accès.

Tout d'abord, assurez-vous d'être dans le bon répertoire. Nous travaillerons dans votre répertoire project :

cd ~/project

La commande cd signifie "change directory" (changer de répertoire). Le symbole ~ représente votre répertoire personnel (home), et /project spécifie le sous-répertoire dans lequel nous voulons nous déplacer. Si le répertoire project n'existe pas, cette commande échouera probablement. Il est généralement recommandé de créer le répertoire au préalable si vous n'êtes pas sûr. Cependant, dans cet environnement de laboratoire, le répertoire devrait déjà exister.

Maintenant, créons un nouveau fichier nommé example.txt :

touch example.txt

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

ls

ls signifie "list" (lister). Elle affiche les fichiers et répertoires présents à votre emplacement actuel. Vous devriez voir example.txt dans la sortie. Si vous ne le voyez pas, vérifiez que vous avez exécuté la commande touch correctement et que vous êtes bien dans le répertoire ~/project.

Changement du propriétaire d'un fichier

Maintenant que nous avons créé un fichier, apprenons à changer son propriétaire. La commande chown nous permet de modifier à la fois l'utilisateur et le groupe propriétaire d'un fichier. La propriété détermine qui a le contrôle sur le fichier.

Tout d'abord, vérifions la propriété actuelle de notre fichier example.txt :

ls -l example.txt

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

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

Analysons cette sortie :

  1. -rw-rw-r-- représente les permissions du fichier (nous explorerons cela 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 restants représentent les permissions de lecture, d'écriture et d'exécution pour le propriétaire, le groupe et les autres.
  2. Le premier labex est le propriétaire actuel du fichier. Il s'agit du nom d'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 est la taille du fichier en octets. Comme le fichier est vide, sa taille est nulle.
  5. Jul 29 15:11 est la date et l'heure de la dernière modification.
  6. example.txt est le nom du fichier.

Maintenant, changeons le propriétaire du fichier pour l'utilisateur root. root est le compte administrateur sur les systèmes Linux, et il possède des privilèges spéciaux.

sudo chown root:root example.txt

Voici ce que fait cette commande :

  • sudo exécute la commande avec les privilèges root. Il est probable que votre mot de passe vous soit demandé. chown nécessite des privilèges élevés car c'est une commande puissante pouvant affecter la sécurité du système. Sans sudo, vous obtiendrez une erreur "Permission denied" (Permission refusée).
  • chown est la commande pour changer la propriété.
  • root:root spécifie le nouveau propriétaire et le nouveau groupe (tous deux définis sur root). La syntaxe est propriétaire:groupe.
  • example.txt est le fichier cible.

Vérifions le changement :

ls -l example.txt

Vous devriez maintenant voir que le propriétaire et le groupe ont été changés en root :

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

Si vous voyez toujours labex au lieu de root, assurez-vous d'avoir utilisé sudo lors de l'exécution de la commande chown et d'avoir saisi votre mot de passe correctement.

Changement de la propriété d'un répertoire

La commande chown peut également changer la propriété de répertoires entiers et de leur contenu. Voyons cela en action. C'est particulièrement utile pour gérer des structures de répertoires complexes où vous souhaitez vous assurer que tous les fichiers et sous-répertoires ont le même propriétaire.

Tout d'abord, créons un nouveau répertoire avec quelques fichiers :

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

Analysons ces commandes :

  • mkdir -p new-dir/subdir crée le répertoire new-dir et son sous-répertoire subdir. L'option -p indique à mkdir de créer les répertoires parents si nécessaire. Sans -p, si new-dir n'existait pas, la création de new-dir/subdir échouerait.
  • echo "Hello, world" > new-dir/file1.txt crée un fichier nommé file1.txt à l'intérieur du répertoire new-dir et y écrit le texte "Hello, world". Le symbole > est utilisé pour la redirection ; il prend la sortie de la commande echo et la redirige vers le fichier spécifié.
  • echo "Another file" > new-dir/subdir/file2.txt crée de la même manière un fichier nommé file2.txt à l'intérieur du répertoire new-dir/subdir et y écrit le texte "Another file".

Vérifions maintenant la propriété actuelle :

ls -lR new-dir

ls -lR liste le contenu de new-dir de manière récursive. L'option -R (récursive) permet à ls de lister tous les fichiers et sous-répertoires à l'intérieur de new-dir ainsi que leur contenu.

Vous devriez voir quelque chose comme ceci :

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

Cela montre que le répertoire new-dir, son sous-répertoire subdir, ainsi que les fichiers file1.txt et file2.txt appartiennent tous à labex.

Maintenant, changeons la propriété de new-dir et de tout son contenu pour l'utilisateur root :

sudo chown -R root:root new-dir

Dans cette commande :

  • L'option -R indique à chown d'opérer de manière récursive, en changeant la propriété de tous les fichiers et sous-répertoires à l'intérieur de new-dir. C'est crucial ; sans -R, seule la propriété du répertoire new-dir changerait, mais les fichiers et sous-répertoires à l'intérieur resteraient la propriété de labex.

Vérifions le changement :

ls -lR new-dir

Vous devriez maintenant voir :

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, la propriété du répertoire et de tout son contenu a été transférée à root. Cela démontre la puissance de l'option -R pour effectuer des changements de propriété étendus au sein d'une structure de répertoires.

Changement des permissions d'un fichier

Sous Linux, les permissions de fichiers sont représentées par une série de lettres ou de chiffres. Explorons comment lire et modifier ces permissions. Comprendre les permissions est vital pour sécuriser vos fichiers et empêcher tout accès non autorisé.

Tout d'abord, examinons les permissions actuelles de notre fichier example.txt :

ls -l example.txt

Vous pourriez voir quelque chose comme ceci :

-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ériques et symboliques. Analysons-les :

  • Le premier caractère (-) indique qu'il s'agit d'un fichier ordinaire. D'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 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 suivants (rw-) concernent le groupe. Ils ont la même signification que ci-dessus, mais s'appliquent aux membres du groupe du fichier.
  • Les trois derniers (r--) concernent les autres (tout le monde). Ils ont également la même signification, mais s'appliquent aux utilisateurs qui ne sont ni le propriétaire ni membres du groupe du fichier.

Maintenant, changeons ces permissions à l'aide de la commande chmod. chmod signifie "change mode" (changer le mode), et il vous permet de modifier ces permissions. Nous commencerons 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.

Chaque chiffre est un nombre de 0 à 7, calculé en additionnant les valeurs des 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) ne donne aucune permission au groupe (0+0+0=0).
0 (troisième chiffre) ne donne aucune permission aux autres (0+0+0=0).

Par conséquent, 700 signifie : Propriétaire : lecture, écriture, exécution. Groupe : aucune. Autres : aucune.

Vérifions le changement :

ls -l example.txt

Vous devriez maintenant voir :

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

Le propriétaire a maintenant les permissions rwx (lecture, écriture et exécution), tandis que le groupe et les autres n'ont aucune permission.

Changement des permissions d'un répertoire

Le changement des permissions pour les répertoires fonctionne de manière similaire à celui des fichiers. Entraînons-nous en créant un nouveau répertoire et en modifiant ses permissions. Les permissions de répertoire contrôlent qui peut lister le contenu du répertoire, créer de nouveaux fichiers dans le répertoire et accéder aux fichiers déjà présents.

Tout d'abord, créons un nouveau répertoire et définissons des permissions non standard :

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

Maintenant, vérifions les permissions actuelles :

ls -ld ~/test-dir

L'option -d dans ls -l indique à ls de lister le répertoire lui-même, plutôt que son contenu. Sans -d, ls listerait les fichiers et sous-répertoires à l'intérieur de test-dir, qui est vide pour le moment. Vous devriez voir :

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. Le rwx------ indique que le propriétaire a les permissions de lecture, d'écriture et d'exécution, tandis que le groupe et les autres n'ont aucune permission. Pour les répertoires :

  • La permission de lecture (r) vous permet de lister le contenu du répertoire à l'aide de ls.
  • La permission d'écriture (w) vous permet de créer de nouveaux fichiers et sous-répertoires dans le répertoire.
  • La permission d'exécution (x) vous permet d'accéder aux fichiers et sous-répertoires dans le répertoire (c'est-à-dire d'y entrer avec cd).

Maintenant, changeons les permissions :

chmod -R 755 ~/test-dir

Dans cette commande :

  • -R applique le changement de manière récursive à tous les fichiers et sous-répertoires (bien que notre répertoire soit vide dans ce cas). Il est recommandé de l'inclure lors de la manipulation de répertoires, même s'ils sont actuellement vides, au cas où vous ajouteriez des fichiers plus tard.
  • 755 donne les permissions de lecture, d'écriture et d'exécution au propriétaire, et les permissions de lecture et d'exécution au groupe et aux autres.

Analysons 755 :

  • Propriétaire (7) : Lecture (4) + Écriture (2) + Exécution (1) = 7
  • Groupe (5) : Lecture (4) + Exécution (1) = 5
  • Autres (5) : Lecture (4) + Exécution (1) = 5

Vérifions le changement :

ls -ld ~/test-dir

Vous devriez maintenant voir :

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

Cela montre clairement le changement de permissions, passant d'un accès réservé au seul propriétaire (700) à un accès complet pour le propriétaire, tandis que les autres peuvent lire et exécuter (755). Désormais, n'importe qui peut lister le contenu de test-dir et accéder aux fichiers qu'il contient, mais seul le propriétaire peut créer de nouveaux fichiers ou modifier ceux existants.

Utilisation de la notation symbolique pour les permissions

Bien que la notation numérique soit concise, la notation symbolique peut être plus intuitive, surtout lorsque vous souhaitez modifier une seule permission. La notation symbolique utilise des lettres pour représenter l'utilisateur, le groupe et les autres, 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.

Tout d'abord, créons un nouveau fichier de script avec du contenu :

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

Ces commandes font deux choses :

  • La première commande echo crée script.sh et y écrit la première ligne, #!/bin/bash. Cette ligne est appelée "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.

Vous pouvez confirmer que le fichier contient maintenant deux lignes distinctes avec :

cat script.sh

Vous devriez voir :

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

Maintenant, vérifions ses permissions initiales :

ls -l script.sh

Vous devriez voir quelque chose comme :

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

Comme vous pouvez le constater, initialement, le script n'a que les permissions de lecture et d'écriture pour le propriétaire et le groupe, et la permission de lecture pour les autres. Il n'a pas la permission d'exécution, qui est requise pour l'exécuter en tant que programme.

Essayons d'exécuter le script :

./script.sh

Vous devriez voir une erreur "Permission denied" car le script n'a pas encore les permissions d'exécution. La partie ./ indique au shell d'exécuter le script situé dans le répertoire actuel.

Maintenant, ajoutons la permission d'exécution pour le propriétaire en utilisant la notation symbolique :

chmod u+x script.sh

Dans cette commande :

  • u fait référence à l'utilisateur (propriétaire). Les autres options sont g pour le groupe, o pour les autres et a pour tous (utilisateur, groupe et autres).
  • +x ajoute la permission d'exécution. Le symbole + ajoute une permission, tandis que le symbole - supprime une permission.

Ainsi, u+x signifie "ajouter la permission d'exécution pour le propriétaire".

Vérifions le changement :

ls -l script.sh

Vous devriez maintenant voir :

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

Le propriétaire a maintenant les permissions rwx (lecture, écriture et exécution).

Maintenant, essayons d'exécuter à nouveau le script :

./script.sh

Cette fois, vous devriez voir la sortie :

Hello, World

Cet exemple démontre clairement pourquoi nous devons ajouter des permissions d'exécution aux scripts, ainsi que la différence avant et après l'ajout de ces permissions. La notation symbolique facilite la modification de permissions spécifiques sans avoir à recalculer toute la représentation numérique.

Résumé

Dans ce laboratoire, nous avons exploré les commandes Linux essentielles pour gérer les permissions de fichiers :

  1. Nous avons utilisé touch pour créer de nouveaux fichiers et mettre à jour ceux existants.
  2. Nous avons appris à utiliser chown pour changer la propriété des fichiers et des répertoires, y compris les changements récursifs pour des structures de répertoires entières.
  3. Nous nous sommes entraînés à utiliser chmod avec les notations numérique et symbolique pour modifier les permissions, en comprenant les différents niveaux de permission pour le propriétaire, le groupe et les autres.
  4. Nous avons vu des exemples pratiques de l'importance des permissions, comme la nécessité d'avoir les permissions d'exécution pour lancer des scripts.
  5. Nous avons clarifié les différences entre les notations numérique et symbolique pour chmod et quand chacune peut être plus appropriée.

Ces commandes sont cruciales pour maintenir la sécurité et contrôler l'accès sur les systèmes Linux. N'oubliez pas d'être toujours prudent lors de la modification des permissions, surtout lors de l'utilisation de sudo, car des changements incorrects peuvent avoir des conséquences significatives sur la sécurité et le fonctionnement du système. Vérifiez toujours vos commandes avant de les exécuter et comprenez les implications des changements que vous effectuez.