非 root 用户在“su”模式下替代“gksu”

非 root 用户在“su”模式下替代“gksu”

在 Oracle Linux 8 安装中,我尝试为 GNOME shell 实现一个桌面启动器,其中(图形)程序将作为不同(非 root)用户运行。但是,我想强制执行密码验证作为目标用户,即类似于gksuin-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>
    
  • 我定义了一个AdminRulein /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) 请注意,在此设置中,操作员不能使用个人用户帐户,而是使用具有不同权限级别的通用本地用户帐户。任何需要该权限的人都会获得该特定用户帐户的密码。这是我无法控制的设计决策。

相关内容