Não tem certeza do que inicia este arquivo unitário systemd

3

Então, eu estive olhando a configuração openvpn no meu servidor baseado no Debian 9 e encontrei algo que não posso explicar nos arquivos unitários do systemd para o daemon openvpn. O daemon em si está começando e funcionando sem problemas, mas não consigo entender por que ... Deixe-me explicar:)

Então eu tenho o openvpn instalado e tenho uma configuração apropriada no arquivo /etc/openvpn/server.conf . Nada de errado até agora.

No entanto, aparentemente, duas unidades systemd estão em execução para openvpn, ou seja, openvpn.service e [email protected] . Este último parece ser o que realmente aceita as conexões vpn incomming e tal, o anterior não parece fazer muito em tudo. Aparentemente, apenas corre para iniciar o último, suponho ...

Marcar o diretório /etc/systemd/system/multi-user.target.wants / para arquivos relacionados ao openvpn mostra apenas o arquivo openvpn.service, que de origem é um link simbólico para um nome semelhante arquivo em / lib / systemd / system. O conteúdo deste arquivo é:

# 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, legal. Então, isso só funciona / bin / true. Então, o que exatamente inicia o daemon openvpn @ server ? Eu sei que o arquivo de unidade para isso é /lib/systemd/[email protected] mas não consigo encontrar qualquer indício no meu sistema para o que exatamente executa este arquivo de unidade. (Eu estava esperando encontrar um link simbólico para isso em / etc / systemd / system somwhere, mas não há.) O conteúdo deste arquivo é:

[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

Portanto, este arquivo unitário tem muito mais substância do que o arquivo openvpn.service. Mas o que chuta isso? Eu notei a parte PartOf = openvpn.service no arquivo acima, mas procurar o significado disso nas páginas man não me fez muito mais sábio.

Vou continuar pesquisando porque só quero saber o que faz essa coisa funcionar!

Se você tiver alguma pista sobre como este arquivo de unidade específico é executado ou o que o inicia, por favor me avise:)

    
por Gildor 16.07.2017 / 01:50

1 resposta

6

Você precisa saber duas coisas:

  • Existem vários outros diretórios não documentados onde o systemd mantém arquivos unitários.
  • Debian e Ubuntu fornecem um gerador em /lib/systemd/system-generators/openvpn-generator que coloca "quer" links simbólicos em um desses diretórios não documentados, um para cada arquivo *.conf em /etc/openvpn .

Os links simbólicos fazem com que openvpn.service se comporte como um alvo e "querem" todas as suas várias instanciações de modelos; como o comentário no início da unidade de serviço explica.

Note que o Debian e o Ubuntu não estão alinhados com o que as pessoas do OpenVPN eles mesmos fornecem para o systemd, que é usado no Arch, CentOS, Fedora e afins. O Debian e o Ubuntu suplantam completamente o que é fornecido no próprio OpenVPN para tudo isso, com seus próprios recursos para o systemd. Portanto, pelo menos, tenha cuidado ao ler o doco sobre o sistema operacional que o doco está supondo que você tenha.

As pessoas do OpenVPN usadas para fornecem uma unidade de modelo [email protected] , mas nenhum gerador nem openvpn.service target-as-a-service. Era necessário ativar e desativar explicitamente openvpn@name onesself com os mecanismos comuns do systemd para fazer isso, e eles eram "procurados" diretamente por multi-user.target , em vez de um intermediário target-as-a- serviço.

As pessoas do OpenVPN hoje em dia fornecem modelos distintos [email protected] e [email protected] , continuam a não fornecer um gerador ou openvpn.service target-as-a-service e esperamos que você ative explicitamente e desabilite openvpn-service@name e openvpn-client@name com os mecanismos ordinários do systemd para fazer isso. Os arquivos *.conf foram movidos para fora de /etc/openvpn e para /etc/openvpn/client e /etc/openvpn/server também.

Leitura adicional

por 16.07.2017 / 14:15