私はLinuxカーネルを見つけました地図時間そこで彼らは4組の識別子について議論しましたが、その1つは次のとおりです。ファイルシステムuidとgid。
誰かがそれが何であり、それがどのように関連しているかを説明できますか?uidとgid?
答え1
この質問がそんなに多くの過信と情報不足の反応を呼び起こすだろうと誰が考えたのでしょうか!
これファイルシステム UIDまたはFSUIDNFSサーバーを支援するために設計されたLinux機能です。ファイル権限の確認にのみ使用される追加(POSIX以外)uid。呼び出していないプロセスsetfsuid
(デフォルトではNFSサーバーになりようとしていないプロセス)の場合、fsuidは有効なuidと同じです。
でもマニュアルページだから、それが存在しないと主張する言い訳があります。
修正する: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つでした。もう一つはaccess
正しく機能しています。access
これは、setuidプログラムが実際のユーザーがsetuidの追加権限なしでファイルにアクセスできるかどうかを判断するために使用されます。 1.1.44以前はバグがありました。それ以来、一時的に変更されたfsuidを使用して作業を行いました。access
システムコールが返される前にfsuidが復元されるため、実際にはユーザースペースの変更を見ることはできません。