pkexec
não é instalado por padrão, ao Debian
contrário runuser
do que é.
Até agora eu tenho usado, pkexec
mas descobri que também existe runuser
, e desde então runuser
parece ser mais avançado (olhando as opções na man
entrada que não entendo completamente e não usei o comando ainda), então isso me fez pensar se existe existe qualquer benefício para instalar pkexec
já runuser
está lá.
Quais são os prós e os contras runuser
em comparação com pkexec
?
As duas ferramentas são diferentes a ponto de não serem realmente intercambiáveis para a maioria dos casos de uso, portanto, quase não faz sentido ter uma comparação 'vs' entre elas. (Faria mais sentido comparar pkexec vs sudo, ou su vs runuser, ou pkexec vs run0.)
Em termos de código, runuser é praticamente uma cópia do su do util-linux, apenas ligeiramente adaptado para ser mais adequado para uso em scripts que geralmente são executados como root, mas precisam chamar algum comando específico como um usuário diferente. (Por exemplo, runuser usa um conjunto diferente de configurações de PAM do su, permitindo que ele fique isento de coisas como systemd-logind, que geralmente são desejadas para su interativo, mas seriam extremamente contraproducentes para su com script.)
A diferença mais visível entre seus dois comandos é que pkexec geralmente é instalado como "setuid root" (assim como sudo ou su), o que significa que pode funcionar quando executado a partir de uma conta de usuário normal - mas runuser geralmente não é instalado dessa forma, e na verdade recusa-se especificamente a funcionar quando executado por um usuário não root.
Isso essencialmente coloca runuser em oposição a pkexec, já que este último se destina quase exclusivamente a aumentar privilégios para root, enquanto runuser só é capaz de reduzi-los a partir do root.
De maneira semelhante, pkexec é projetado quase exclusivamente para uso interativo em desktop (com o PolicyKit solicitando autenticação de administrador ao usuário), enquanto runuser é projetado para uso em lote pelo root (que estaria isento de tal autenticação) e, portanto, nem mesmo tem o capacidade de solicitar isso.
A única sobreposição entre eles é que é possível que o root chame
pkexec --user XYZ
o qual mudará para aquele usuário sem fazer as verificações do PolicyKit (embora ainda entre em contato com o polkitd), caso em que quase não tem vantagens sobre o runuser.