Como configurar o pkexec?

32

Lendo estas perguntas e respostas:

me trouxe outro que criará problemas para novos usuários desse comando:

  • Como configurar pkexecpara facilitar o uso?

Por exemplo, ao fazer o seguinte:

(Abrindo um arquivo no terminal)

pkexec nano /etc/mysql/my.cnf  

(Abrindo um arquivo na GUI)

pkexec gedit /etc/mysql/my.cnf  

O último obtém o seguinte erro:

 pkexec must be setuid root

Agora, isso me trouxe as seguintes perguntas:

  1. Como configurar pkexecpara evitar isso? Semelhante a como sudo/ gksuse comporta ao fazer a mesma coisa (eles apenas pedem a senha).

  2. Se aplicável, como dizer a ela para não solicitar uma senha após a primeira vez que a aplicar a um comando (ou incluir o primeiro comando, se configurável)?

  3. Onde salvar o arquivo de configuração, se ainda não existir?

  4. Existe um aplicativo GUI para configurar o pkexecuso (Kit de Políticas)?

Luis Alvarado
fonte
1
No leiu do Ubuntu, cuidando dos negócios nesse sentido na versão 13.04, é isso que faço para o gedit & nautilus. Funciona bem aqui, mas não será publicado como resposta, pois é apenas a minha solução até que o Ubuntu cuide. ubuntuforums.org/…
doug
Hmm, não é possível adicionar um comentário - portanto, é necessário recorrer a uma resposta ... Usando: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Significa que o gui de login retorna o caminho do env em vez do comando finalmente sendo executado. Existe uma maneira de organizar o uso de "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" para que o pkexec gui retorne o caminho para o comando que está sendo executado? Veja a foto aqui: polkit auth dialog box

Respostas:

39

Como configurar pkexecpara evitar erros ao executar aplicativos GUI?

Eu encontrei duas maneiras possíveis:

  1. Como você pode ver, usando o seguinte:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    não receberá nenhum erro. E isso é normal, porque man pkexecé muito claro neste assunto:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    Como resultado, você pode criar um alias ( permanente ) (esta é a maneira mais simples):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Ou, (novamente) como man pkexecdiz:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    você pode criar um novo arquivo de política /usr/share/polkit-1/actionsnomeado com.ubuntu.pkexec.gedit.policycom o seguinte código xml dentro do qual o mais importante é definir org.freedesktop.policykit.exec.allow_guium valor não vazio:

    <?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>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Como dizer a ele para não solicitar uma senha após a primeira vez que a aplicar a um comando?

Para estes três tags Ambiente: allow_any, allow_inactivee allow_activea partir do arquivo de política, as seguintes opções estão disponíveis:

  • não : o usuário não está autorizado a executar a ação. Portanto, não há necessidade de autenticação.
  • sim : o usuário está autorizado a executar a ação sem nenhuma autenticação.
  • auth_self : a autenticação é necessária, mas o usuário não precisa ser um usuário administrativo.
  • auth_admin : é necessária autenticação como usuário administrativo.
  • auth_self_keep : O mesmo que auth_self , mas sudoa autorização dura alguns minutos.
  • auth_admin_keep : O mesmo que auth_admin , mas, como sudo, a autorização dura alguns minutos.

     Fonte: Polkit - Estrutura - Ações

Portanto, se você usar a opção auth_admin_keep (ou, conforme aplicável, auth_self_keep ), pkexecnão solicitará uma senha novamente por algum tempo (por padrão, esse tempo é definido para 5 minutos, conforme eu verifiquei). A desvantagem aqui é que isso só é aplicável a um comando / aplicativo igual - e válido para todos os usuários (a menos que seja anulado na configuração posterior).

Onde salvar o arquivo de configuração, se ainda não existir?

Arquivos de configuração ou definições de polkit podem ser divididos em dois tipos:

  • As ações são definidas nos arquivos .policy XML localizados em /usr/share/polkit-1/actions. Cada ação possui um conjunto de permissões padrão anexadas (por exemplo, você precisa se identificar como administrador para usar a ação GParted). Os padrões podem ser anulados, mas editar os arquivos de ações NÃO é a maneira correta. O nome desse arquivo de políticas deve ter este formato:

    com.ubuntu.pkexec.app_name.policy
  • As regras de autorização são definidas nos arquivos .rules do JavaScript. Eles são encontrados em dois locais: pacotes de terceiros podem ser usados /usr/share/polkit-1/rules.d(embora poucos, se houver) e /etc/polkit-1/rules.dsão para configuração local. Os arquivos .rules designam um subconjunto de usuários, referem-se a uma (ou mais) das ações especificadas nos arquivos de ações e determinam com quais restrições essas ações podem ser executadas por esse / esses usuários. Como exemplo, um arquivo de regras pode anular o requisito padrão para todos os usuários se autenticarem como administrador ao usar o GParted, determinando que um usuário específico não precisa. Ou não tem permissão para usar o GParted.

     Fonte: Polkit - Estrutura

Existe um aplicativo GUI para configurar o pkexecuso?

Pelo que sei, até agora (18.01.2014) não existe algo parecido com isto. Se no futuro eu encontrar algo, não esquecerei de atualizar também esta resposta.

Radu Rădeanu
fonte
4
que resposta linda !! Muito obrigado Agora entendo por que não consegui executar doublecmdcom o ROOT PRIVELEGES, pois precisava exportar ambientes com DISPLAY & XAUTHORITY!! Apenas pequenas perguntas: existe alguma diferença na política de redação ou na execução de um programa com comando pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdo tempo todo?
Ilia Rostovtsev 30/12/2013
@IliaRostovtsev isso que eu estou pensando, se pkexectornará tão inseguro como gksudose fosse executado por esse apelido? pode ser, em vez de um apelido, poderia ser um script com privilégios de root, poderia ser mais seguro?
Poder de Aquário
@AquariusPower De que maneira você vê que isso pode se tornar inseguro? Você poderia tentar, é claro, mas não tenho certeza. O problema surge quando você precisa usar a GUI (X Server) que é executada em 'você' e outro programa da GUI que precisa ser executado como root. Brinque e envie mensagens, por favor, caso encontre alguma coisa.
Ilia Rostovtsev
@ radu-rădeanu No Utopic auth_admin_keepparece não funcionar. Se eu iniciar o sináptico a partir da GUI (que é equivalente a pkexec synaptic), ele solicitará a senha para cada vez. Alguma idéia do porquê?
Khurshid Alam
0

Além da resposta de Radu: eu não usaria o psexec, mas gksudo .

Por quê? Você não precisa reescrever seu script.

Eu uso a seguinte configuração:

  • abrir um terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (crie um novo arquivo chamado "gksudo"
  • escreva o seguinte conteúdo:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (não esqueça o $@no final. Isso é para redirecionar todos os parâmetros)

  • salvar e sair

  • torne o arquivo executável: chmod 755 gksudo
  • Agora você deve ter um comando gksudo totalmente funcional disponível em seu sistema - permanentemente.

Por motivos de documentação, escreverei o que tentei e não deu certo:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • Não era permanente e permaneceu apenas em um único terminal
  • adicionando o alias ao ~/.bash_aliases
    • Funciona se você abrir um terminal pela primeira vez. Não funciona, se você clicar duas vezes em scripts
  • Crie um link para pkexec com os parâmetros ( ln -s pkexec [...])
    • Após uma rápida pesquisa no Google, parece que o Linux não suporta parâmetros nos links
TheTrowser
fonte