Como configurar o pkexec para não pedir senha?

10

Eu tenho um aplicativo GUI que precisa chamar um daemon (escrito em Python) com privilégios de superusuário. Eu gostaria de fazer isso sem solicitar ao usuário uma senha.

Como o daemon é um script, não consigo definir o bit SUID diretamente. Eu poderia escrever um wrapper C para isso, mas eu prefiro não reinventar a roda, especialmente quando um erro da minha parte poderia levar à segurança do sistema ser seriamente comprometida.

O que eu normalmente faria nessa situação é adicionar uma linha em /etc/sudoers que permita que os usuários executem o daemon como root sem uma senha, usando a diretiva NOPASSWD. Isso funciona bem na linha de comando. No entanto, quando faço isso a partir da GUI, aparece uma caixa de diálogo pkexec solicitando a senha do usuário. Parece que no Ubuntu, as chamadas para sudo da GUI são de alguma forma interceptadas por pkexec .

Existe uma maneira limpa de contornar isso? Eu realmente prefiro não ter que lidar com os aborrecimentos de um script setuid.

    
por Chinmay Kanchi 29.11.2013 / 12:21

1 resposta

13

É impróprio dizer que: "Parece que no Ubuntu, as chamadas para sudo da GUI são de alguma forma interceptadas por pkexec " . pkexec não tem muito em comum com sudo . Em contraste com sudo , pkexec não concede permissão raiz a um processo inteiro, mas permite um nível mais refinado de controle da política centralizada do sistema.

Agora, se você deseja executar um aplicativo de GUI sem ser solicitado por uma senha por pkexec , isso não é difícil de ser feito. Tomemos por exemplo GParted . Ao abri-lo, você verá a seguinte janela de diálogo perguntando por uma senha:

Clique em Detalhes e a janela de diálogo ficará parecida com:

A partir daqui, tudo o que você precisa fazer é abrir o arquivo /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy usando, por exemplo, o seguinte comando:

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

e altere as seguintes linhas:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

com os seguintes:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Salve o arquivo e feche-o. Em seguida, quando você abrir o GParted , não será mais solicitada uma senha.

    
por Radu Rădeanu 10.12.2013 / 10:29