cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

Sous Linux/Unix, les fichiers sont identifiés par leur nom et sont caractérisé par leurs attributs.

Les attributs de fichier sont des propriĂ©tĂ©s (mĂ©tadonnĂ©es) qui dĂ©crivent le comportement du fichier. Plus prĂ©cisĂ©ment ils dĂ©crivent l’interaction entre le systĂšme et le fichier.


ඏ

Si vous ĂȘtes familier avec les attributs sous Windows, il y a des points communs mais aussi des divergences. En particulier, le fait qu’un fichier soit « exĂ©cutable » sous Windows est liĂ© Ă  son extension alors que sous Linux c’est un attribut qui dĂ©fini cela. Inversement le fait qu’un fichier soit cachĂ© sous Windows est liĂ© Ă  l’attribut alors que sous Linux c’est la fait que le nom commence par un point.

Sous Linux les attributs n’indique rien sur la nature du contenu du fichier, ils servent Ă  la gestion des droits d’accĂšs et dans certains cas modifier les privilĂšges de l’environnement d’exĂ©cution.

La gestion des attributs depuis l’interface graphique est assez problĂ©matique, puisqu’il est trop facile de faire un traitement rĂ©cursif et si la gestion des droits vous empĂȘchera d’abĂźmer votre systĂšme (au moins temps que vous n’utilisez pas les droits administrateurs), il peut quand mĂȘme rendre votre environnement utilisateur inutilisable.


ඏ

Afficher les attributs

En ligne de commande la commande de base pour voir le contenu d’un rĂ©pertoire est : ls. Cependant de base, cette commande ne permet pas de voir les attributs, pour cela il faut utiliser le format long : ls -l. Pour inclure les fichiers cachĂ©s vous devez utiliser ls -la.

Notez que la commande ls -la ne permet d’accĂ©der Ă  tous les attributs, c’est uniquement les attributs communs qui sont affichĂ©s.

Voici les principales commandes permettant de voir les attributs d’un fichier :

ls -la ~/.profile
-rw-r--r-- 1 USER GROUP 971 mars   8  2021 /home/USER/.profile
lsattr ~/.profile
--------------e----- /home/USER/.profile
stat ~/.profile
  File: /home/USER/.profile
  Size: 971         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 10486149    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/  USER)   Gid: ( 1001/  GROUP)
Access: 2022-05-22 09:27:21.702289804 +0200
Modify: 2021-03-08 17:20:09.283278126 +0100
Change: 2021-09-21 19:51:46.298172540 +0200
 Birth: -

Les attributs de base

La commande la plus commune utilisĂ©e pour afficher les attributs d’un fichier est ls, et tant que vous limiter Ă  un simple affichage des attributs de base, cela est largement suffisant.

ls -l /path/to/directory
total 128
drwxr-xr-x 2 nom users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 nom users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 nom users  4096 Jul  5 13:45 Downloads
-rw-rw-r-- 1 nom users  5120 Jun 27 08:28 customers.ods
-rw-r--r-- 1 nom users  3339 Jun 27 08:28 todo
-rwxr-xr-x 1 nom users  2048 Jul  6 12:56 myscript.sh

C’est la premiĂšre qui nous intĂ©resse concernant les attributs, prenons l’exemple drwxrwxrwx+, voici l’explication de chaque caractĂšre :

d rwx rwx rwx +
Le type de fichier, qui ne fait techniquement pas partie de ses permissions. Voir : info ls -n "What information is listed" pour une explication des valeurs possibles. d indique que l’on a faire un rĂ©pertoire (« directory »). Les autorisations que le propriĂ©taire a sur le fichier, voir ci-dessous. Les autorisations que le groupe a sur le fichier, voir ci-dessous. Les autorisations que tous les autres utilisateurs ont sur le fichier, voir ci-dessous. Un caractĂšre unique qui indiquant si une mĂ©thode d’accĂšs alternative s’applique au fichier. Lorsque ce caractĂšre est un espace, il n’y a pas de mĂ©thode d’accĂšs alternative. Le caractĂšre . indique un fichier avec un contexte de sĂ©curitĂ©, mais aucune autre mĂ©thode d’accĂšs alternative. Un fichier comportant toute autre combinaison de mĂ©thodes d’accĂšs alternatives est signalĂ© par le caractĂšre +, par exemple dans le cas des listes de contrĂŽle d’accĂšs.

Chacune des trois triplets de permission (rwx dans l’exemple ci-dessus) peut ĂȘtre composĂ©e des caractĂšres suivants :

  CaractĂšre Effet sur les fichiers Effet sur les rĂ©pertoires
Permission de Lecture (1er caractĂšre) - Le fichier ne peut pas ĂȘtre lu. Le contenu du rĂ©pertoire ne peut pas ĂȘtre lu.
r Le fichier peut ĂȘtre lu. Le contenu du rĂ©pertoire peut ĂȘtre lu.
Permission d’écriture (2ᔈ caractĂšre) - Le fichier ne peut pas ĂȘtre modifiĂ©. Le contenu du rĂ©pertoire ne peut pas ĂȘtre modifiĂ©.
w Le fichier peut ĂȘtre modifiĂ©. Le contenu du rĂ©pertoire peut ĂȘtre modifiĂ© (crĂ©ation de nouveaux fichiers ou rĂ©pertoires ; renommer ou supprimer des fichiers ou rĂ©pertoires existants) ; nĂ©cessite que la permission d’exĂ©cution soit Ă©galement dĂ©finie, sinon cette permission n’a aucun effet.
Permission d’exĂ©cution (3ᔉ caractĂšre) - Le fichier ne peut pas ĂȘtre exĂ©cutĂ©. Le rĂ©pertoire ne peut pas ĂȘtre accĂ©dĂ©.
x Le fichier peut ĂȘtre exĂ©cutĂ©. Le rĂ©pertoire est accessible avec cd : c’est le seul bit de permission qui, en pratique, peut ĂȘtre considĂ©rĂ© comme « hĂ©rité » des rĂ©pertoires parents, en fait, si un rĂ©pertoire du chemin n’a pas le bit x activĂ©, le fichier ou le rĂ©pertoire final n’est pas accessible non plus, quelles que soient ses permissions ; voir path_resolution(7) pour plus d’informations.
s Le bit setuid: lorsqu’il est trouvĂ© dans le triplet de l’utilisateur ; le bit setgid lorsqu’il est trouvĂ© dans le triplet du groupe ; ce caractĂšre indique Ă©galement que x est activĂ©. Cette valeur n’existe pas pour les « autres » utilisateurs : « other »).
S Identique Ă  s, mais x n’est pas actif, rare sur les fichiers normaux, sans effet sur les rĂ©pertoires.
t Valeur uniquement pour le triplet des autres utilisateurs (« others ») qui indique l’activation du « sticky bit »; indique que x est actif.
T Identique à t, mais x n’est pas actif ; rare sur les fichiers normaux.

Les attributs setuid, setgid et sticky bit sont rarement manipulĂ© par les utilisateurs, ce sont plutĂŽt des notions qui sont gĂ©rĂ©es lors de l’installation d’une application, et donc des notions liĂ©s Ă  l’administration de la machine.

Ce sont des attributs dĂ©licats Ă  manipuler, gĂ©nĂ©ralement inaccessibles depuis l’interface graphique.

  • setuid et setgid

    Les droits d’accĂšs « setuid » et « setgid » (abrĂ©viation de « set user ID » et « set group ID ») permettent aux utilisateurs d’exĂ©cuter un exĂ©cutable avec les autorisations de systĂšme de fichiers du propriĂ©taire ou du groupe de l’exĂ©cutable respectivement et de modifier le comportement dans les rĂ©pertoires.

    Ils sont gĂ©nĂ©ralement utilisĂ©s pour permettre aux utilisateurs d’un systĂšme informatique d’exĂ©cuter des programmes avec des privilĂšges temporairement Ă©levĂ©s afin d’effectuer une tĂąche spĂ©cifique. Bien que les privilĂšges supposĂ©s de l’id utilisateur ou de l’id groupe fournis ne soient pas toujours Ă©levĂ©s, ils sont au moins spĂ©cifiques.

    Les drapeaux « setuid » et « setgid » sont nĂ©cessaires pour les tĂąches qui requiĂšrent des privilĂšges diffĂ©rents de ceux accordĂ©s normalement Ă  l’utilisateur, comme la possibilitĂ© de modifier les fichiers ou les bases de donnĂ©es du systĂšme ou de changer son mot de passe de connexion.

    Les drapeaux « setuid » et « setgid » n’ont un effet que sur les fichiers exĂ©cutables binaires et non sur les scripts (par exemple, Bash, Perl, Python).

  • sticky bit

    Le « sticky bit » est un indicateur de droit d’accĂšs Ă  la propriĂ©tĂ© de l’utilisateur qui peut ĂȘtre attribuĂ© aux fichiers et aux rĂ©pertoires sur les systĂšmes de type Unix.

    Il existe deux définitions : une pour les fichiers, une pour les répertoires.

    Pour les fichiers, il y a des raisons historiques de l’existence de cet attribut, il est maintenant obsolĂšte et n’a gĂ©nĂ©ralement plus d’effet sur les noyaux Linux modernes.

    Pour les rĂ©pertoires, lorsque le « sticky bit » d’un rĂ©pertoire est activĂ©, le systĂšme de fichiers traite les fichiers de ces rĂ©pertoires d’une maniĂšre spĂ©ciale afin que seul le propriĂ©taire du fichier, le propriĂ©taire du rĂ©pertoire ou le super-utilisateur puisse renommer ou supprimer le fichier. Sans le « sticky bit » activĂ©, tout utilisateur ayant des droits d’écriture et d’exĂ©cution pour le rĂ©pertoire peut renommer ou supprimer les fichiers contenus, quel que soit le propriĂ©taire du fichier. GĂ©nĂ©ralement, cette option est dĂ©finie sur le rĂ©pertoire /tmp pour empĂȘcher les utilisateurs ordinaires de supprimer ou de dĂ©placer les fichiers d’autres utilisateurs.


ඏ

Affichage récursif des attributs

La commande find est particuliÚrement efficace pour afficher les attributs. En premier lieu, on peut penser à la directive -ls bien que le résultat soit un peu verbeux.

find . -ls
  • Exemple
    find /usr/bin/ -name 'a*e' -ls
    
     11802180     24 -rwxr-xr-x   1 root     root        22768 juil.  6  2021 /usr/bin/avahi-resolve
     11823595     36 -rwxr-xr-x   1 root     root        33874 janv.  2  2020 /usr/bin/autoupdate
     11798651      0 lrwxrwxrwx   1 root     root           26 oct. 20  2021 /usr/bin/addr2line -> x86_64-linux-gnu-addr2line
     11796544      0 lrwxrwxrwx   1 root     root           26 mars 16  2019 /usr/bin/aptitude -> /etc/alternatives/aptitude
     11803119      0 lrwxrwxrwx   1 root     root           25 déc.  4  2020 /usr/bin/animate -> /etc/alternatives/animate
     11802567      0 lrwxrwxrwx   1 root     root           13 juil.  6  2021 /usr/bin/avahi-publish-service -> avahi-publish
     11802423     16 -rwxr-xr-x   1 root     root        14576 juil.  6  2021 /usr/bin/avahi-set-host-name
     11797408      8 -rwxr-xr-x   1 root     root         6415 avril  1  2020 /usr/bin/apt-clone
     11805279     88 -rwxr-xr-x   1 root     root        88536 avril 25 15:58 /usr/bin/apt-cache
     11796778     32 -rwxr-xr-x   1 root     root        31073 févr.  9  2019 /usr/bin/apt-file
     11802315    276 -rwxr-xr-x   1 root     root       281056 avril 25 15:58 /usr/bin/apt-ftparchive
     11798734     32 -rwxr-xr-x   1 root     root        30968 juil.  6  2021 /usr/bin/avahi-browse
     11796529      0 lrwxrwxrwx   1 root     root           26 juil.  9  2020 /usr/bin/automake -> /etc/alternatives/automake
     11819773     32 -rwxr-xr-x   1 root     root        32671 janv.  2  2020 /usr/bin/autom4te
     11796546      4 -rwxr-xr-x   1 root     root         1939 févr. 27  2020 /usr/bin/aptitude-create-state-bundle
     11798732      4 -rwxr-xr-x   1 root     root         2850 févr. 27  2020 /usr/bin/aptitude-run-state-bundle
     11802642      0 lrwxrwxrwx   1 root     root           13 juil.  6  2021 /usr/bin/avahi-resolve-host-name -> avahi-resolve
    

La directive -printf est sans doute plus facile à exploiter :

find . -printf '%M %p\n'
  • Exemple
    find /usr/bin/ -name 'a*e' -printf '%M %p\n'
    
    -rwxr-xr-x /usr/bin/avahi-resolve
    -rwxr-xr-x /usr/bin/autoupdate
    lrwxrwxrwx /usr/bin/addr2line
    lrwxrwxrwx /usr/bin/aptitude
    lrwxrwxrwx /usr/bin/animate
    lrwxrwxrwx /usr/bin/avahi-publish-service
    -rwxr-xr-x /usr/bin/avahi-set-host-name
    -rwxr-xr-x /usr/bin/apt-clone
    -rwxr-xr-x /usr/bin/apt-cache
    -rwxr-xr-x /usr/bin/apt-file
    -rwxr-xr-x /usr/bin/apt-ftparchive
    -rwxr-xr-x /usr/bin/avahi-browse
    lrwxrwxrwx /usr/bin/automake
    -rwxr-xr-x /usr/bin/autom4te
    -rwxr-xr-x /usr/bin/aptitude-create-state-bundle
    -rwxr-xr-x /usr/bin/aptitude-run-state-bundle
    lrwxrwxrwx /usr/bin/avahi-resolve-host-name
    

Il est mĂȘme possible d’avoir la version octale des attributs :

find . -printf '%m %p\n'
  • Exemple
    find /usr/bin/ -name 'a*e' -printf '%m %p\n'
    
    755 /usr/bin/avahi-resolve
    755 /usr/bin/autoupdate
    777 /usr/bin/addr2line
    777 /usr/bin/aptitude
    777 /usr/bin/animate
    777 /usr/bin/avahi-publish-service
    755 /usr/bin/avahi-set-host-name
    755 /usr/bin/apt-clone
    755 /usr/bin/apt-cache
    755 /usr/bin/apt-file
    755 /usr/bin/apt-ftparchive
    755 /usr/bin/avahi-browse
    777 /usr/bin/automake
    755 /usr/bin/autom4te
    755 /usr/bin/aptitude-create-state-bundle
    755 /usr/bin/aptitude-run-state-bundle
    777 /usr/bin/avahi-resolve-host-name
    

La commande lsattr permet d’afficher les attributs des fichiers sur une partition Linux de type ext2, ext3, ext4 et quelques autres. Les commandes lsattr et chattr permettent d’atteindre des attributs de fichiers inaccessibles aux commandes standards, comme le fait de rendre un fichier immuable.

find . -type f -exec lsattr {} \;

Notez que lsattr n'aime pas les liens symboliques et dans ce cas sur la plupart des Linux une erreur sera retournée lors du traitement d'un tel fichier.

  • Exemple
    find /usr/bin/ -name 'a*e' -exec lsattr {} \;
    
    --------------e----- /usr/bin/avahi-resolve
    --------------e----- /usr/bin/autoupdate
    lsattr: Operation not supported While reading flags on /usr/bin/addr2line
    lsattr: Operation not supported While reading flags on /usr/bin/aptitude
    lsattr: Operation not supported While reading flags on /usr/bin/animate
    lsattr: Operation not supported While reading flags on /usr/bin/avahi-publish-service
    --------------e----- /usr/bin/avahi-set-host-name
    --------------e----- /usr/bin/apt-clone
    --------------e----- /usr/bin/apt-cache
    --------------e----- /usr/bin/apt-file
    --------------e----- /usr/bin/apt-ftparchive
    --------------e----- /usr/bin/avahi-browse
    lsattr: Operation not supported While reading flags on /usr/bin/automake
    --------------e----- /usr/bin/autom4te
    --------------e----- /usr/bin/aptitude-create-state-bundle
    --------------e----- /usr/bin/aptitude-run-state-bundle
    lsattr: Operation not supported While reading flags on /usr/bin/avahi-resolve-host-name
    

La commande stat permet d’afficher l’état d’un fichier ou d’un systĂšme de fichiers. Elle offre en outre la possibilitĂ© de formater la sortie.

Ainsi l'écriture :

find . -type f -exec stat -c '%a %n' {} \;

est équivalente à :

find . -type f -printf '%m %p\n'

Pour les traitements récursifs sur les attributs, il est plutÎt judicieux de séparer les traitements sur les fichiers des traitements sur les dossiers, surtout lorsque vous souhaiter modifier des attributs.

Ce billet n’aborde pas la modification des attributs, car le cas gĂ©nĂ©ral est plutĂŽt dĂ©licat, mĂȘme si les cas particuliers sont simples.


ඏ

Références pour aller plus loin

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog