The filesystem as stored on disk doesn't store file permissions, but the filesystem driver has to provide them to the operating system since they are an integral part of the Unix filesystem concept and the system call interfaces have no way of presenting that the permissions are missing.
Also consider what would happen if a file didn't have any permission bits at all? Would it be the same as
0777, i.e. access to all; or the same as
0000, i.e. no access to anyone? But both of those are file permissions, so why not show them? Or do something more useful and have a way to set some sensible permissions.
So, the driver fakes some permissions, same ones for all files. The permissions along with the files' owner and group are configurable at mount time. These are described under "Mount options for fat" in the mount(8) man page:
Mount options for fat
(Note: fat is not a separate filesystem, but a common part of the msdos, umsdos and vfat filesystems.)
Set the owner and group of all files. (Default: the UID and GID of the current process.)
Set the umask (the bitmask of the permissions that are not present). The default is the umask of the current process. The value
is given in octal.
Set the umask applied to directories only. The default is the umask of the current process. The value is given in octal.
Set the umask applied to regular files only. The default is the umask of the current process. The value is given in octal.
Note that the permissions are presented as masks, so the final permissions are the negation of the mask.
fmask=0133 would result in all files having permissions
Also, the defaults are inherited from the process calling
mount(), so if you call
mount from the command line, the shell's
umask will apply.