有些是你自己做的选择

有些是你自己做的选择

在我的 Linux 主机上,unshare -m拒绝 root 权限。

Bubblewrapbwrap --dev-bind / / --ro-bind-data xxxx xxxxbwrap --dev-bind / / --tmpfs不需要 root。 (没有 setuid bwrap

如何像 bubblewrap 一样在没有 root 的情况下使用挂载命名空间(但我不想使用 bubblewrap)?

答案1

您需要一个用户命名空间,例如unshare -rm

答案2

有些是你自己做的选择

(因为如果没有任何东西已经存在)。

  • 用 golang 编写一个包装器,并为其提供所需的功能。
  • 在 shell 或 python 中编写一个包装器,运行时使用sudo.然后添加一个条目,sudoers这样您就不需要密码了。然后编写另一个包装器/别名,以便无需运行即可运行打字 sudo

答案3

如果您需要的只是以非 root 用户身份重新映射文​​件系统中的目录,并在命令退出时清理的环境中运行子进程,我相信您可以使用该faketree实用程序可以在这里找到。您可以阅读博客文章在这里描述它

引用自文档:

  • 不需要root,只要系统上启用了 pid 和用户命名空间,任何用户都可以运行它(大多数现代 Linux 发行版上默认设置它们,您可以使用包含的测试来验证)。
  • 使用与用户相同的 UID/GID 运行命令,不会创建一个看起来以 root 身份运行的 shell(可以被标志覆盖)
  • 不需要LD_PRELOAD、 ptrace 或类似的技巧。它适用于静态二进制文件以及需要修改LD_LIBRARY_PATHLD_PRELOAD具有防止跟踪保护的二进制文件。
  • 仅影响 faketree 中运行的命令,这意味着您可以由同一用户在同一系统上使用不同的参数并行运行 faketree 的多个实例。
  • 正确传播环境变量和权限,甚至允许图形工具在 faketree 中正确运行。
  • 不依赖 FUSE,磁盘性能和性能不受影响。
  • 可以覆盖单个文件,包括/proc/sys文件。
  • 尝试正确处理信号,因此 CI/CD 管道中的集成应该很简单。向 faketree 发送 SIGTERM 将传播到子级,并且 faketree 将正确等待所有子级和后代在退出之前终止。 faketree 的Akill -9将保证所有后代也被杀死。
  • 如果包装的命令调用 realpath 或检查文件系统,该命令将仅看到带有挂载的普通文件系统。

相关内容