systemd用户单元(--user)可以由其他用户(pupper / root)控制吗? [处于保留状态]

问题描述 投票:-2回答:1

“ unix:path =我需要一些可以由非特权用户控制的系统服务。为此,我想在〜/ .config / systemd / user /中使用systemd用户单元,并让用户通过systemctl --user start {service}等进行停止和启动。

问题:这些单位文件应由puppet创建。由于似乎没有能够处理用户单位文件的人偶模块(如果这是systemd的固有限制,为什么还要有一个?),我只是在人偶中为人偶文件创建一个“文件”资源。 >

至少,当单位文件已更改时,我需要need来通知系统。

是否可以从用户p中为在非特权用户下运行的服务发布daemon-reload?仅设置“ exec”资源并将“用户”属性设置为非特权用户的名称是行不通的。

编辑:澄清我的问题。

对我来说,问题似乎是带有exec参数的user资源似乎表现得完全像例如sudo -u myuser systemctl --user daemon-reload´. It fails to contact the correct dbus instance. To get this to work, you need to open a login shell for the user and set some environment variables with something like ´export XDG_RUNTIME_DIR="/run/user/$UID"´ and export DBUS_SESSION_BUS_ADDRESS =“ unix:path = $ {XDG_RUNTIME_DIR} / bus”` 。(来自Can I control a user systemd using 'systemctl --user' after sudo su - myuser?

我尝试使用exec参数在environment资源中执行此操作,但没有成功。

这是我尝试过的whar:

 # issuing "daemon-reload" for the changed user-units
  $runtime_dir="/run/user/$facts['myuser_userid']"
  exec{ '/bin/systemctl --user daemon-reload':
    user => 'myuser',
    environment => [
      "XDG_RUNTIME_DIR=${runtime_dir}",
      "DBUS_SESSION_BUS_ADDRESS="unix:path=${runtime_dir}/bus"
    ],
  }

$ facts [“ myuser_userid”]由外部事实提供。

“ unix:path =我需要一些可以由非特权用户控制的systemd服务。为此,我想在〜/ .config / systemd / user /中使用systemd用户单元,并让用户处理停止和...

linux puppet systemd
1个回答
0
投票

我发现了问题,与p的exec资源无关,但与p在更改单位文件之前执行了它有关。

我将这个问题标记为已解决。

© www.soinside.com 2019 - 2024. All rights reserved.