Debian

不確定是什麼啟動了這個 systemd 單元文件

  • July 16, 2017

因此,我一直在查看基於 Debian 9 的伺服器上的 openvpn 配置,並在 openvpn 守護程序的 systemd 單元文件中發現了一些我無法解釋的內容。守護程序本身正在啟動並正常工作,但我不知道為什麼……讓我解釋一下:)

所以我已經安裝了 openvpn 並在**/etc/openvpn/server.conf**文件中進行了正確的配置。到目前為止沒有任何問題。

但是,顯然有兩個 systemd 單元正在為 openvpn 執行,即openvpn.serviceopenvpn@server.service。後者似乎是真正接受傳入的 vpn 連接的那個,前者似乎根本沒有做太多事情。它顯然只是為了啟動後者,我想……

檢查**/etc/systemd/system/multi-user.target.wants/**目錄中的 openvpn 相關文件僅顯示 openvpn.service 文件,該文件的源是 /lib/systemd/system 中類似命名文件的符號連結。這個文件的內容是:

# 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

嗯不錯。所以這只執行/bin/true。那麼究竟是什麼啟動了openvpn@server守護程序呢?我知道這個單元文件是**/lib/systemd/openvpn@.service但我在我的系統上找不到任何線索來確切執行這個單元文件。(我希望在/etc/systemd/system** somwhere下找到一個符號連結,但沒有。)這個文件的內容是:

[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

所以這個單元文件比 openvpn.service 文件有更多的內容。但是什麼開始呢?我注意到上面文件中的PartOf=openvpn.service部分,但是在手冊頁中查找它的含義並沒有讓我變得更聰明。

我會繼續搜尋,因為我只想知道是什麼讓這件事發生了變化!

如果您對這個特定單元文件的執行方式或啟動它有任何線索,請告訴我:)

你需要知道兩件事:

  • systemd 保存單元文件的還有幾個未記錄的目錄。
  • Debian 和 Ubuntu 提供了一個生成器,它將“想要”的符號連結放入其中一個未記錄的目錄/lib/systemd/system-generators/openvpn-generator中,每個.*.conf``/etc/openvpn

符號連結導致openvpn.service表現得像一個目標並“想要”你所有的各種模板實例;正如服務單元開頭的評論所解釋的那樣。

請注意,Debian 和 Ubuntu 與 OpenVPN 人員自己為 systemd 提供的內容不一致,後者用於 Arch、CentOS、Fedora 等。Debian 和 Ubuntu 完全取代了 OpenVPN 本身為這一切提供的東西,用他們自己的 systemd 東西。因此,至少在閱讀 doco 時要小心 doco 假設您擁有的操作系​​統。

OpenVPN 人過去提供openvpn@.service模板單元,但沒有生成器,也沒有openvpn.service目標即服務。必須使用普通的 systemd 機制顯式地啟用和禁用自己,並且它們是由直接“需要”的,而不是由中間的目標即服務。openvpn@*name*``multi-user.target

現在的 OpenVPN 人員提供不同的openvpn-service@.service模板openvpn-client@.service,繼續不提供生成器或目標即服務,並openvpn.service希望您使用普通的 systemd 機制顯式啟用和禁用您自己。這些文件也已移出和移入and 。openvpn-service@*name*``openvpn-client@*name*``*.conf``/etc/openvpn``/etc/openvpn/client``/etc/openvpn/server

進一步閱讀

引用自:https://unix.stackexchange.com/questions/378749