如何允许非 root 用户通过 d-bus 设置时区?

如何允许非 root 用户通过 d-bus 设置时区?

我正在嵌入式 Linux 设备上编写一个应用程序,将时区设置为非 root 用户。为了归结为本质,我想执行以下操作:

dbus-send --system --dest=org.freedesktop.timedate1 --print-reply /org/freedesktop/timedate1 \
        org.freedesktop.timedate1.SetTimezone  string:'America/New_York' boolean:false

但当我这样做时,我总是收到此错误:

Error org.freedesktop.DBus.Error.AccessDenied: Permission denied

其他信息

设备正在运行 SELinux残疾人并且 polkit 未安装或运行。

我有一个d-bus配置文件/etc/dbus-1/system.d/org.freedesktop.timedate1.conf如下:

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <allow own="org.freedesktop.timedate1"/>
    <allow send_destination="org.freedesktop.timedate1"/>
    <allow receive_sender="org.freedesktop.timedate1"/>
  </policy>
  <policy user="ceres">
    <allow own="org.freedesktop.timedate1"/>
    <allow send_destination="org.freedesktop.timedate1"/>
    <allow receive_sender="org.freedesktop.timedate1"/>
  </policy>

  <policy context="default">
    <allow send_destination="org.freedesktop.timedate1"/>
    <allow receive_sender="org.freedesktop.timedate1"/>
  </policy>
</busconfig>

我想授予用户ceres更改时区的能力。

我的问题

  1. 如何让特定的非 root 用户通过此 D-Bus 接口设置时区?
  2. 更一般地说,如何确定“权限被拒绝”错误的原因?
  3. journalctl --follow发生这种情况时什么也不显示。我应该去哪里寻找?

答案1

您不能dbus仅通过配置来完成此操作,正如 Lennart 在下面的链接中所解释的那样...
您需要polkit或者(按照评论中的建议)sudo timedatectl...
查看此错误报告:

dbus 方法:在没有 PolKit 的情况下编译时,回退到检查 Linux 功能

相关内容