Есть ли способ получить доступ суперпользователя из приложения Qt

Я разрабатываю приложение, которое должно настроить iptables с правами root. Есть ли уже какая-то платформа, которую можно использовать для получения суперпользовательского доступа с приложением, или мне придется создавать свой собственный?

2
задан 16 June 2013 в 21:38

2 ответа

Я думаю, что было бы предпочтительнее написать тонкий системный сервис dbus, который бы обрабатывал только те вещи, которые требуют root. Затем отправьте запросы из частей вашего приложения, которым требуется root, в указанную службу dbus.

У меня нет готового к запуску образца, , но у Google есть .

Утомительными частями являются:

Вы пишете мини-приложение (сервис dbus) и само приложение.

Добавляет около 2 файлов в ваш пакет iirc. Сам файл службы и файл конфигурации для службы dbus .

Вы можете либо предоставить повышение привилегий всем пользователям для указанной службы, либо включить аутентификацию / авторизацию.

1110 Вроде проблема, но не совсем.

Преимущество:

Нет подсказки. Это просто работает.

0
ответ дан 16 June 2013 в 21:38
  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) в сообщении будут заменены соответственно на пользователя (в форме «Настоящее имя (username)» или просто на «username», если нет реальное имя для имени пользователя), исполняемый файл (полный путь, например "/ 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).

0
ответ дан 16 June 2013 в 21:38

Другие вопросы по тегам:

Похожие вопросы: