権限のないユーザーネームスペースから9pファイルシステムをマウントする方法は?

権限のないユーザーネームスペースから9pファイルシステムをマウントする方法は?

ユーザーの名前空間内で9pファイルシステムをマウントしようとしています。

まず、9pサーバーを実行します。

p9ufs -v --unix '/run/9p/srved'

その後、 setuid バイナリ 9mount(https://sqweek.net/code/9mount/)インストールするには、次の手順に従ってください。

9mount -u 'unix!/run/9p/srved' /tmp/ed1

効果がある

9mountのコードを編集してuidとeuidを表示しましたが、「getuidは1000を返し、geteuidは0を返します」と表示されます。私も次のことを確認して grep Uid /proc/$(pgrep 9mount)/status取得します1000 0 0 0

これで、ユーザーの名前空間内で同じ操作を実行すると失敗します。まず、ユーザーの名前空間を入力します。 unshare -U

その後、ドキュメントは次のように指定されているので、名前空間の外にgidとuidマップを作成します。

ファイルのユーザーまたはグループIDが名前空間内にマップされていない場合、set-user-ID(set-group-ID)ビットは自動的に無視されます。

- https://man7.org/linux/man-pages/man7/user_namespaces.7.html

マッピングを作成するには、名前空間の外部で次のコマンドを実行します。

sudo sh -c 'echo 0          0 4294967295 > /proc/11339/gid_map'
sudo sh -c 'echo 0          0 4294967295 > /proc/11339/uid_map'

9mountを再度実行すると、「getuidは1000を返し、geteuidは0を返します」というメッセージが表示されます。名前空間の外ではeuid 0としても表示されますが、「9mount:mount:No Allow Operation」と一緒にmount()呼び出しが失敗します。 。

私は理解できません。

関連情報