Creo que el sistema de archivos FAT32 no admite permisos de archivos, sin embargo, cuando lo hago ls -l
en una partición FAT32, ls -l
muestra que los archivos tienen permisos:
-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
¿Por qué se ls -l
muestran los permisos de los archivos?
linux
permissions
filesystems
fat
fat32
usuario342731
fuente
fuente
Respuestas:
El sistema de archivos tal como está almacenado en el disco no almacena permisos de archivos, pero el controlador del sistema de archivos tiene que proporcionarlos al sistema operativo, ya que son una parte integral del concepto de sistema de archivos Unix y las interfaces de llamada del sistema no tienen forma de presentar que los permisos son desaparecido.
También considere lo que sucedería si un archivo no tuviera ningún bit de permiso. ¿Sería lo mismo que
0777
, es decir, acceso a todos; o lo mismo que0000
, es decir, ¿no hay acceso a nadie? Pero ambos son permisos de archivo, entonces, ¿por qué no mostrarlos? O haga algo más útil y tenga una manera de establecer algunos permisos razonables.Entonces, el controlador falsifica algunos permisos, los mismos para todos los archivos. Los permisos junto con el propietario y el grupo de los archivos son configurables en el momento del montaje. Estos se describen en "Opciones de montaje para grasa" en la página del comando man mount (8) :
Tenga en cuenta que los permisos se presentan como máscaras, por lo que los permisos finales son la negación de la máscara.
fmask=0133
daría como resultado que todos los archivos tengan permisos0644
, orw-r--r--
.Además, los valores predeterminados se heredan de la llamada al proceso
mount()
, por lo que si llamamount
desde la línea de comandos,umask
se aplicará el shell .fuente
umask
opción de montaje, para el cual el valor predeterminado es una máscara demount
proceso (consulte la página de manual vinculada a esta respuesta).chmod ugo-w
en un archivo activará el atributo de solo lectura. Usar lafmask=0133
opción como en su ejemplo no dará como resultado que todos los archivos tengan el permiso 0644. Lo que FAT no almacena en absoluto es un uid y un gid para cada archivo. Por favor aclarar; La respuesta tal como está es altamente engañosa.Pero los archivos tienen permisos. El usuario John tiene acceso RW, mientras que un usuario aleatorio solo tiene acceso de lectura. Estos permisos no provienen del sistema de archivos en sí, sino de las opciones de montaje (-o uid / gid / umask), lo que no los hace menos reales.
Podría tener múltiples particiones vfat montadas con diferentes opciones y podría usar ls para determinar cuáles eran esas opciones. Incluso podría usar mount --bind para que un solo directorio contenga archivos de diferentes particiones vfat, y ls mostraría correctamente qué permisos se han especificado para cada archivo.
fuente
ls
no sabe sobre FAT32, solo sabe sobre la interfaz del Sistema de archivos virtual (VFS) expuesta por el núcleo con POSIXopen
/readdir
/stat
llamadas al sistema.Linux no admite el concepto de archivos que no tienen bits de permiso de usuario / grupo / otros,
struct stat
simplemente contiene unmode_t st_mode;
miembro (y uid, miembros gid) que el núcleo debe completar cuandols -l
realizastat(2)
llamadas al sistema.No hay un código especial que signifique "no disponible" o "no aplicable" para ninguno de esos campos, por lo que el controlador vfat del núcleo debe inventar algo. FAT16 / FAT32 tiene un indicador de solo lectura, pero de lo contrario, el propietario / grupo proviene de las opciones de montaje, y también lo hace una umask.
fuente