Como configurar o pkexec?

27

Lendo estas perguntas e respostas:

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

  • Como configurar o pkexec para 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 recebe o seguinte erro:

 pkexec must be setuid root

Agora, isso me trouxe as seguintes perguntas:

  1. Como configurar o pkexec para evitar isso? Semelhante a como sudo / gksu se comportam ao fazer a mesma coisa (eles apenas solicitam a senha).

  2. Se aplicável, como dizer a ele para não pedir uma senha depois de aplicá-la pela primeira vez 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 pkexec usage (Policy Kit)?

por Luis Alvarado 29.04.2013 / 14:43

1 resposta

33

Como configurar o pkexec para evitar erros ao executar aplicações GUI?

Eu encontrei duas maneiras possíveis:

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

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    não receberá nenhum erro. E isso é normal porque man pkexec é muito claro nessa questão:

           [...] 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 ) a maneira mais simples):

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

           [...] 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 em /usr/share/polkit-1/actions chamado com.ubuntu.pkexec.gedit.policy com o seguinte código xml, onde o mais importante é definir org.freedesktop.policykit.exec.allow_gui como um 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 dizê-lo para não pedir uma senha após a primeira vez que aplicá-lo a um comando?

Para essas três tags de configuração: allow_any , allow_inactive e allow_active do arquivo de políticas, as seguintes opções estão disponíveis:

  • no : o usuário não está autorizado a executar a ação. Portanto, não há necessidade de autenticação.
  • yes : o usuário está autorizado a executar a ação sem qualquer autenticação.
  • auth_self : A autenticação é necessária, mas o usuário não precisa ser um usuário administrativo.
  • auth_admin : a autenticação como um usuário administrativo é necessária.
  • auth_self_keep : o mesmo que auth_self , mas, como sudo , a 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 ), pkexec não solicitará uma senha novamente por algum tempo (por padrão, o tempo está definido para 5 minutos, como eu verifiquei). A desvantagem aqui é que isso é aplicável apenas para um - o mesmo - comando / aplicativo 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 em arquivos XML .policy localizados em /usr/share/polkit-1/actions . Cada ação tem um conjunto de permissões padrão associadas a ela (por exemplo, você precisa se identificar como administrador para usar a ação do GParted). Os padrões podem ser anulados, mas a edição dos arquivos de ações NÃO é o caminho correto. O nome desse arquivo de políticas deve ter este formato:

    com.ubuntu.pkexec.app_name.policy
  • Regras de autorização são definidas em arquivos .rules de JavaScript. Eles são encontrados em dois locais: pacotes de terceiros podem usar /usr/share/polkit-1/rules.d (embora poucos façam algum) e /etc/polkit-1/rules.d é 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 tomadas por esse (s) usuário (s). Por exemplo, um arquivo de regras pode anular o requisito padrão para que todos os usuários se autentiquem como administradores ao usar o GParted, determinando que alguns usuários específicos não precisem. Ou não é permitido usar o GParted.

Fonte: Polkit - Estrutura

Existe um aplicativo GUI para configurar pkexec de uso?

Pelo que sei, até agora (18.01.2014) não existe algo assim. Se no futuro eu encontrar algo, não vou esquecer de atualizar essa resposta também.

    
por Radu Rădeanu 15.08.2013 / 09:44