我正在嵌入式 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
更改时区的能力。
我的问题
- 如何让特定的非 root 用户通过此 D-Bus 接口设置时区?
- 更一般地说,如何确定“权限被拒绝”错误的原因?
journalctl --follow
发生这种情况时什么也不显示。我应该去哪里寻找?
答案1
您不能dbus
仅通过配置来完成此操作,正如 Lennart 在下面的链接中所解释的那样...
您需要polkit
或者(按照评论中的建议)sudo timedatectl...
查看此错误报告: