GNU/Linux >> Znalost Linux >  >> Debian

Debian – nejste si jisti, co spouští tento soubor Systemd Unit?

Díval jsem se tedy na konfiguraci openvpn na mém serveru založeném na Debianu 9 a našel jsem něco, co nedokážu vysvětlit v souborech systemd unit pro démona openvpn. Samotný démon se spouští a funguje bez problémů, ale nemohu přijít na to proč... Dovolte mi to vysvětlit 🙂

Takže mám nainstalovaný openvpn a mám správnou konfiguraci v /etc/openvpn/server.conf soubor. Zatím nic špatného.

Pro openvpn však zřejmě běží dvě systémové jednotky, konkrétně openvpn.service a [e-mail chráněn] . Zdá se, že ten druhý skutečně přijímá příchozí připojení vpn a podobně, ten první podle všeho moc nedělá. Zdá se, že to jen běží, aby se spustilo to druhé, předpokládám…

Kontrola /etc/systemd/system/multi-user.target.wants/ adresář pro soubory související s openvpn zobrazuje pouze soubor openvpn.service, jehož zdroj je symbolický odkaz na podobný pojmenovaný soubor v /lib/systemd/system. Obsah tohoto souboru je:

# 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 v pohodě. Takže to běží pouze /bin/true. Co přesně potom spustí [email protected] démon? Vím, že soubor jednotky pro toto je /lib/systemd/[email protected] ale nemohu v mém systému najít žádné vodítko k tomu, co přesně spouští tento soubor jednotky. (Čekal jsem, že pro to najdu symbolický odkaz v /etc/systemd/system někde, ale není.) Obsah tohoto souboru je:

[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

Tento soubor jednotky má tedy mnohem větší obsah než soubor openvpn.service. Ale co to nastartuje? Všiml jsem si PartOf=openvpn.service část ve výše uvedeném souboru, ale hledání významu tohoto v manuálových stránkách mě o moc moudřejší neudělalo.

Budu pokračovat v hledání, protože chci jen vědět, proč tahle věc funguje!

Pokud máte nějaké ponětí o tom, jak se tento konkrétní soubor jednotky spouští nebo co jej spouští, dejte mi prosím vědět 🙂

Přijatá odpověď:

Musíte vědět dvě věci:

  • Existuje několik dalších nezdokumentovaných adresáře, kde systemd uchovává soubory jednotek.
  • Debian a Ubuntu poskytují generátor v /lib/systemd/system-generators/openvpn-generator který umístí symbolické odkazy „chce“ do jednoho z těchto nezdokumentovaných adresářů, jeden pro každý *.conf soubor v /etc/openvpn .

Symbolické odkazy způsobují openvpn.service chovat se jako cíl a „chtít“ všechny vaše různé instance šablon; jak vysvětluje komentář na začátku servisní jednotky.

Všimněte si, že Debian a Ubuntu nejsou v souladu s tím, co lidé OpenVPN sami zdroj pro systemd, což je to, co se používá na Arch, CentOS, Fedora a podobně. Debian a Ubuntu zcela nahrazují to, co je k tomu všemu dodáváno v samotném OpenVPN, svými vlastními věcmi pro systemd. Při čtení doco si tedy alespoň dejte pozor, jaký operační systém tento doco předpokládá.

Související:Linux – Jak přepínat mezi tty a xorg session?

Lidé s OpenVPN byli poskytnout [email protected] šablonu, ale žádný generátor ani openvpn.service target-as-a-service. Bylo nutné explicitně povolit a zakázat [email protected]name měli k tomu běžné systémové mechanismy a byli „chtěni“ přímo od multi-user.target , spíše než prostřednictvím zprostředkovatelského cíle jako služby.

Lidé OpenVPN dnes poskytnout odlišné [email protected] a [email protected] šablony, nadále nedodávejte generátor ani openvpn.service target-as-a-service a očekáváte, že explicitně povolíte a zakážete [email protected]name a [email protected]name s běžnými systemd mechanismy, jak to udělat. Soubor *.conf soubory byly přesunuty z /etc/openvpn a do /etc/openvpn/client a /etc/openvpn/server .

Další čtení

  • Jonathan de Boyne Pollard (2016). “Chybí systémové vyhledávací cesty z systemd.unit manuálová stránka“. Errata pro systemd doco . Často uváděné odpovědi.
  • https://unix.stackexchange.com/a/233581/5132
  • https://unix.stackexchange.com/a/206490/5132
  • „konfigurace služby systemd“. OpenVPN . Arch wiki.
  • „konfigurace služby systemd“. OpenVPN . Parabola wiki.
  • Christian Hesse (2016-12-30). Aktualizace OpenVPN 2.4.0 vyžaduje zásah správce . Arch novinky.
  • https://askubuntu.com/a/640026/43344

Debian
  1. Podmíněné povolení souborů Systemd prostřednictvím balíčku Debian?

  2. Debian – „askfirst“ Getty With Systemd („stiskněte Enter pro aktivaci této konzole“)?

  3. Debian – správný způsob použití Onfailure v Systemd?

  1. Systemd:Nelze zakázat vygenerovaný soubor jednotky?

  2. Vložit soubor Systemd Unit?

  3. Debian – Systemd:Služba postrádá nastavení Execstart=i Execstop=. Odmítnout?

  1. Nainstalujte OpenVPN Server na Debian 11/Debian 10

  2. Jak přesměrovat výstup služby systemd do souboru

  3. @reboot nefunguje v CRON