尝试运行 OpenVPN 时出现 SELinux 重新标记问题

尝试运行 OpenVPN 时出现 SELinux 重新标记问题

我试图在 Fedora 19 下以强制模式使用 selinux (selinux-policy-targeted) 运行 OpenVPN,但我遇到了 AVC,我不完全确定如何处理。

以 root 身份从命令行启动 OpenVPN 工作正常,但通过 systemd (systemctl start openvpn@vpcbridge,如果 /etc/openvpn/vpcbridge.conf存在)启动它会导致:

  ERROR: Cannot ioctl TUNSETIFF tap0: Permission denied (errno=13)

并在/var/log/audit

  type=AVC msg=audit(1376412420.435:60): avc:  denied  { relabelfrom } for
  pid=720 comm="openvpn" scontext=system_u:system_r:openvpn_t:s0
  tcontext=system_u:system_r:ifconfig_t:s0 tclass=tun_socket

作为参考,以下是 OpenVPN 配置:

port 1194
user openvpn
dev tap0
proto udp
secret vpcbridge.key
keepalive 10 120
persist-tun
persist-key

如果我运行audit2allow,我会得到一个如下所示的模块文件:

  module openvpn 1.0;

  require {
        type openvpn_t;
        type ifconfig_t;
        class tun_socket relabelfrom;
  }

  #============= openvpn_t ==============
  allow openvpn_t ifconfig_t:tun_socket
  relabelfrom;

但是加载会产生错误:

  # semodule -i openvpn.pp
  libsepol.print_missing_requirements: openvpn's global requirements were
  not met: type/attribute openvpn_t (No such file or directory).
  libsemanage.semanage_link_sandbox: Link packages failed (No such file or
  directory).
  semodule:  Failed!

我不知道该如何处理这个错误。

更新:根据要求,输出seinfo -t ...

# seinfo -t | grep openvpn
   openvpn_tmp_t
   openvpn_unconfined_script_exec_t
   openvpn_status_t
   openvpn_etc_rw_t
   openvpn_var_lib_t
   openvpn_var_run_t
   openvpn_port_t
   openvpn_server_packet_t
   openvpn_etc_t
   openvpn_initrc_exec_t
   openvpn_var_log_t
   openvpn_unconfined_script_t
   openvpn_exec_t
   openvpn_t
   openvpn_client_packet_t

答案1

我现在没有 Fedora 系统可以检查,但现在我稍后读到这个“openvpn”这个名字似乎有点通用。以至于 OpenVPN 软件包本身可能有一个名为 that 的模块,用于在安装时添加的类型信息。如果您为模块指定不同的名称,这种情况还会发生吗?比如openvpn-tun什么的?

我对具体细节不是 100% 确定(这基本上只是一个疯狂的猜测),但如果两个模块具有相同的名称,似乎会产生冲突。特别是如果一个模块依赖关于对方的信息。

编辑:

终于到家了。看起来有一个具有该名称的本机 SELinux 模块:

[root@localhost test]# cat /etc/fedora-release 
Fedora release 18 (Spherical Cow)
[root@localhost test]# semodule -l | grep openvpn
openvpn 1.11.0  

但看来我对 Fedora 上 SELinux 工作方式的理解是错误的。看起来这一切都在整个发行版的一个策略包中:

[root@localhost modules]# pwd
/etc/selinux/targeted/modules/active/modules
[root@localhost modules]# ls -lh openvpn.pp
-rw-r--r--. 1 root root 12K Jun 27 08:59 openvpn.pp
[root@localhost modules]# rpm -qf $PWD/openvpn.pp
selinux-policy-targeted-3.11.1-98.fc18.noarch

相关内容