GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Debian – Nicht sicher, was diese Systemd-Unit-Datei startet?

Also habe ich mir die openvpn-Konfiguration auf meinem Debian 9-basierten Server angesehen und etwas gefunden, das ich in den systemd-Unit-Dateien für den openvpn-Daemon nicht erklären kann. Der Daemon selbst startet und funktioniert ohne Probleme, aber ich kann nicht herausfinden, warum… Lass es mich erklären 🙂

Ich habe also openvpn installiert und eine korrekte Konfiguration in der /etc/openvpn/server.conf Datei. Bisher nichts falsch.

Allerdings laufen anscheinend zwei systemd-Units für openvpn, nämlich openvpn.service und [E-Mail geschützt] . Letzterer scheint derjenige zu sein, der tatsächlich die eingehenden VPN-Verbindungen akzeptiert, und ersterer scheint überhaupt nicht viel zu tun. Es läuft anscheinend nur, um letzteres zu starten, nehme ich an ...

Überprüfen Sie die Datei /etc/systemd/system/multi-user.target.wants/ Das Verzeichnis für openvpn-bezogene Dateien zeigt nur die Datei openvpn.service, deren Quelle ein symbolischer Link zu einer ähnlich benannten Datei in /lib/systemd/system ist. Der Inhalt dieser Datei ist:

# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target

OK Cool. Dies führt also nur /bin/true aus. Was genau startet dann das [email protected] Dämon? Ich weiß, dass die Unit-Datei dafür /lib/systemd/[email protected] ist aber ich kann auf meinem System keinerlei Hinweis darauf finden, was genau diese Unit-Datei ausführt. (Ich hatte erwartet, einen Symlink dafür unter /etc/systemd/system zu finden irgendwo, aber es gibt keinen.) Der Inhalt dieser Datei ist:

[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target

Diese Unit-Datei hat also viel mehr Substanz als die openvpn.service-Datei. Aber was löst es aus? Mir ist der PartOf=openvpn.service aufgefallen Teil in der obigen Datei, aber das Nachschlagen der Bedeutung in den Manpages hat mich nicht viel klüger gemacht.

Ich werde weiter suchen, weil ich einfach wissen will, wie dieses Ding tickt!

Wenn jemand eine Ahnung hat, wie diese spezielle Unit-Datei ausgeführt wird oder was sie startet, lassen Sie es mich bitte wissen 🙂

Akzeptierte Antwort:

Sie müssen zwei Dinge wissen:

  • Es gibt mehrere weitere undokumentierte Verzeichnisse, in denen systemd Unit-Dateien aufbewahrt.
  • Debian und Ubuntu liefern einen Generator in /lib/systemd/system-generators/openvpn-generator das setzt symbolische „Will“-Links in eines dieser undokumentierten Verzeichnisse, einen für jede *.conf Datei in /etc/openvpn .

Die symbolischen Links führen zu openvpn.service sich wie ein Ziel zu verhalten und alle Ihre verschiedenen Template-Instanziierungen zu „wollen“; wie der Kommentar zu Beginn der Serviceeinheit erklärt.

Beachten Sie, dass Debian und Ubuntu nicht mit dem übereinstimmen, was die OpenVPN-Leute selbst tun Versorgung für systemd, was auf Arch, CentOS, Fedora und dergleichen verwendet wird. Debian und Ubuntu ersetzen das, was in OpenVPN selbst für all dies bereitgestellt wird, vollständig durch ihre eigenen Sachen für systemd. Passen Sie also zumindest auf, wenn Sie Doco lesen, welches Betriebssystem Sie nach Doco vermuten.

Verwandte:Linux – Wie wechselt man zwischen tty- und xorg-Sitzung?

Die OpenVPN-Leute früher geben Sie einen [email protected] ein Vorlageneinheit, aber weder Generator noch openvpn.service Target-as-a-Service. Man musste [email protected]name sich mit den gewöhnlichen systemd-Mechanismen dafür, und sie wurden direkt „gesucht“. durch multi-user.target , anstatt von einem zwischengeschalteten Target-as-a-Service.

Die OpenVPN-Leute heute Geben Sie eindeutig [email protected] an und [email protected] Templates weiterhin keinen Generator oder openvpn.service liefern Target-as-a-Service und erwarten, dass Sie [email protected]name und [email protected]name sich mit den gewöhnlichen systemd-Mechanismen dafür. Die *.conf Dateien wurden aus /etc/openvpn verschoben und in /etc/openvpn/client und /etc/openvpn/server , auch.

Weiterführende Literatur

  • Jonathan de Boyne Pollard (2016). „Fehlende Systemsuchpfade aus systemd.unit Handbuchseite“. Errata für systemd doco . Häufig gegebene Antworten.
  • https://unix.stackexchange.com/a/233581/5132
  • https://unix.stackexchange.com/a/206490/5132
  • “systemd service configuration“. OpenVPN . Arch-Wiki.
  • “systemd service configuration“. OpenVPN . Parabel-Wiki.
  • Christian Hesse (30.12.2016). OpenVPN 2.4.0-Update erfordert Administratoreingriff . Arch-Neuigkeiten.
  • https://askubuntu.com/a/640026/43344

Debian
  1. Bedingtes Aktivieren von Systemd-Dateien durch Debian-Paketierung?

  2. Debian – Richtiger Weg zur Verwendung von Onfailure in Systemd?

  3. Debian – Systemd:Dem Dienst fehlen sowohl die Execstart=- als auch die Execstop=-Einstellung. Ablehnen?

  4. Installieren Sie OpenVPN-Server auf Debian 11/Debian 10

  5. Fix `Benutzername ist nicht in sudoers-Datei. Dieser Vorfall wird auf Debian gemeldet

So installieren Sie Go unter Debian 9

So installieren Sie Go unter Debian 10 Linux

So führen Sie ein Skript beim Booten in Debian 11 aus

So führen Sie Shell-Skript als Systemd-Dienst in Linux aus

So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

@reboot funktioniert nicht in CRON