Existem duas maneiras gerais de executar aplicativos graficamente como raiz (ou, mais geralmente, como outro usuário). Programas como gksu, gksudo, e kdesudosão interfaces gráficas para sudo. Por outro lado, pkexecé uma interface gráfica para o PolicyKit .
Ao executar manualmente programas como root (ou como outro usuário não root), quais são as vantagens / desvantagens (se houver) do uso pkexec, em comparação com o método mais tradicional de usar um sudofront - end?
Consulte também Por que o gksu não é mais instalado por padrão? (13.04 Raring)
Veja também: askubuntu.com/questions/252962/…
Relacionado (mas não duplicado): O sudo -i é menos seguro que o pkexec?
O PolicyKit é mais configurável, embora pkexecnão faça uso dessa configurabilidade. Além disso, pkexecmostre ao usuário o caminho completo do programa que será iniciado, para que o usuário tenha um pouco mais de certeza do que acontecerá. As chamadas 'políticas' do PolicyKit podem ser usadas para definir mais configurações avançadas. Por exemplo, se a senha deve ser lembrada.
Algo que recebi do pkexecmanual:
O ambiente em que o PROGRAM o executará será definido como um ambiente conhecido e seguro mínimo para evitar a injeção de código por meio de LD_LIBRARY_PATH ou de mecanismos semelhantes. Além disso, a variável de ambiente PKEXEC_UID é configurada para o ID do usuário do processo que chama o pkexec. Como resultado, o pkexec não permitirá que você execute, por exemplo, aplicativos X11 como outro usuário, pois a variável de ambiente $ DISPLAY não está definida.
Mais informações sobre políticas ou definições de ação do pkexecmanual:
Eu acho que deveria ter dito que existem dois para executar aplicativos como root com autenticação gráfica . Eu tinha assumido que havia uma maneira de usar pkexecpara executar aplicativos gráficos (eu nunca tinha feito isso ...). Sua resposta explica por que não existe (ou pelo menos por que um ambiente personalizado precisa ser especificado para fazê-lo).
Porém, tenho uma pergunta sobre sua resposta - quando um programa é executado como root pkexec, em que sentido os recursos ("permissões") podem ser restringidos? Eu concedo a um programa a capacidade de fazer qualquer coisa quando o executo sudoou com um sudofront - end ... em que sentido executar um programa como root pkexectambém não faz isso?
Entendo que o PolicyKit é usado para permitir que os programas executem apenas tipos específicos de ações. Mas isso pkexecfacilita, ou pkexecsimplesmente executa as coisas como raiz com habilidades irrestritas? O pkexectrecho manual incluído em sua resposta documenta como escrever regras para determinar quem pode executar um programa como root (ou como outro usuário não root), e não o que o programa pode fazer.
— Eliah Kagan 12/11/11
Quero aceitar sua resposta, pois fornece muitas informações boas. Mas acho que é muito enganador, porque diz que pkexecé mais configurável do que sudo, e dada a discussão que tivemos aqui nos comentários, isso não parece ser o caso. Você consideraria editar sua resposta para explicar sudoa configurabilidade e compará-la / contrastar com pkexeca ou editar sua resposta para dizer que a diferença é algo diferente de configurabilidade?
"simplesmente escreva" e depois um pedaço de XML. Eu precisava daquela risada.
Com o sudo, você pode definir políticas por usuário e por programa sobre o tempo para reter ou redefinir o ambiente de chamadas no contexto do sudo. A política env_reset é definida por padrão.
Você não pode executar aplicativos gráficos via pkexec sem configurá-lo explicitamente para isso. Como isso é apenas um resultado da redefinição do ambiente, isso também é obviamente verdadeiro para o sudo. Observe, no entanto, que nem o pkexec nem o sudo podem impedir que um aplicativo malévolo seja executado como root para recuperar todas as informações necessárias dos gerenciadores de exibição ou do arquivo de cookie X11 dos usuários. O último, ambos ou similar, pode até ser feito por aplicativos não raiz, dependendo das circunstâncias.
Sudo não requer listagens explícitas de usuários. É possível listar qualquer grupo de usuários ou mesmo definir uma permissão para todos os usuários em geral. A diretiva target_pw permite que esses usuários se autentiquem com as credenciais do usuário em cujo contexto desejam executar um aplicativo, ou seja, raiz. Além disso, o igualmente tradicional programa su (su / gtksu / kdesu) pode ser usado para fazer o mesmo sem configuração especial.
O sudo também permite que o usuário permaneça autenticado por um tempo especificado. A opção é denominada timeout, configurável globalmente, por usuário ou por aplicativo. A autenticação pode ser mantida por tty ou globalmente por usuário.
Enquanto o pkexec pode não validar os ARGUMENTOS transmitidos ao PROGRAMA, o sudo realmente possui esse recurso. Admitido, porém, você pode facilmente mexer com isso, e isso normalmente não é feito.
Você pode ajustar um pouco a forma como deseja que os programas sejam executados via pkexec: icon, texto a ser exibido, você pode até ter informações sobre localização e tudo mais. Dependendo das circunstâncias, isso pode ser realmente bacana. Triste, porém, que alguém sentisse a necessidade de reinventar a roda para esse recurso. Provavelmente isso seria algo para colocar nos wrappers gráficos do gtksudo / kdesu.
O Policykit é apenas uma estrutura de configuração centralizada. Infelizmente não é bonito. Os arquivos XML de PKs são muito mais complicados do que qualquer coisa que um aplicativo possa fornecer nativamente sem arquivos binários. E ninguém seria tão maluco em usar binário ... oh gconf ... deixa pra lá.
Fiz uma votação negativa porque este post não é realmente uma resposta, é uma crítica a outra resposta. Se você acha que geralmente é uma opção melhor usar sudo em vez de pkexec, diga-o, explicando seu ponto de vista com essas refutações.
Obrigado Paul, por muitas análises úteis aqui! Mas eu também concordo com Flimm. Você pode começar com uma resposta simples para a pergunta, conforme solicitado?
Não, pkexec pode executar a GUI sem configurar: askubuntu.com/a/332847/89385
Algumas coisas em que pkexecé diferente sudoe suas interfaces:
Você não pode executar aplicativos gráficos pkexecsem configurá-lo explicitamente para isso.
Você pode ajustar um pouco a forma como deseja que os programas sejam executados via pkexec: ícone, texto a ser exibido, lembrando-se da senha ou não, permitindo que seja executada graficamente e um pouco mais.
Qualquer um pode executar um superusuário "Executar como" (desde que possa se autenticar como tal), sendo necessário que sudovocê seja listado no sudoersarquivo como administrador .
gksudobloqueia o teclado, o mouse e o foco ao solicitar uma senha, pkexecnão. Em ambos os casos, as teclas são detectáveis .
Com pkexecvocê trabalha em um ambiente um pouco mais higienizado.
— organizar
Bom ponto (# 3) sobre como você pode se autenticar como outros usuários para executar programas como rootcom pkexec. É configurável, quais usuários podem usar pkexec(mesmo se souberem a senha de outro usuário que tenha permissão para fazê-lo)? sué configurável dessa maneira. Quando tento suoutro rootusuário não como guestem um sistema Onírico, ele diz que não tenho permissão para fazê-lo. (Em contraste, quando eu tento usar pkexeccomo guestem Oneiric ou preciso, fico com o que parece ser um erro de declaração, que logo eu possa relatar como um erro, como eu não deveria ter que mesmo que não é permitido.)
Mas sudoe suas interfaces também podem ser aprimoradas conforme descrito no ponto 2. Você pode executar um programa com gksuou gksudo exibir texto personalizado , parar de precisar das senhas de alguns usuários editando /etc/sudoers(com visudo) e alterar por quanto tempo elas são lembradas no sentido de alterar como quanto tempo leva para o sudo atingir o tempo limite (embora eu não tenha certeza de como fazer isso no Ubuntu, que está configurado para que as perguntas sobre a necessidade ou não de sudouma senha e quanto tempo até que ela precise ser novamente) sejam específicas do terminal )