[英]How can I “mount” within my process space without being root?
我試圖掛載overlayfs而不是C ++代碼的根 。 我希望能夠發生這種mount
並且僅對我自己的進程及其后代可見:
if(-1 == mount("overlay", "./mnt", "overlay", MS_MGC_VAL, "lowerdir=/,upperdir=./upper,workdir=./work"))
std::cerr << "e: " << errno << std::endl;
....
不幸的是,我得到的錯誤是Operation not permitted
。 我怎樣才能做到這一點? 即使是簡單的tmpfs
掛載也不能不成為root用戶 ; 我在4.4.0-53
內核上4.4.0-53
。
可以通過user namespaces
進行編程; 通過調用:
clone(child_func, ..., CLONE_NEWNS | CLONE_NEWUSER | SIGCHLD, ...);
...
int child_func(void* args) {
mount("overlay", "./mnt", "overlay", MS_MGC_VAL, "lowerdir=/,upperdir=./upper,workdir=./work");
...
}
理想情況下,您還希望設置/proc/<pid>/uid_map
和/proc/<id>/gid_map
以便更好地執行。 也許最好的例子可以在手冊頁上找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.