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
ファイルの許可を表示するのはなぜですか?
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
ファイルの許可を表示するのはなぜですか?
回答:
ディスクに保存されているファイルシステムはファイルのアクセス許可を保存しませんが、ファイルシステムドライバーはオペレーティングシステムにそれらを提供する必要があります。これらはUnixファイルシステムの概念の不可欠な部分であり、システムコールインターフェイスにはアクセス許可があることを示す方法がないためです行方不明。
また、ファイルに許可ビットがまったくなかった場合はどうなるのかを検討してください。それは0777
、つまりすべてへのアクセスと同じでしょうか。またはと同じ0000
、つまり、誰にもアクセスできませんか?しかし、どちらもファイルのアクセス許可なので、表示しないのはなぜですか?または、もっと便利なことをして、賢明な許可を設定する方法があります。
そのため、ドライバーはすべてのファイルに同じアクセス許可を偽装します。パーミッションは、ファイルの所有者とグループとともに、マウント時に設定可能です。これらは、mount(8)manページの「fatのマウントオプション」で説明されています。
fatのマウントオプション
(注:fatは個別のファイルシステムではなく、msdos、umsdos、vfatファイルシステムの共通部分です。)
uid=value
そしてgid=value
、すべてのファイルの所有者とグループを設定します。(デフォルト:現在のプロセスのUIDおよびGID。)
umask=value
umask(存在しないアクセス許可のビットマスク)を設定します。デフォルトは、現在のプロセスのumaskです。値は8進数で指定されます。
dmask=value
ディレクトリにのみ適用されるumaskを設定します。デフォルトは、現在のプロセスのumaskです。値は8進数で指定されます。
fmask=value
通常のファイルにのみ適用されるumaskを設定します。デフォルトは、現在のプロセスのumaskです。値は8進数で指定されます。
許可はマスクとして提示されるため、最終的な許可はマスクの否定であることに注意してください。fmask=0133
アクセス権を持つすべてのファイルにつながる0644
、またはrw-r--r--
。
また、デフォルトはを呼び出しているプロセスから継承されるmount()
ためmount
、コマンドラインから呼び出すと、シェルumask
が適用されます。
umask
マウントオプションに依存する@forest。デフォルト値はmount
プロセスのumaskです(この回答にリンクされているmanページを参照)。
chmod ugo-w
ファイルで読み取り専用属性をオンにします。fmask=0133
例のようにオプションを使用しても、すべてのファイルに0644権限が付与されるわけではありません。FATが絶対に保存しないのは、各ファイルのuidとgidです。どうか明らかにしてください; 現状の答えは非常に誤解を招くものです。
ただし、ファイルには権限があります。ユーザーjohnにはRWアクセスがありますが、一部のランダムユーザーには読み取りアクセスのみがあります。これらの許可はファイルシステム自体からではなく、マウントオプション(-o uid / gid / umask)からのものでした。
複数のvfatパーティションを異なるオプションでマウントし、lsを使用してそれらのオプションが何であるかを判断できます。mount --bindを使用して、単一のディレクトリに異なるvfatパーティションからのファイルを含めることもでき、lsは各ファイルに指定されたパーミッションを正しく表示します。
ls
FAT32については知らず、POSIX open
/ readdir
/ stat
システムコールでカーネルによって公開される仮想ファイルシステム(VFS)インターフェイスについてのみ知っています。
Linuxは、ユーザー/グループ/その他の許可ビットを持たないファイルの概念をサポートしていません。システムコールを行うときにカーネルが入力する必要struct stat
があるmode_t st_mode;
メンバー(およびuid、gidメンバー)を含むだけです。ls -l
stat(2)
これらのフィールドのいずれにも「使用不可」または「適用外」を意味する特別なコードはないため、カーネルのvfatドライバーは何かを構成する必要があります。FAT16 / FAT32には読み取り専用フラグがありますが、そうでない場合は所有者/グループはマウントオプションに由来し、umaskも同様です。