From 3ca1deb87da982eddaea6df5e2a72b640f37f159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Fri, 23 Feb 2024 16:32:45 +0100 Subject: [PATCH] Revamp systemd service, log to journalctl, direct start --- conf/systemd.service | 43 +++++++++++++++++++++++++++++++++++++++---- scripts/change_url | 2 +- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 2 +- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 0c6a61b..39e85bc 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -3,17 +3,52 @@ Description=Duniter node After=network.target [Service] +Type=exec +User=duniter +Group=duniter + Environment="DUNITER_WEB=web" Environment="DUNITER_HOME=__DATA_DIR__" Environment="DUNITER_DATA=duniter_default" Environment="DUNITER_OPTS=" -Group=duniter -User=duniter -Type=forking ExecStart=/usr/bin/duniter direct_${DUNITER_WEB}start --home ${DUNITER_HOME} --mdb ${DUNITER_DATA} $DUNITER_OPTS --webmport __PORT_WEB_ADMIN__ ExecReload=/usr/bin/duniter direct_${DUNITER_WEB}restart --home ${DUNITER_HOME} --mdb ${DUNITER_DATA} $DUNITER_OPTS --webmport __PORT_WEB_ADMIN__ ExecStop=/usr/bin/duniter stop --home ${DUNITER_HOME} --mdb ${DUNITER_DATA} -Restart=on-failure + +StandardOutput=journal +StandardError=inherit + +# Sandboxing options to harden security +# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html +NoNewPrivileges=yes +PrivateTmp=yes +PrivateDevices=yes +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK +RestrictNamespaces=yes +RestrictRealtime=yes +DevicePolicy=closed +ProtectClock=yes +ProtectHostname=yes +ProtectProc=invisible +ProtectSystem=full +ProtectControlGroups=yes +ProtectKernelModules=yes +ProtectKernelTunables=yes +LockPersonality=yes +SystemCallArchitectures=native +SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap @cpu-emulation @privileged + +# Denying access to capabilities that should not be relevant for webapps +# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html +CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD +CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE +CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT +CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK +CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM +CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG +CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE +CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW +CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG [Install] WantedBy=multi-user.target diff --git a/scripts/change_url b/scripts/change_url index d943c48..bcfc00b 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -33,7 +33,7 @@ ynh_change_url_nginx_config ynh_script_progression --message="Starting a systemd service…" # Start a systemd service -ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd +ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd --line_match="Web administration accessible" #================================================= # END OF SCRIPT diff --git a/scripts/install b/scripts/install index 3ecdc32..6d1a3d8 100644 --- a/scripts/install +++ b/scripts/install @@ -53,7 +53,7 @@ yunohost service add "$app" ynh_script_progression --message="Starting a systemd service…" # Start a systemd service -ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd +ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd --line_match="Web administration accessible" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index 63148fc..ac32d71 100644 --- a/scripts/restore +++ b/scripts/restore @@ -55,7 +55,7 @@ yunohost service add "$app" #================================================= ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 -ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" +ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" --line_match="Web administration accessible" ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index a6aaaf5..835e6ff 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -64,7 +64,7 @@ yunohost service add "$app" #================================================= ynh_script_progression --message="Starting a systemd service…" -ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd +ynh_systemd_action --service_name="$app" --action="start" --log_path=systemd --line_match="Web administration accessible" #================================================= # END OF SCRIPT