Flo*_*sen 3 vpn openvpn docker
我有一个简单的 docker 文件
FROM ubuntu:14.04
USER root
RUN apt-get update && sudo apt-get -y install openvpn
COPY . /tmp
Run Code Online (Sandbox Code Playgroud)
在哪里 。包含有关 VPN 连接的所有必要信息(ovpn 文件、ca 文件、用户证书和密钥)。
通过构建并运行容器docker run -it --device=/dev/net/tun,然后更改为 /tmp 目录并执行,sudo openvpn config.ovpn出现以下错误:
Fri Aug 23 06:15:21 2019 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
Run Code Online (Sandbox Code Playgroud)
[编辑] 通过 OpenVPN GUI 启动 .ovpn 配置工作正常。
有什么建议吗?
谢谢。
问题是sudo在你的情况下不会改变任何东西。这不是“权限被拒绝”类型问题的最终解决方案。当您的容器已经代表 运行时,这尤其不起作用root。
Linux 中的特权操作由Capability管理,它代表特定特权操作的权限。root为了保持此模型与经典 UNIX 模型兼容,默认情况下代表运行的进程具有所有功能。例如,诸如 之类的内容sudo(将您的 UID 升级为0)也会授予您全套功能。
然而,在容器中情况并非如此——容器中的进程(甚至root拥有的)可用的功能数量受到所谓的边界集的限制,当在 Docker 中运行时,默认情况下该边界集包含非常有限的功能:
$ docker run -it ubuntu:14.04
root@fe50edf72783:/# capsh --print
Current: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,
cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,
cap_mknod,cap_audit_write,cap_setfcap+eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,
cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,
cap_mknod,cap_audit_write,cap_setfcap
Run Code Online (Sandbox Code Playgroud)
网络管理(接口配置等)需要CAP_NET_ADMIN能力。如您所见,它不在 Docker 容器的默认边界集中,因此您需要使用以下命令显式添加它--cap-add=net_admin:
docker run -it --device=/dev/net/tun --cap-add=net_admin
Run Code Online (Sandbox Code Playgroud)
之后,您将在容器中拥有此功能。考虑到您代表 运行它root,拥有此功能会使使用sudo毫无用处(它不会授予您比现在更多的功能),因此您可以放弃它并简单地使用 运行 OpenVPN openvpn config.ovpn。
| 归档时间: |
|
| 查看次数: |
5846 次 |
| 最近记录: |