在 Oracle Linux 8 安装中,我尝试为 GNOME shell 实现一个桌面启动器,其中(图形)程序将作为不同(非 root)用户运行。但是,我想强制执行密码验证作为目标用户,即类似于gksu
in-w
模式的行为。
其想法是为授权操作员提供一种方便的方式,通过了解目标用户的密码来访问该功能,而未经授权的操作员则无法使用启动的程序。(1)
我知道这pkexec
是目前以不同用户身份启动程序的推荐方式。另一种选择beesu
,,似乎不适用于 Oracle Linux 8。
但是,当需要基于密码的身份验证时,波尔基特只允许
- 使用调用用户的密码进行身份验证(使用
auth_self
),或者 - 使用管理员用户的密码进行身份验证(使用
auth_admin
)。
我没有找到要求目标用户密码的选项,如
pkexec--用户目标用户/usr/bin/图形程序
命令。
我尝试过的
我的方法是尝试将其定义targetuser
为管理用户对于这个单独的用例。我不想通过部分中的设置将全局添加targetuser
到管理员列表中AdminIdentities
[Configuration]
波尔基特当地政府。所以,
- 我通过设置 定义了一个与
/usr/share/polkit-1/actions/
程序调用相匹配的操作pkexec
并要求管理员用户身份验证通过<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/graphical_program</annotate>
<defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_admin</allow_active> </defaults>
- 我定义了一个
AdminRule
in/usr/share/polkit-1/rules.d/
,声明polkit.addAdminRule(function(action, subject) { if (action.id == "org.my.rule.for.graphical_program") {return ["unix-user:targetuser"];} } );
targetuser
(仅)当org.my.rule.for.graphical_program
询问哪个用户实际上是管理员用户时, 这应该返回管理员用户。
现在,运行时pkexec --user targetuser /usr/bin/graphical_program
我可以看到操作正确匹配(显示的消息正是我在<message> ... </message>
操作文件的节点中设置的内容),但AdminRule
似乎没有生效 - 密码对话框仍然需要根密码 - 尽管系统日志表明该规则(至少)已正确加载和编译,因此它不应该是语法问题。
有谁知道如何(如果有的话)使用这种设置来工作波尔基特,或者 Oracle Linux 8(或类似的 RHEL 8 衍生产品)上有哪些替代图形身份验证机制可用?
(1) 请注意,在此设置中,操作员不能使用个人用户帐户,而是使用具有不同权限级别的通用本地用户帐户。任何需要该权限的人都会获得该特定用户帐户的密码。这是我无法控制的设计决策。