私はLinuxカーネルに出くわしました チュートリアル そこで彼らは4組の識別子について話しました、そしてそれらの1つはファイルシステムuidとgidでした。
誰かがそれが何であるか、そしてそれがuidおよびgidとどのように異なるかを私に説明できますか?
この質問は、このような自信過剰で知識不足の回答の集まりを引き出すだろうと誰が思ったでしょう。
ファイルシステムuidまたはfsuidは、NFSサーバーの実装を支援するために設計されたLinux機能です。これは追加の(非POSIX)uidであり、ファイルのアクセス権チェックにのみ使用されます。 setfsuid
を呼び出さないプロセス(基本的にNFSサーバーになろうとしないプロセス)の場合、fsuidは有効なuidと同じです。
manページ もあるので、存在しないと主張する言い訳があります。
更新:私はfsuidの起源を見つけに行くように促されました。 Linux 1.1.44で追加されたとき、このコメントは新しいsys_setfsuid
関数:
+/*
+ * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This
+ * is used for "access()" and for the NFS daemon (letting nfsd stay at
+ * whatever uid it wants to). It normally shadows "euid", except when
+ * explicitly set by setfsuid() or for access..
+ */
この変更は上記のコメントで行われましたsys_access
:
- * XXX we should use the real ids for checking _all_ components of the
- * path. Now we only use them for the final component of the path.
+ * access() needs to use the real uid/gid, not the effective uid/gid.
+ * We do this by temporarily setting fsuid/fsgid to the wanted values
つまり、NFSは当初の2つの目的の1つでした。もう1つはaccess()を正しく機能させることでした。 access()はsetuidプログラムによって使用され、実際のユーザーがsetuidの追加特権なしでファイルにアクセスできるかどうかを決定します。 1.1.44より前はバグがありました。それ以来、fsuidの一時的な変更を使用して作業を行っています。 fsuidはaccess()システムコールが戻る前に復元されるため、ユーザー空間からの変更を実際に確認することはできません。