web-dev-qa-db-fra.com

Pourquoi la commande "ls" affiche-t-elle les autorisations des fichiers dans une partition FAT32?

Je crois que le système de fichiers FAT32 ne prend pas en charge les autorisations de fichiers, mais quand je le fais ls -l sur une partition FAT32, ls -l montre que les fichiers ont des autorisations:

-rw-r--r-- 1 john john 11 Mar 20 15:43 file1.txt
-rw-r--r-- 1 john john 5 Mar 20 15:49 file2.txt

Pourquoi est-ce ls -l afficher les autorisations des fichiers?

40
user342731

Le système de fichiers tel qu'il est stocké sur le disque ne stocke pas les autorisations de fichiers, mais le pilote du système de fichiers doit les fournir au système d'exploitation car ils font partie intégrante du concept de système de fichiers Unix et les interfaces d'appel système n'ont aucun moyen de présenter que les autorisations sont manquant.

Considérez également ce qui se passerait si un fichier n'avait aucun bit d'autorisation? Serait-ce la même chose que 0777, C'est-à-dire l'accès à tous; ou la même chose que 0000, c'est-à-dire aucun accès à personne? Mais ces deux sont autorisations de fichier, alors pourquoi ne pas les montrer? Ou faites quelque chose de plus utile et ayez un moyen de définir des autorisations raisonnables.

Ainsi, le pilote simule certaines autorisations, les mêmes pour tous les fichiers. Les autorisations ainsi que le propriétaire et le groupe des fichiers sont configurables au moment du montage. Celles-ci sont décrites sous "Options de montage pour les graisses" dans la page de manuel mount (8) :

Options de montage pour la graisse
(Remarque: fat n'est pas un système de fichiers séparé, mais une partie commune des systèmes de fichiers msdos, umsdos et vfat.)

uid=value Et gid=value
Définissez le propriétaire et le groupe de tous les fichiers. (Par défaut: l'UID et le GID du processus en cours.)

umask=value
Définissez le umask (le masque de bits des autorisations qui ne sont pas présentes). La valeur par défaut est le umask du processus en cours. La valeur est donnée en octal.

dmask=value
Définissez le umask appliqué aux répertoires uniquement. La valeur par défaut est le umask du processus en cours. La valeur est donnée en octal.

fmask=value
Définissez le umask appliqué aux fichiers normaux uniquement. La valeur par défaut est le umask du processus en cours. La valeur est donnée en octal.

Notez que les autorisations sont présentées sous forme de masques, donc les autorisations finales sont la négation du masque. fmask=0133 Entraînerait que tous les fichiers disposent des autorisations 0644 Ou rw-r--r--.

De plus, les valeurs par défaut sont héritées du processus appelant mount(), donc si vous appelez mount à partir de la ligne de commande, le umask du Shell s'appliquera.

71
ilkkachu

Mais les fichiers ont des autorisations. L'utilisateur john a un accès RW, tandis qu'un utilisateur aléatoire n'a qu'un accès en lecture. Ces autorisations ne provenaient pas du système de fichiers lui-même mais plutôt des options de montage (-o uid/gid/umask), ce qui ne les rend pas moins réels.

Vous pouvez avoir plusieurs partitions vfat montées avec différentes options et vous pouvez utiliser ls pour déterminer quelles étaient ces options. Vous pouvez même utiliser mount --bind pour qu'un seul répertoire contienne des fichiers de différentes partitions vfat, et ls affichera correctement quelles autorisations ont été spécifiées pour chaque fichier.

22
Roman Odaisky

ls ne connaît pas FAT32, il ne connaît que l'interface Virtual Filesystem (VFS) exposée par le noyau avec POSIX open/readdir/stat appels système.

Linux ne prend pas en charge le concept de fichiers qui n'en ont pas utilisateur/groupe/autres bits d'autorisation, struct stat Contient simplement un membre mode_t st_mode; (Et uid , membres gid) que le noyau doit remplir lorsque ls -l fait stat(2) appels système.

Il n'y a pas de code spécial qui signifie "non disponible" ou "non applicable" pour aucun de ces champs, donc le pilote vfat du noyau doit inventer quelque chose. FAT16/FAT32 a un indicateur en lecture seule, mais sinon le propriétaire/groupe provient d'options de montage, tout comme un umask.

15
Peter Cordes