You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改宿主机的Ubuntu Docker镜像中限制单个用户网络访问?

限制Docker镜像中特定用户的网络访问方案

以下是几种无需修改宿主机配置、仅在Docker镜像内部实现的可行方案:

方案1:利用网络命名空间隔离

通过在容器内为目标用户创建独立的无外部网络命名空间,确保其所有进程无法访问外部网络:

  • 创建隔离网络命名空间:
    ip netns add restricted_netns
    
  • 编写启动脚本(比如/usr/local/bin/run_restricted),让目标用户的进程在该命名空间内运行:
    #!/bin/bash
    ip netns exec restricted_netns su - <目标用户名> -c "$@"
    
  • 给脚本添加执行权限:
    chmod +x /usr/local/bin/run_restricted
    
  • 后续启动目标用户的程序时,直接用run_restricted <程序命令>即可;若要强制该用户所有登录进程都进入隔离空间,可修改其默认shell为该脚本(需确保脚本能处理登录交互)。

方案2:用unshare快速创建隔离网络环境

unshare可直接为进程创建新的网络命名空间,无需预配置:

  • 临时运行目标用户的程序时,执行:
    unshare -n su - <目标用户名> -c "<程序命令>"
    
    -n参数会生成仅包含回环接口的新网络空间,无外部网络访问权限。
  • 若要让目标用户登录后默认处于无网络环境,可创建自定义shell脚本/usr/local/bin/restricted_shell:
    #!/bin/bash
    unshare -n /bin/bash
    
    赋予执行权限后,修改用户shell:
    usermod -s /usr/local/bin/restricted_shell <目标用户名>
    

方案3:使用firejail实现细粒度网络限制

firejail是轻量级沙箱工具,可快速限制进程网络:

  • 在容器内安装firejail:
    apt update && apt install -y firejail
    
  • 创建自定义限制配置文件/etc/firejail/restricted-user.profile:
    net none
    allow-lo  # 保留回环接口,避免程序因无网络报错
    
  • 运行目标用户的程序时,指定配置文件:
    firejail --profile=restricted-user su - <目标用户名> -c "<程序命令>"
    
  • 同样可修改目标用户的默认shell为firejail --profile=restricted-user /bin/bash,实现登录即进入受限环境。

内容的提问来源于stack exchange,提问作者Tobi Tei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:05:23