我有一个带有 chroot-jail 的 OpenVPN 客户端,目前作为 Linux 服务运行openvpn-client@vpn
我正在尝试使其与 AppArmor 一起工作,我在 /etc/apparmor.d/usr.sbin.openvpn 中创建了 OpenVPN 配置文件,但是当 openvpn 服务尝试启动时出现此错误:
**
chroot 到 '/.vpn-jail/' 失败:操作不允许
**
没有 AppArmor,Jail-Chrooted OpenvVPN 客户端服务也可以按需要工作。
这是我当前的 OpenVPN AppArmor 配置文件,我尝试使用标志:chroot_attach、chroot_relative、namespace_relative 等……但到目前为止我还无法使其工作。
# vim:syntax=apparmor
#include <tunables/global>
#include if exists <tunables/chroot>
profile openvpn /usr/sbin/openvpn flags=(chroot_attach) {
#include <abstractions/base>
#include <abstractions/openssl>
#include <abstractions/nameservice> # embedded, but more relaxed
capability net_admin,
capability setuid,
capability setgid,
/etc/openvpn/client/*.conf r, # any.conf
/etc/openvpn/client/credentials/decrypted_credentials.txt r,
@{VPNCHROOT}/etc/openvpn/client/*.conf r,
@{VPNCHROOT}/etc/openvpn/client/credentials/decrypted_credentials.txt r,
/dev/net/tun rw,
@{PROC}/@{pid}/net/route r,
/var/log/openvpn/openvpn-status.log rw,
/var/log/openvpn/openvpn.log rw,
/var/log/openvpn/ipp.txt rw,
/{,var/}run/openvpn/server.pid rw,
/{,var/}run/openvpn/client{,-*}.pid rw,
/{,var/}run/openvpn/client{,-*}.status rw,
/{,usr/}bin/ip Cx,
profile ip /{,usr/}bin/ip {
/{,usr/}bin/ip r,
#include <abstractions/base>
capability net_admin,
/var/log/openvpn/openvpn.log w,
}
# #include <local/usr.sbin.openvpn>
}
答案1
CAP_SYS_CHROOT
- 使用
chroot(2)
;- 使用 更改挂载命名空间
setns(2)
。
Apparmor 配置中允许的其他功能均不授予使用权限chroot(2)
):chroot()
获取EPERM
/不允许操作。
您必须添加:
capability sys_chroot,
在 Apparmor 设置中。这可能成为一个迭代过程:继续,遇到下一个错误,检查应用程序日志和 Apparmor 日志(通常/var/log/audit/
需要解析器的帮助),通过查看手册capabilities(7)
(或任何其他限制而不是功能)修复它,直到它完全正常运行。