Existe uma maneira de obter acesso de superusuário a partir de um aplicativo Qt

2

Estou criando um aplicativo que precisa configurar o iptables com o root. Já existe algum tipo de framework que pode ser usado para obter acesso de superusuário com um aplicativo ou eu terei que criar o meu próprio?

    
por leszakk 16.06.2013 / 10:01

2 respostas

0

  1. A maneira mais simples é iniciar seu aplicativo com sudo application name ou

  2. Citações de man pkexec

Para especificar que tipo de autorização é necessário para executar o programa / usr / bin / pk-example-frobnicate como outro usuário, simplesmente escreva um arquivo de definição de ação como este

           <?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>

e solte-o no diretório /usr/share/polkit-1/actions sob um nome adequado (por exemplo, correspondendo ao namespace da ação). Observe que, além de especificar o programa, a mensagem de autenticação, a descrição, o ícone e os padrões podem ser especificados. Observe que as ocorrências das strings $ (usuário), $ (programa) e $ (linha_de_comando) na mensagem serão substituídas, respectivamente, pelo usuário (no formulário "Nome real (nome de usuário)" ou apenas "nome de usuário" se não houver nome real do nome de usuário), o binário a ser executado (um        caminho totalmente qualificado, por ex. "/ usr / bin / pk-example-frobnicate") e a linha de comando, e. "pk-exemplo-frobnicate foo bar". Para        Por exemplo, para a ação definida acima, o seguinte diálogo de autenticação será mostrado:

       [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] |
           +----------------------------------------------------------+

Se o usuário estiver usando a localidade da_DK, a caixa de diálogo será parecida com esta:

       [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] |
           +----------------------------------------------------------+

Note que o pkexec não faz nenhuma validação dos ARGUMENTOS passados para o PROGRAM. No caso normal (onde a autenticação do administrador é        necessário cada vez que o pkexec é usado), isso não é um problema, pois se o usuário for um administrador, ele também pode executar o pkexec        bash para obter root.

No entanto, se uma ação for usada para a qual o usuário pode reter a autorização (ou se o usuário estiver implicitamente autorizado), como        pk-example-frobnicate acima, isso poderia ser um buraco de segurança. Portanto, como regra geral, programas para os quais o padrão exigido        a autorização é alterada, nunca deve implicitamente confiar na entrada do usuário (por exemplo, como qualquer outro programa suid bem escrito).

    
por thefourtheye 16.06.2013 / 10:46
0

Eu acho que seria preferível escrever um serviço de dbus de sistema fino para manipular apenas as coisas que requerem raiz. Em seguida, envie solicitações das partes do seu aplicativo que requerem raiz para o dito serviço dbus.

Eu não tenho uma amostra pronta para disparar, mas o Google faz .

As partes tediosas são:

Você está escrevendo um mini-aplicativo (o serviço dbus) e o próprio aplicativo.

Adiciona cerca de 2 arquivos ao seu pacote iirc. O arquivo de serviço em si e o arquivo de configuração para o serviço dbus .

Você deseja fornecer escalonamento de privilégios para todos os usuários do serviço em questão OU deseja incluir algum tipo de autenticação / autorização.

Tipo de problema, mas não de verdade.

A vantagem é:

Não há prompt. Apenas funciona.

    
por RobotHumans 16.06.2013 / 11:28