web-dev-qa-db-ja.com

OpenVPNSELinuxアクセス許可が拒否されました

CentOS6.4を実行しています。

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

いくつかの更新と再起動の後、OpenVPNは起動に失敗します。

# service openvpn start
Starting openvpn:                                          [FAILED]

/ var/log/messagesは、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

どうやらそれはSELinuxの問題です。

このバグレポート に従ってopenvpn-2.3.2-2.el6.x86_64に更新しようとしましたが、成功しませんでした。これをどのようにデバッグ/修正する必要がありますか?

編集:IainとJiriXichtknihaの両方に感謝します。 / etc/openvpn/server.confのログファイルの場所に変更して読み取りました

status /var/log/openvpn-status.log

これは現在のポリシーで機能します。

3
Eero Aaltonen

簡単な修正は、openvpnプロセスが/var/log/openvpn-status.logとして実行されており、ポリシー内でopenvpn_t(/ varとして)というラベルの付いたファイルに書き込む権限があるため、ログファイルをvar_log_tに変更することです。/logは)である必要があります。

/var/log/openvpnのデフォルトコンテキストはopenvpn_var_log_tです。

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

少し多くの管理を必要とするより長いプロセスは、openvpn_topenvpn_var_log_tに書き込むことを許可することです。これは、/ var/log/openvpnが取得するコンテキストです。

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

インストールできる.ppファイルが生成されます

semodule -i localOpenVpn.pp

LocalOpenVpn.teとlocalOpenVpn.ppを安全な場所に保管することを忘れないでください。


JiriXichtknihaの場合

生成された.teファイルを見ると、特に

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

openvpn_var_log_tはリストされていないことに注意してください。

6
user9517

私はOpenVPNを使用していませんが、準備されたOpenVPNポリシーが使用するものとは異なるログへのパスがあります。これはそれを機能させるでしょう。

# 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

元のポリシーは最後の行です。ご覧のとおり、「openvpn。*」を受け入れるだけですが、これはsubdirに戻りません。

1
jirib