ユーザーの名前空間内で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()呼び出しが失敗します。 。
私は理解できません。