Existe um gksudo neutro em desktop?

17

Existem várias ferramentas para vários desktops que visam executar um aplicativo gráfico como root. gksudo, kdesudo, empower, Etc ...

Mas e se eu estiver escrevendo um script que possa ser usado em qualquer desktop Linux? Existe xdg-sudoalgum tipo ..? Um padrão para obter acesso ao sudo em um ambiente de desktop?

Oli
fonte

Respostas:

16

Seguindo a sugestão do @Tachyons, pesquisei MUITO sobre pkexece é incrível !

  • Faz parte do PolicyKit , um pacote amplamente usado.
  • Hospedado e patrocinado por freedesktop.org
  • Padrão no Gnome , Unity , MATE , Canela , KDE , LXDE e XFCE e possivelmente outros
  • Funciona via D-Bus, por isso é completamente neutro para a área de trabalho, com um protocolo bem definido.
  • Em muitos DEs, é usado em vários serviços, como tela de login, desligamento / reinicialização, gerenciamento de disco (udisks / automount) e assim por diante.

Então, sim, ele atende a todos os requisitos, e acho que é a coisa mais próxima que um "gksudo universal" pode ser.

Dito isto, pkexecé o front-end da linha de comando para o PolicyKit. Existem 2 modos básicos de operação:

  • Basta executá-lo como faria sudoe você obterá um bom prompt da GUI:

    $ pkexec rm -rf /

prompt da GUI do pkexec

  • Ou crie um arquivo de autorização do PolicyKit para o seu aplicativo, solte-o /usr/share/polkit-1/rules.de ele permitirá uma grande quantidade de opções relacionadas à segurança e à personalização, por exemplo, acesso raiz a determinadas ações, sem necessidade de senha para outras pessoas, acesso limitado a determinados caminhos , etc. Você pode ajustar suas configurações com granularidade incrível.
MestreLion
fonte
6

Uma maneira mais geral seria escrever um "programa auxiliar". Esse programa solicitaria ao usuário uma senha; se você tiver certeza de que, digamos, o Zenity, está instalado, poderá usá-lo; caso contrário, precisará escrever o programa auxiliar em Python ou qualquer outra coisa que possa interagir com a GUI.

Leia o sudomanual para as opções -A("askpass") e -S(stdin).

E lembre-se de que, quando você executa sudoo script, precisa da -Hopção (home) para simular gksudo.

Esse método funciona bem, mas você precisa testar o programa auxiliar completamente para garantir que ele esteja livre de erros.

Paddy Landau
fonte
1
Você também precisa lidar com a passagem de token xauth no seu programa - o que não é trivial.
symcbean
4

Não, não existe uma maneira padrão de obter privilégios de root (ou de qualquer outro usuário).

Se você quiser ser compatível com o máximo de sistemas possível, não assuma nenhuma maneira, mas informe ao usuário que ele / ele deve executar seu script como um usuário específico. Cabe ao usuário / administrador configurar o sistema para que seu script seja executado da maneira correta.

Seria bom sugerir como usar os sistemas de autenticação mais comuns, como su, sudo e ConsoleKit.

Florian Diesch
fonte
É verdade no início de 2009, mas felizmente agora polkit(o PolicyKit) é amplamente difundido para ser considerado um padrão.
MestreLion