首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能以非特权用户的身份运行“unshare -n [程序]”?

是否有可能以非特权用户的身份运行“unshare -n [程序]”?
EN

Unix & Linux用户
提问于 2016-01-01 17:03:14
回答 3查看 10.7K关注 0票数 24

我想运行一个没有任何互联网接入的程序。

unshare -n ping 127.0.0.1

作为非特权用户,它返回Operation not permitted,作为特权用户,它返回所需的Network is unreachable

是否也有任何方法使它对非特权用户起作用?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2017-06-11 12:49:37

在较晚版本的util中,unshare获得了--map-root-user选项。引用unshare(1)版本2.26.2的话:

-r,-map-root-用户只在当前有效用户和组ID映射到新创建的用户名称空间中的超级用户UID和GID之后才运行程序。这样就可以方便地获得管理新创建的命名空间的各个方面所需的功能(例如在网络命名空间中配置接口或在挂载命名空间中挂载文件系统),即使在非特权运行时也是如此。作为一个简单方便的特性,它不支持更复杂的用例,例如映射UID和GID的多个范围。此选项意味着--setgroup=deny。

因此,在较新的系统上,您可以运行:

代码语言:javascript
复制
unshare -n -r ping 127.0.0.1

这将产生预期的Network is unreachable

在Debian系统上,您可能仍然会得到一个Operation not permitted错误,然后必须首先通过运行以下命令启用非特权用户命名空间:

代码语言:javascript
复制
sudo sysctl -w kernel.unprivileged_userns_clone=1

注意:对于范围更广的用例,可以考虑更复杂的bwrap --unshare-net,如简要介绍的另一个答案

票数 18
EN

Unix & Linux用户

发布于 2019-12-29 13:13:54

除了unshare -n之外,另一种输入新网络命名空间的方法是使用更高级的Bubblewrap (bwrap --unshare-net):

代码语言:javascript
复制
bwrap --bind / / --dev /dev --unshare-net -- your-program args …

注意:如果your-program args …ping 127.0.0.1,您会注意到Bubblewrap不支持ICMP,所以OP示例不会显示“Network is unreachable”。

同样有趣的是,--unshare-net中的程序确实有一个回送接口,但它是一个网络命名空间隔离的接口。

票数 4
EN

Unix & Linux用户

发布于 2018-06-18 12:49:50

您可以使用setcap实用程序来设置unshare。

代码语言:javascript
复制
sudo setcap cap_sys_admin+ep /usr/bin/unshare

在此之后,您可以使用unshare -n ping 127.0.0.1,我无法进一步解释它,我也不知道这是否是一个好主意,但它有效,而且whoami没有将root显示为用户名。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/252714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档