繁琐的部分是:

繁琐的部分是:

我正在设计一款需要使用 root 配置 iptables 的应用程序。是否已有某种框架可用于获取应用程序的超级用户访问权限,还是我必须自己设计?

答案1

  1. 最简单的方式,使用sudo application name 或启动您的应用程序

  2. 引自man pkexec

要指定以另一个用户身份执行程序 /usr/bin/pk-example-frobnicate 所需的授权类型,只需编写一个如下操作定义文件

           <?xml version="1.0" encoding="UTF-8"?>
           <!DOCTYPE policyconfig PUBLIC
            "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
            "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
           <policyconfig>

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_
line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program)
, command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>
           </policyconfig>

并将其放入/usr/share/polkit-1/actions目录中合适的名称下(例如,与操作的命名空间匹配)。请注意,除了指定程序之外,还可以指定身份验证消息、描述、图标和默认值。请注意,消息中出现的字符串 $(user)、$(program) 和 $(command_line) 将分别替换为用户(格式为“真实姓名(用户名)”或如果用户名没有真实姓名,则仅替换为“用户名”)、要执行的二进制文件(完全限定路径,例如“/usr/bin/pk-example-frobnicate”)和命令行,例如“pk-example-frobnicate foo bar”。例如,对于上面定义的操作,将显示以下身份验证对话框:

       [IMAGE][2]

           +----------------------------------------------------------+
           |                     Authenticate                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Authentication is required to run the PolicyKit |
           |          example program Frobnicate                      |
           |                                                          |
           |          An application is attempting to perform an      |
           |          action that requires privileges. Authentication |
           |          is required to perform this action.             |
           |                                                          |
           |          Password: [__________________________________]  |
           |                                                          |
           | [V] Details:                                             |
           |  Command: /usr/bin/pk-example-frobnicate                 |
           |  Run As:  Super User (root)                              |
           |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
           |  Vendor:  Examples for the PolicyKit Project             |
           |                                                          |
           |                                  [Cancel] [Authenticate] |
           +----------------------------------------------------------+

如果用户使用 da_DK 区域设置,则对话框如下所示:

       [IMAGE][3]

           +----------------------------------------------------------+
           |                     Autorisering                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Autorisering er påkrævet for at afvikle         |
           |          PolicyKit eksemplet Frobnicate                  |
           |                                                          |
           |          Et program forsøger at udføre en handling der   |
           |          kræver privilegier. Autorisering er påkrævet.   |
           |                                                          |
           |          Kodeord: [___________________________________]  |
           |                                                          |
           | [V] Detaljer:                                            |
           |  Bruger:   Super User (root)                             |
           |  Program:  /usr/bin/pk-example-frobnicate                |
           |  Handling: org.fd.pk.example.pkexec.run-frobnicate       |
           |  Vendor:   Examples for the PolicyKit Project            |
           |                                                          |
           |                                [Annullér] [Autorisering] |
           +----------------------------------------------------------+

请注意,pkexec 不会验证传递给 PROGRAM 的参数。在正常情况下(每次使用 pkexec 时都需要管理员身份验证),这不是问题,因为如果用户是管理员,他可能只需运行 pkexec bash 即可获得 root 权限。

但是,如果使用用户可以保留授权的操作(或者如果用户被隐式授权),例如上面的 pk-example-frobnicate,则这可能是一个安全漏洞。因此,根据经验,默认所需授权已更改的程序永远不应隐式信任用户输入(例如,像任何其他编写良好的 suid 程序一样)。

答案2

我认为最好编写一个精简的系统 dbus 服务来处理需要 root 权限的事情。然后将需要 root 权限的应用程序部分的请求发送到该 dbus 服务。

我还没有准备好样品,但谷歌确实

繁琐的部分是:

您正在编写一个迷你应用程序(dbus 服务)和应用程序本身。

它会将大约 2 个文件添加到您的软件包中。服务文件本身和dbus 服务的配置文件

您可能希望为该服务的所有用户提供权限升级,或者您可能希望包含某种身份验证/授权。

这有点儿像问题,但事实并非如此。

好处是:

无需提示。它就能正常工作。

相关内容