wg-quick sous Ubuntu 26.04 : permission refusée lors de l'activation d'un tunnel WireGuard (AppArmor)
Petit article vite-fait car j'ai récemment bossé sur la configuration de tunnels WireGuard au boulot, et j'ai rencontré quelques petits soucis pour les activer avec wg-quick sous Ubuntu 26.04. Une modification de la configuration d'AppArmor m'empêchait de configurer mes tunnels de la manière dont je le souhaitais. Je vous explique tout ça ! 🙂
Note
Cet article fait partie d'une série sur le VPN WireGuard :
Résumé des problèmes
Le premier problème, c'est que wg-quick n'était plus en mesure d'invoquer sudo lui-même :
$ wg-quick up ./wg0.conf /usr/bin/wg-quick: line 85: /usr/bin/sudo: Permission denied
La solution est simple : ajouter sudo soi-même devant la commande :
$ sudo wg-quick up ./wg0.conf
Et le second souci, c'est que même en tapant sudo moi-même, bah il voulait toujours pas fonctionner :
$ sudo wg-quick up ./wg0.conf /usr/bin/wg-quick: line 40: /home/fabien/wg0.conf: Permission denied
Je ne sais pas exactement à partir de quelle version d'Ubuntu ces problèmes sont apparus, mais ils ont la même cause : un renforcement du profil AppArmor de wg-quick.
AppArmore a dit : Non !
Pour la faire courte, AppArmor est un logiciel renforçant la sécurité d'un système Linux en verrouillant ce que peuvent faire certaines applications. Il peut par exemple leur empêcher d'accéder à certains fichiers, au réseau, à tout ou partie d'un bus DBus,...
Pour vérifier si AppArmor est bien la source du problème, vous pouvez aller regarder dans les journaux du système. Dans un premier terminal, lancez la commande suivante qui permet de surveiller les logs en temps réel :
$ sudo dmesg -w
Puis dans un second terminal, essayez d'activer votre tunnel avec wg-quick. Si des lignes de ce genre apparaissent dans les logs, c'est que c'est bien AppArmor le coupable :
[371008.651930] audit: type=1400 audit(1787926226.600:42809): apparmor="DENIED" operation="open" class="file" profile="wg-quick" name= pid=4039369 comm="wg-quick" requested_mask="r" denied_mask="r" fsuid=0 ouid=1000
Ici on voit bien que wg-quick (profile="wg-quick") a essayé d'ouvrir le fichier "/home/fabien/wg0.conf" en lecture seule (requested_mask="r"), mais que cela lui a été refusé par AppArmor (apparmor="DENIED").
Pour résoudre ce problème, il y a deux solutions que je vais vous détailler dans la suite de cet article.
Première solution : placer sa config WireGuard au bon endroit (recommandé)
Si vous utilisez toujours la même configuration WireGuard et qu'elle n'évolue pas en permanence, le plus simple et le plus sûr est de la placer dans le dossier prévu à cet effet : "/etc/wireguard/". Ce dossier n'est accessible que de l'utilisateur root et donc les configs qui s'y trouvent y sont en sécurité (je rappelle qu'une clef privée est stockée dans les fichiers de configuration des tunnels WireGuard).
Vous pouvez donc déplacer votre fichier :
$ sudo mv ./wg0.conf /etc/wireguard/wg0.conf
Puis activer et désactiver votre tunnel avec les commandes suivantes :
$ sudo wg-quick up wg0 $ sudo wg-quick down wg0
Ici, wg0 correspond au nom du fichier que vous avez placé dans "/etc/wireguard/", sans son extension.
Seconde solution : assouplir la configuration d'AppArmor
Si comme moi vous êtes en train de faire des tests et que votre config change toutes les 5 min, alors il peut être utile d'assouplir le profil AppArmor de wg-quick.
Pour ce faire, il faut aller éditer le fichier "/etc/apparmor.d/wg-quick", et y ajouter les lignes suivantes juste avant l'accolade finale :
# Allow to read configs from home dir
file r @{HOME}/{,**},
Il suffit ensuite de recharger la config d'AppArmor avec la commande suivante :
$ sudo systemctl reload apparmor
Vous devriez à présent pouvoir activer et désactiver des tunnels WireGuard dont la configuration est stockée dans votre home à l'aide des commandes habituelles :
$ sudo wg-quick up ./wg0.conf $ sudo wg-quick down ./wg0.conf
Notez bien le "./" devant le nom du fichier, il est important. Si vous l'omettez, wg-quick ira chercher la config dans "/etc/wireguard/" et pas dans le dossier courant.
Note
Et pour sudo ?
C'est aussi via ce même fichier que l'on peut permettre à wg-quick d'appeler sudo, mais j'avoue que j'ai laissé tombé. J'ai essayé hein... Mais à chaque règle que je rajoutais ça pétait un peu plus loin et j'avais pas trop le temps de chercher sur le moment. 😅
Ceci dit, si quelqu'un a la solution clef en main je suis preneur ! 😉
Conclusion
Et voilà, j'espère que ce petit article pourra être utile à ceux qui se retrouveraient dans la même situation. Si vous cherchez plus d'information sur les fichiers de configuration de WireGuard et sur le fonctionnement de wg-quick, je vous invite à lire l'article que je lui avais dédié à l'époque [Ouch, c'était il y a 6 ans déjà ! 😖] :
À bientôt ! o/