A execução com setenforce 0
foi capaz de obter as seguintes regras de permissão usando audit2allow
:
#============= ifconfig_t ==============
allow ifconfig_t net_conf_t:file mounton;
allow ifconfig_t openvpn_etc_t:file { getattr open read };
allow ifconfig_t openvpn_exec_t:file { execute execute_no_trans open read };
allow ifconfig_t openvpn_tmp_t:dir { read write };
Eu também tenho essa regra dos mesmos registros
#============= ifconfig_t ==============
#!!!! WARNING: 'tmp_t' is a base type.
allow ifconfig_t tmp_t:dir { read write };
Para não permitir isso, criei uma subpasta com o rótulo openvpn_tmp_t
em /tmp
e executei openvpn
com o argumento --tmp-dir
apontando para esse diretório.
Depois disso, ainda não consegui iniciar o serviço. Olhando para journalctl -xe
, vi que houve um problema ao carregar um arquivo de configuração:
-- Unit myvpn.service has begun starting up.
Jul 17 06:19:56 castiel ip[22825]: Options error: In [CMD-LINE]:1: Error opening configuration file: /etc/openvpn/profiles/myprofile.ovpn
Jul 17 06:19:56 castiel ip[22825]: Use --help for more information.
Jul 17 06:19:56 castiel systemd[1]: myvpn.service: Control process exited, code=exited status=1
Jul 17 06:19:56 castiel systemd[1]: Failed to start OpenVPN connection to myprofile.ovpn.
Eu tentei novamente com setenforce 0
e foi possível inicializar. Surpreendentemente não havia nada no log de auditoria sobre isso.
Eu pesquisei e deparei com uma velha pergunta na lista de discussão do Fedora selinux .
Aparentemente, há uma regra de dontaudit
que bloqueia o registro de algumas mensagens.
Isso pode ser desativado com semodule -DB
(reativado com semodule -B
).
Com o restante dos erros registrados, recebi mais algumas linhas que enviei para as regras com audit2allow
:
#============= ifconfig_t ==============
allow ifconfig_t openvpn_etc_t:dir search;
allow ifconfig_t openvpn_tmp_t:dir search;
#============= init_t ==============
allow init_t ifconfig_t:process noatsecure;
allow init_t kernel_t:unix_stream_socket { read write };
Com essas políticas combinadas, consegui executar o openvpn dentro do namespace da rede por meio do systemd.
Ainda não tenho certeza de como essas regras são seguras ou se há uma maneira melhor de fazer isso.