SELinux problema de rotulagem ao tentar executar o OpenVPN

7

Estou tentando rodar o OpenVPN no Fedora 19 com o selinux (selinux-policy-targeted) no modo enforcing, e eu estou correndo em um AVC Não tenho certeza de como lidar com isso.

Iniciando o OpenVPN a partir da linha de comando, pois o root funciona bem, mas iniciando via systemd ( systemctl start openvpn@vpcbridge , onde /etc/openvpn/vpcbridge.conf exists) resulta em:

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

E em /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

Para referência, aqui está a configuração do OpenVPN:

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

Se eu executar audit2allow , recebo um arquivo de módulo com esta aparência:

  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;

Mas o carregamento gera um erro:

  # 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!

Não sei o que fazer com este erro.

Atualizar : conforme solicitado, a saída de 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
    
por larsks 13.08.2013 / 20:29

1 resposta

2

Eu não tenho um sistema Fedora agora para checar, mas agora que eu estou lendo isso algum tempo depois, "openvpn" como um nome parece meio genérico. Até o ponto em que é possível que o próprio pacote OpenVPN possa ter um módulo chamado de nome para as informações de tipo que ele adiciona quando é instalado. Isso ainda acontece se você der ao módulo um nome diferente? Como openvpn-tun ou algo assim?

Eu não tenho 100% de certeza sobre os detalhes básicos (isso é basicamente apenas um chute), mas parece que isso criaria um conflito se os dois módulos tivessem o mesmo nome. Especialmente se um módulo dependesse da informação que estava na outra.

EDITAR:

Finalmente cheguei em casa. Parece que existe um módulo nativo do SELinux com esse nome:

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

Mas parece que eu estava errado sobre como o SELinux no Fedora funciona. Parece que tudo vem em um único pacote de políticas para toda a distribuição:

[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
    
por 14.08.2013 / 22:15