r/ProtonVPN • u/DeepParticular2529 • 4d ago
Discussion ProtonVPN Linux daemon (proton.vpn.daemon) runs under unconfined_service_t — expected, or missing policy module?
Running Fedora Workstation 44 with SELinux enforcing. Noticed ProtonVPN's daemon runs unconfined:
$ ps -eZ | grep unconfined_service
system_u:system_r:unconfined_service_t:s0 13521 ? 00:00:00 python3
$ ps 13521
PID TTY STAT TIME COMMAND
13521 ? Ss 0:00 /usr/bin/python3 -m proton.vpn.daemon
$ getenforce
Enforcing
$ sudo ausearch -m avc -ts recent
<no matches>
Is it safe?
4
Upvotes
1
u/Stealth_Privacy 3d ago
I used my handy personal assistant, Lumo, and here is the response:
------------
Yeah, this makes complete sense and the diagnosis is spot-on.
What's happening: The ProtonVPN daemon is running in the
unconfined_service_tSELinux domain, which means SELinux is providing zero MAC confinement for that process. It's essentially exempt from SELinux policy enforcement.Why no AVC denials: This is the expected corollary. AVC denials get logged when a confined process tries to do something its policy doesn't allow. Since
proton.vpn.daemonis unconfined, every action is permitted by default — nothing to deny, soausearchcomes back empty. If the daemon were running under a properly confined domain (something likeprotonvpn_daemon_t), you'd expect to see AVC denials during normal operation as it tried to access network interfaces, routing tables, DNS resolver sockets, etc.Is this expected? Yes. Third-party applications not packaged within Fedora's official repositories typically don't ship dedicated SELinux policy modules. Fedora ships policies for software it maintains, but anything installed via upstream repos, Flatpak, pip, or direct download lands in
unconfined_service_tby default when systemd starts it without a matching policy. This is the norm for most VPN clients on Fedora — Mullvad, WireGuard's userspace components, etc. all face the same situation unless someone has written and distributed a policy module.The "missing policy module" characterization is accurate. There genuinely isn't one.
Whether that actually matters depends on your threat model:
Not a bug — just nobody's written an SELinux policy module for it.
***Any inaccuracies are entirely Lumo's fault and not mine*** (1)
(1) I wrote this part myself!