Uważam, że system plików FAT32 nie obsługuje uprawnień do plików, jednak gdy robię to ls -l
na partycji FAT32, ls -l
pokazuje, że pliki mają uprawnienia:
-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
Dlaczego ls -l
wyświetla uprawnienia do plików?
linux
permissions
filesystems
fat
fat32
użytkownik342731
źródło
źródło
Odpowiedzi:
System plików przechowywany na dysku nie przechowuje uprawnień do plików, ale sterownik systemu plików musi dostarczyć je do systemu operacyjnego, ponieważ są one integralną częścią koncepcji systemu plików Unix, a interfejsy wywołań systemowych nie mogą w żaden sposób pokazać, że uprawnienia są brakujący.
Zastanów się także, co by się stało, gdyby plik nie miał żadnych bitów uprawnień? Czy byłoby to to samo, co
0777
, tj. Dostęp do wszystkich; lub to samo, co oznacza0000
brak dostępu do nikogo? Ale oba są uprawnieniami do plików, więc dlaczego ich nie pokazać? Lub zrób coś bardziej użytecznego i ustal sposób na rozsądne uprawnienia.Tak więc sterownik fałszuje niektóre uprawnienia, takie same dla wszystkich plików. Uprawnienia wraz z właścicielem i grupą plików można konfigurować w czasie montowania. Są one opisane w sekcji „Opcje montowania dla tłuszczu” na stronie podręcznika mount (8) :
Pamiętaj, że uprawnienia są prezentowane jako maski, więc ostateczne uprawnienia są negacją maski.
fmask=0133
spowoduje, że wszystkie pliki będą miały uprawnienia0644
, lubrw-r--r--
.Ponadto wartości domyślne są dziedziczone z wywołania procesu
mount()
, więc jeśli zadzwoniszmount
z wiersza poleceń,umask
zastosowane zostaną powłoki .źródło
umask
opcji montowania, dla której wartością domyślną jest umaskmount
procesu (patrz strona podręcznika , do której link znajduje się w tej odpowiedzi).chmod ugo-w
na pliku włączy atrybut tylko do odczytu. Użyciefmask=0133
opcji jak w przykładzie nie spowoduje, że wszystkie pliki będą miały uprawnienia 0644. To, czego FAT absolutnie nie przechowuje, to uid i gid dla każdego pliku. Proszę o wyjaśnienie; obecna odpowiedź jest bardzo myląca.Ale pliki mają uprawnienia. Użytkownik John ma dostęp do RW, a niektórzy losowi użytkownicy mają dostęp tylko do odczytu. Te uprawnienia nie pochodziły z samego systemu plików, ale raczej z opcji montowania (-o uid / gid / umask), co nie czyni ich mniej rzeczywistymi.
Możesz mieć wiele partycji vfat podłączonych z różnymi opcjami i możesz użyć ls do ustalenia, jakie były te opcje. Możesz nawet użyć mount --bind, aby pojedynczy katalog zawierał pliki z różnych partycji vfat, a ls poprawnie pokazuje, jakie uprawnienia zostały określone dla każdego pliku.
źródło
ls
nie wie o FAT32, wie tylko o interfejsie wirtualnego systemu plików (VFS) odsłoniętym przez jądro za pomocą wywołań systemowych POSIXopen
/readdir
/stat
.Linux nie wspiera koncepcję pliki nie mają użytkownik / grupa / pozostałe bity uprawnień,
struct stat
po prostu zawieramode_t st_mode;
człon (i uid i GID członków), że jądro musi wypełnić, gdyls -l
czynistat(2)
wywołań systemowych.Nie ma specjalnego kodu, który oznacza „niedostępny” lub „nie dotyczy” żadnego z tych pól, więc sterownik vfat jądra musi coś wymyślić. FAT16 / FAT32 ma flagę tylko do odczytu, ale poza tym właściciel / grupa pochodzą z opcji montowania, podobnie jak umask.
źródło