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 posso definir o bit SUID diretamente. Eu poderia escrever um invólucro em C para isso, mas prefiro não reinventar a roda, especialmente quando um erro da minha parte poderia levar à segurança do sistema seriamente comprometida.
O que eu normalmente faria nessa situação é adicionar uma linha /etc/sudoers
que permita aos usuários executar 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, pkexec
aparece uma caixa de diálogo solicitando a senha do usuário. Parece que no Ubuntu, as chamadas sudo
da GUI estão sendo interceptadas de alguma forma pkexec
.
Existe uma maneira limpa de contornar isso? Eu realmente prefiro não ter que lidar com os aborrecimentos de um script setuid.
fonte
sudo somecommand
, a caixa de diálogo exibida é umapkexec
caixa de diálogo com senha, independentemente de haver uma política de sudoers que permita a execução do programa.Respostas:
É impróprio dizer que: "Parece que, no Ubuntu, as chamadas
sudo
da GUI estão sendo interceptadas de alguma formapkexec
" .pkexec
não tem muito em comum comsudo
. Em contraste comsudo
,pkexec
não concede permissão de root a um processo inteiro, mas permite um nível mais fino de controle da diretiva do sistema centralizado.Agora, se você deseja executar um aplicativo GUI sem ser solicitado por uma senha
pkexec
, isso não é difícil de ser feito. Vamos pegar, por exemplo, GParted . Ao abri-lo, você verá a seguinte janela de diálogo solicitando uma senha:Clique em Detalhes e a janela de diálogo terá a seguinte aparência:
A partir daqui, tudo o que você precisa fazer é abrir o arquivo usando, por exemplo, o seguinte comando:
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
e altere as seguintes linhas:
com os seguintes:
Salve o arquivo e feche-o. Em seguida, quando você abrir o GParted , não será mais solicitada uma senha.
fonte
gparted
. Ao executar a partir do terminalsudo gparted
, você executa o/usr/sbin/gparted
arquivo com privilégios de root. Ao iniciar agparted
partir da GUI, você começa de fatogparted-pkexec
(é possível verificar esse/usr/share/applications/gparted.desktop
arquivo interno ),/usr/bin/gparted-pkexec
que é um script de shell cujo objetivo é executar o seguinte comando: opkexec "/usr/sbin/gparted"
qual é equivalente apkexec gparted
. Então, nada a ver comsudo
. E este comando você deve usar no terminal, nãosudo gparted
.sudo
deve ser usado apenas para aplicativos shell, não aplicativos GUI. Vejaman sudo
eman pkexec
neste sentido.