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
- File permissions and attributes,
- How to Show File Attributes in Linux,
- Documentation pour les développeurs sur les attributs,
- Détails sur la résolution des chemins,
- Détails sur setuid et setgid,
- Détails sur le sticky bit,
- Billet đ§ Traitements rĂ©cursif avec chmod,
- lsattr et chattr : Chattr Command in Linux (File Attributes) et 5 âchattrâ Commands to Make Important Files IMMUTABLE (Unchangeable) in Linux,
- stat : Stat command in Linux with examples, How to Use the stat Command on Linux, Stat Command: Display Attributes of Files and Directories,
- Billet sur chmod : đ§ Traitements rĂ©cursif avec chmod.
኿