O caso dos usuários normais que podem desligar o sistema

...via systemctl poweroff e tal.

Quando o polkit está instalado, alguns componentes do systemd consultam-o para liberar ou não para usuários normais a execução de diversas tarefas (se não estiver presente, ações que requeiram root não são permitidas). O que define o resultado retornado pelo polkit é a sua política.

O systemd instala políticas padrão nos seguintes arquivos (considerando a versão 219 do CentOS 7):

/usr/share/polkit-1/actions/org.freedesktop.hostname1.policy
/usr/share/polkit-1/actions/org.freedesktop.import1.policy
/usr/share/polkit-1/actions/org.freedesktop.locale1.policy
/usr/share/polkit-1/actions/org.freedesktop.login1.policy
/usr/share/polkit-1/actions/org.freedesktop.machine1.policy
/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
/usr/share/polkit-1/actions/org.freedesktop.timedate1.policy

Cada um contendo a configuração relativa ao componente descrito no nome do arquivo.

Os arquivos de /usr não devem ser editados, pois não sobreviverão a futuras atualizações do pacote. Podemos editar a política localmente em /etc/polkit-1/rules.d.

A seguir, configuração que exige autenticação root (polkit.Result.AUTH_ADMIN) para suspender, hibernar, reiniciar e desligar. Se você quiser que seja solicitada autenticação do próprio usuário, use polkit.Result.AUTH_SELF. Ou desative por completo com polkit.Result.NO. O padrão é polkit.Result.YES para estas ações. Note que a configuração será aplicada tanto à linha de comando quanto ao botão "desligar" do ambiente desktop.

/etc/polkit-1/rules.d/10-restringe-logind.rules

polkit.addRule(function(action, subject) {
    if (action.id.indexOf("org.freedesktop.login1.suspend") == 0 ||
        action.id.indexOf("org.freedesktop.login1.hibernate") == 0 ||
        action.id.indexOf("org.freedesktop.login1.reboot") == 0 ||
        action.id.indexOf("org.freedesktop.login1.power-off") == 0) {
            return polkit.Result.AUTH_ADMIN;
    }
});

Essa sintaxe usando JavaScript é suportada desde a versão 0.106 do polkit.

É importante que os usuários que você quiser restringir não façam parte de grupos considerados administradores, como wheel no Fedora/CentOS e sudo no Debian/Ubuntu. Pois administradores podem fornecer sua própria senha para validar a autenticação.

Comentários