openvpn « sudo: unable to send audit message »


Contexte

  • openvpn version récente (>2.4.0, j’utilise une 2.4.4)
  • configuration openvpn en « unpriviledged user » (i.e. votre logiciel ne tourne pas en root)
  • vous avez suivi la doc à la lettre et vous avez bien modifié les paramètres :
    • user (votre utilisateur non privilégié)
    • group (votre groupe non privilégié)
    • iproute (un script shell qui wrappe la commande ip avec un sudo)

Un peu comme ceci, par exemple :

root@svr:~# egrep '^(user|group|iproute)' /etc/openvpn/servers.conf 
iproute /usr/local/openvpn/manage-interface
user openvpn
group openvpn

root@svr:~# cat /usr/local/openvpn/manage-interface 
#!/bin/sh
/usr/bin/sudo /sbin/ip $*

root@svr:~# cat /etc/sudoers.d/openvpn 
openvpn ALL=(ALL) NOPASSWD:/sbin/ip

Traces dans les logs d'erreur

Votre fichier /var/log/syslog (ou équivalent, selon votre distribution Linux) affiche les lignes suivantes :

Sep 9 11:08:30 svr systemd[1]: Starting OpenVPN connection to servers...
Sep 9 11:08:30 svr ovpn-servers[25063]: OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Dec 30 2017
Sep 9 11:08:30 svr ovpn-servers[25063]: library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.08
Sep 9 11:08:30 svr systemd[1]: Started OpenVPN connection to servers.
Sep 9 11:08:30 svr ovpn-servers[25063]: TUN/TAP device tunServers opened
Sep 9 11:08:30 svr ovpn-servers[25063]: do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Sep 9 11:08:30 svr ovpn-servers[25063]: /usr/local/openvpn/manage-interface link set dev tunServers up mtu 1500
Sep 9 11:08:30 svr root: {/usr/bin/sudo /sbin/ip link set dev tunServers up mtu 1500}
Sep 9 11:08:30 svr openvpn[25063]: sudo: unable to send audit message
Sep 9 11:08:30 svr openvpn[25063]: sudo: pam_open_session: System error
Sep 9 11:08:30 svr openvpn[25063]: sudo: policy plugin failed session initialization
Sep 9 11:08:30 svr ovpn-servers[25063]: Linux ip link set failed: external program exited with error status: 1
Sep 9 11:08:30 svr ovpn-servers[25063]: Exiting due to fatal error
Sep 9 11:08:30 svr systemd[1]: openvpn@servers.service: Main process exited, code=exited, status=1/FAILURE
Sep 9 11:08:30 svr systemd[1]: openvpn@servers.service: Unit entered failed state.
Sep 9 11:08:30 svr systemd[1]: openvpn@servers.service: Failed with result 'exit-code'.

La cause d’erreur à bien repérer est là : impossible d’envoyer un message de type « audit » :

sudo: unable to send audit message

Méthode de résolution de l'incident

Méthode automatisée

Il faut taper la commande (en utilisateur root) :

root@svr:~# systemctl edit openvpn@.service

(le « .service » n’est pas obligatoire ; attention à l’arobase)

Et, une fois en mode édition, il faut écrire les 2 lignes suivantes et enregistrer :

[Service]
CapabilityBoundingSet=CAP_AUDIT_WRITE

Puis redémarrer le service openvpn.

Méthode manuelle

Il faut créer un fichier texte, puis recharger la configuration systemd :

root@svr:~# cat > /etc/systemd/system/openvpn@.service.d/override.conf  << EOF
[Service]
CapabilityBoundingSet=CAP_AUDIT_WRITE
EOF
root@svr:~# systemctl daemon-reload

Puis redémarrer le service openvpn.

Cause de l'incident

Le système de démarrage de openvpn, par défaut, restreint les capacités du lanceur du programme à certaines fonctionnalités. Et il en manque une. Comment voir la restriction ?

root@svr:~# grep Capa /lib/systemd/system/openvpn@.service 
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE

Il est évidemment hors de question de modifier ce fichier, car il est géré par le système de déploiement du logiciel openvpn (fichier DEB ou RPM), et il va donc se faire écraser lors de chaque mise à jour du système.

Plus globalement, c’est mal d’éditer les fichiers par défaut car les modifications vont être écrasées lors des prochains déploiements, il faut utiliser à tout prix les systèmes d’override quand ils existent. 🙂


Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *