NetworkManager und OpenVPN vs. SELinux

3 minute read Published:

Dieser Artikel stammt aus meinen früheren Wordpress-Instanzen und steht hier aus Gründen der Nostalgie.

Auf meinem Fedora 18 Notebook habe ich versucht, bei aktiviertem SELinux die OpenVPN-Integration des NetworkManager zu benutzen. Ging aber erstmal nicht. In /var/log/messages fand ich:

Apr  6 13:03:54 hydrogen nm-openvpn[21025]: Cannot load certificate file /home/softmetz/Dokumente/vpn/openvpn.cert.pem: error:0200100D:system library:fopen:Permission denied: error:20074002:BIO routines:FILE_CTRL:system lib: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib

Außerdem bekam ich einen SElinux-Alert im System-Tray angezeigt.

SELinux is preventing /usr/sbin/openvpn from open access on the file /home/softmetz/Dokumente/vpn/openvpn.cert.pem.

*****  Plugin openvpn (47.5 confidence) suggests  ****************************

If sie openvpn.cert.pem an den Standard-Speicherort verschieben möchten, so das openvpn  open Zugriff hat.
Then sie müssen die cert-Datei ins ~/.cert-Verzeichnis verschieben
Do
# mv /home/softmetz/Dokumente/vpn/openvpn.cert.pem ~/.cert
# restorecon -R -v ~/.cert


*****  Plugin openvpn (47.5 confidence) suggests  ****************************

If sie die Kennzeichnung von openvpn.cert.pem ändern möchten, so dass openvpn open Zugriff darauf hat
Then sie müssen die Markierungen korrigieren.
Do
# semanage fcontext -a -t home_cert_t /home/softmetz/Dokumente/vpn/openvpn.cert.pem
# restorecon -R -v /home/softmetz/Dokumente/vpn/openvpn.cert.pem


*****  Plugin catchall (6.38 confidence) suggests  ***************************

If sie denken, dass es openvpn standardmässig erlaubt sein sollte, open Zugriff auf openvpn.cert.pem file zu erhalten.
Then sie sollten dies als Fehler melden.
Um diesen Zugriff zu erlauben, können Sie ein lokales Richtlinien-Modul erstellen.
Do
zugriff jetzt erlauben, indem Sie die nachfolgenden Befehle ausführen:
# grep openvpn /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

Additional Information:
Source Context                system_u:system_r:openvpn_t:s0
Target Context                unconfined_u:object_r:user_home_t:s0
Target Objects                /home/ninan/.cert/openvpn.c
                              ert.pem [ file ]
Source                        openvpn
Source Path                   /usr/sbin/openvpn
Port                          <Unknown>
Host                          hydrogen
Source RPM Packages           openvpn-2.2.2-9.fc18.x86_64
Target RPM Packages           
Policy RPM                    selinux-policy-3.11.1-87.fc18.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     hydrogen
Platform                      Linux hydrogen 3.8.5-201.fc18.x86_64 #1 SMP Thu
                              Mar 28 21:01:19 UTC 2013 x86_64 x86_64
Alert Count                   13
First Seen                    2013-04-06 13:03:10 CEST
Last Seen                     2013-04-10 08:48:39 CEST
Local ID                      85255eb7-cf82-47a6-b108-d086aeeaddfe

Raw Audit Messages
type=AVC msg=audit(1365576519.644:573): avc:  denied  { open } for  pid=7585 comm="openvpn" path="/home/softmetz/Dokumente/vpn/openvpn.cert.pem" dev="dm-0" ino=257061 scontext=system_u:system_r:openvpn_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file


type=SYSCALL msg=audit(1365576519.644:573): arch=x86_64 syscall=open success=no exit=EACCES a0=7fff98655ed8 a1=0 a2=1b6 a3=238 items=0 ppid=7583 pid=7585 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=4294967295 tty=(none) comm=openvpn exe=/usr/sbin/openvpn subj=system_u:system_r:openvpn_t:s0 key=(null)

Hash: openvpn,openvpn_t,user_home_t,file,open

audit2allow

#============= openvpn_t ==============
allow openvpn_t user_home_t:file open;

audit2allow -R
require {
    type openvpn_t;
}

#============= openvpn_t ==============
userdom_mmap_user_home_content_files(openvpn_t)

Diese Fehlermeldung ist mal aussagekräftig, wenn auch sprachlich etwas holprig. Ich tat also, wie mir geheißen:

If sie openvpn.cert.pem an den Standard-Speicherort verschieben möchten, so das openvpn  open Zugriff hat.
Then sie müssen die cert-Datei ins ~/.cert-Verzeichnis verschieben
Do
# mv /home/softmetz/Dokumente/vpn/openvpn.cert.pem ~/.cert
# restorecon -R -v ~/.cert

Diesen Hinweis habe ich in weiser Voraussicht etwas abgewandelt in

# mv /home/softmetz/Dokumente/vpn/*.cert.pem ~/.cert
# restorecon -R -v ~/.cert

weil ich ja noch mehr Dateien (CA-Certs, Private-Key, Public-Key, etc) für OpenVPN brauche. Dann noch die neuen Pfade in der NetworkManager-Konfiguration angegeben, und schon geht es.