Я считаю, что файловая система FAT32 не поддерживает права доступа к файлам, однако, когда я делаю ls -l
на раздел FAT32, ls -l
показывает, что файлы имеют разрешения:
-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
Почему ls -l
отображаются права доступа к файлам?
linux
permissions
filesystems
fat
fat32
user342731
источник
источник
Ответы:
Файловая система, хранящаяся на диске, не хранит разрешения для файлов, но драйвер файловой системы должен предоставлять их операционной системе, поскольку они являются неотъемлемой частью концепции файловой системы Unix, а интерфейсы системных вызовов не могут представить, что разрешения отсутствует.
Также подумайте, что произойдет, если у файла вообще не будет битов разрешения? Будет ли это так же, как
0777
, то есть доступ ко всем; или так же, как0000
, т.е. нет доступа ни к кому? Но оба они имеют права доступа к файлам, так почему бы не показать их? Или сделайте что-нибудь более полезное и у вас есть возможность установить разумные разрешения.Таким образом, драйвер подделывает некоторые разрешения, одинаковые для всех файлов. Разрешения вместе с владельцем и группой файлов настраиваются во время монтирования. Они описаны в разделе «Опции монтирования для сала» на странице руководства mount (8) :
Обратите внимание, что разрешения представлены в виде масок, поэтому окончательные разрешения являются отрицанием маски.
fmask=0133
приведет ко всем файлам, имеющим разрешения0644
, илиrw-r--r--
.Кроме того, значения по умолчанию наследуются от вызова процесса
mount()
, поэтому, если вы вызываетеmount
из командной строки, оболочкиumask
будут применяться.источник
umask
опции монтирования, для которой значением по умолчанию является umaskmount
процесса (см. справочную страницу, на которую ссылается этот ответ).chmod ugo-w
для файла включит атрибут только для чтения. Использованиеfmask=0133
опции, как в вашем примере, приведет не ко всем файлам с разрешением 0644. То, что FAT абсолютно не хранит, это uid и gid для каждого файла. Просьба уточнить; ответ в его нынешнем виде очень вводит в заблуждение.Но файлы имеют разрешения. Пользователь john имеет доступ к RW, а некоторые случайные пользователи имеют доступ только для чтения. Эти разрешения были получены не от самой файловой системы, а от параметров монтирования (-o uid / gid / umask), что не делает их менее реальными.
Вы можете смонтировать несколько разделов vfat с разными опциями, и вы можете использовать ls, чтобы определить, что это за опции. Вы даже можете использовать команду mount --bind, чтобы в одном каталоге содержались файлы из разных разделов vfat, и ls правильно показывал бы, какие разрешения были указаны для каждого файла.
источник
ls
не знает о файловой системе FAT32, он знает только о файловой системе (VFS) Интерфейс виртуального выставленного ядра с POSIXopen
/readdir
/stat
системных вызовов.Linux не поддерживает концепцию файлов , которые не имеют пользователь / группа / другие биты разрешения,
struct stat
просто содержитmode_t st_mode;
элемент (и UID, GID членов) , что ядро должно заполнить , когдаls -l
делаетstat(2)
системные вызовы.Не существует специального кода, который означает «недоступен» или «неприменим» для любого из этих полей, поэтому драйвер ядра vfat должен что-то придумать. FAT16 / FAT32 имеет флаг только для чтения, но в противном случае владелец / группа зависят от параметров монтирования, как и umask.
источник