我正在嘗試使用Linux命名空間創建沙盒環境。我在https://github.com/swetland/mkbox上發現了一個簡潔的示例,它大致按我的意思做,但我想要一個可信的/ proc出現在沙箱內。我怎樣才能做到這一點?在非特權名稱空間沙盒中安裝proc
我試着綁定安裝在proc上的proc FS,但是失敗了EINVAL。當我試圖正常安裝「proc」時,它會產生EPERM。
想法?
我正在嘗試使用Linux命名空間創建沙盒環境。我在https://github.com/swetland/mkbox上發現了一個簡潔的示例,它大致按我的意思做,但我想要一個可信的/ proc出現在沙箱內。我怎樣才能做到這一點?在非特權名稱空間沙盒中安裝proc
我試着綁定安裝在proc上的proc FS,但是失敗了EINVAL。當我試圖正常安裝「proc」時,它會產生EPERM。
想法?
本地大師想通了這一點對我來說:在PROC必須使用MS_REC標誌,像這樣(無證):
ok(mount, "/proc", "proc", NULL, MS_REC|MS_BIND, NULL);
綁定安裝,如果沒有設置CLONE_PIDNS只做一些有用的東西,很明顯。
我只是遇到了這個問題,它是你的StackOverflow答案,解決了它,並幫助我把頭髮拉出來。而且Swetland實際上寫了我家的mkbox代碼。小世界。 PS之所以你需要MS_REC(我現在記得讀完這個之後)是因爲/ proc在其中掛載了其他東西(例如/ proc/sys/fs/binfmt_misc),並且如果你沒有遞歸安裝它們,你可能會揭示那些通過裝載被故意隱藏的東西。 –
我也對此有些ban my。記錄:在普通命令行shell中,通過調用'mount --rbind/proc proc'可以獲得相同的效果 – josch
我沒有仔細查看您的承諾,以確定是否這是您的問題,但如果您有CLONE_NEWUSER | CLONE_NEWNS
而不是CLONE_NEWPID
,則會發生EPERM
。這是因爲要安裝proc
,您需要在當前PID名稱空間對應的用戶名空間中使用CAP_SYS_ADMIN
,而不是當前用戶名空間。
的Linux 4.4,fs/proc/root.c
,lines 112–117:
ns = task_active_pid_ns(current);
options = data;
/* Does the mounter have privilege over the pid namespace? */
if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN))
return ERR_PTR(-EPERM);
你做了什麼是什麼呢? ./mkbox沙箱'pwd'/proc? 可能是你試圖在沒有命名空間比如沙箱的情況下在proc上掛載proc嗎? – resultsway
查看https://github.com/hanwen/mkbox/commit/043d6fdf3fe81275c4c184e689faa23d844ee36b我所準備的。 – hanwen