Permissão do SELinux do OpenVPN negada

3

Estou executando o CentOS 6.4.

# cat /etc/centos-release
CentOS release 6.4 (Final)

Após algumas atualizações e uma reinicialização, o OpenVPN não inicia.

# service openvpn start
Starting openvpn:                                          [FAILED]

/ var / log / messages mostra a seguinte saída no openvpn:

Nov 13 14:09:58 host kernel: type=1400 audit(1384344598.334:39761): avc:  denied  { read write } for  pid=5777 comm="openvpn" name="openvpn" dev=dm-0 ino=54527865 scontext=unconfined_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:openvpn_var_log_t:s0 tclass=dir
Nov 13 14:09:58 host openvpn[5777]: Options error: --status fails with '/var/log/openvpn/openvpn-status.log': Permission denied

Então, aparentemente, é um problema do SELinux.

Eu tentei atualizar para openvpn-2.3.2-2.el6.x86_64 como este relatório de bug mas não teve sucesso. Como devo depurar / corrigir isso?

EDIT: Graças a Iain e Jiri Xichtkniha. Eu mudei para a localização do arquivo de log em /etc/openvpn/server.conf para ler

status /var/log/openvpn-status.log

que funciona com a política atual.

    
por Eero Aaltonen 13.11.2013 / 13:31

2 respostas

6

Uma solução rápida seria alterar o arquivo de log para ser /var/log/openvpn-status.log , pois o processo openvpn está sendo executado como openvpn_t e tem permissão dentro da política para gravar em arquivos com o nome var_log_t (como / var / log deve ser).

O contexto padrão para /var/log/openvpn é openvpn_var_log_t

matchpathcon /var/log/openvpn
/var/log/openvpn        system_u:object_r:openvpn_var_log_t:s0

Um processo mais longo que requer um pouco mais de gerenciamento é permitir que openvpn_t grave em openvpn_var_log_t , que é o contexto que / var / log / openvpn obtém, por exemplo,

echo "host kernel: type=1400 audit(1384344598.334:39761): avc:  denied  { read write } for  pid=5777 comm="openvpn" name="openvpn" dev=dm-0 ino=54527865 scontext=unconfined_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:openvpn_var_log_t:s0 tclass=dir" | audit2allow -M localOpenVpn

que irá gerar um arquivo .pp que você pode instalar

semodule -i localOpenVpn.pp

Não se esqueça de armazenar o localOpenVpn.te e o localOpenVpn.pp em algum lugar seguro.

Para Jiri Xichtkniha

Se você olhar para o arquivo .te gerado, entre outras coisas, diz

#============= openvpn_t ==============  
#!!!! The source type 'openvpn_t' can write to a 'dir' of the following types:
# net_conf_t, pcscd_var_run_t, openvpn_etc_t, openvpn_tmp_t, openvpn_var_run_t, 
  tmp_t, etc_t, var_run_t, var_log_t, krb5_host_rcache_t, tmp_t, cluster_var_lib_t,
  cluster_var_run_t, root_t, cluster_conf_t

Observe que openvpn_var_log_t não está listado.

    
por 13.11.2013 / 13:51
1

Eu não uso o OpenVPN, mas você tem um caminho diferente para fazer o log do que os usos preparados da política do OpenVPN. Isso faria com que funcionasse.

# semanage fcontext -a -t openvpn_var_log_t '/var/log/openvpn(/.*)?'
# semanage fcontext -l | grep openvpn_var_log_t
/var/log/openvpn(/.*)?                             all files          system_u:object_r:openvpn_var_log_t:s0 
/var/log/openvpn.*                                 all files          system_u:object_r:openvpn_var_log_t:s0

A política original é a última linha. Como você pode ver, apenas aceitaria 'openvpn. *', Mas isso não recria o subdiretório.

    
por 13.11.2013 / 13:46