mirror of
https://github.com/webmin/webmin.git
synced 2026-06-05 12:50:23 +01:00
This PR expands the "Bootup and Shutdown" module’s systemd support with creation and management for services, timers, sockets, paths and targets. It also adds user-scoped systemd units, linger controls, status and log actions, tabbed unit listings by type, and contextual help for the new options. For user-scoped units, the implementation includes several safety guards because unit files live under user-controlled home directories: - User accounts are validated with system account data before any user-unit operation is attempted. - User unit names are restricted to known systemd unit suffixes and safe filename characters. - User unit files are limited to direct children of `~/.config/systemd/user`. - Symlinked `.config`, `.config/systemd`, and `.config/systemd/user` paths are rejected. - User unit reads, writes, directory creation, and deletes are performed after dropping privileges to the target Unix user. - File operations re-check paths close to the actual read/write/delete operation to reduce symlink race exposure. - User unit create failures roll back half-created files when daemon reload fails. - User-provided unit names, owners, paths, command output, and logs are HTML-escaped before display. - systemctl, journalctl, and loginctl command arguments are shell-quoted before execution. - User services omit `User=` and `Group=` directives because they already run under the selected user’s systemd manager. Together, all these changes will allow Webmin admin to manage both system and user systemd units while keeping user-controlled home-directory paths from becoming root-level file read/write/delete exploits. Implemented in response to these two issue requests https://github.com/webmin/webmin/issues/2733 and https://github.com/webmin/webmin/issues/2734
12 lines
698 B
HTML
12 lines
698 B
HTML
<header>Kill mode</header>
|
|
<p>Controls how systemd terminates processes belonging to the service. This
|
|
writes <tt>KillMode=</tt>.</p>
|
|
<p><tt>control-group</tt> is the default and safest choice: systemd stops the
|
|
main process and any remaining child processes in the service cgroup.
|
|
<tt>mixed</tt> sends the first termination signal only to the main process,
|
|
then later kills remaining cgroup processes if needed.</p>
|
|
<p><tt>process</tt> stops only the main process and can leave child processes
|
|
behind. <tt>none</tt> makes systemd run the stop command but not kill service
|
|
processes. Avoid <tt>process</tt> and <tt>none</tt> unless you know the
|
|
application manages its own process tree safely.</p>
|