Qual é a maneira correta de impedir que usuários não-root enviem desligamentos ou reinicializações?

7

Digamos que você tenha configurado um sistema com várias sedes para uso em uma escola ou biblioteca, permitindo que o GDM inicie várias sessões X para serem executadas simultaneamente com diferentes usuários / teclados / monitores.

Por padrão no Debian / Ubuntu no Gnome, você não precisa ser root para desligar ou reiniciar. Mas isso significa que qualquer usuário pode escolher "reiniciar" ou "desligar" e lançar os outros três usuários.

Você bloqueou o acesso físico ao servidor para que ele não possa simplesmente pressionar os botões de energia ou de reinicialização.

Qual é a maneira correta de desativar a funcionalidade "shutdown" e "reboot" que é exposta a usuários regulares através do GDM / Gnome / qualquer gerenciador de janelas que você esteja usando?

    
por thomasrutter 07.11.2011 / 08:03

2 respostas

2

Primeiro, observe que a função de desligamento do ConsoleKit considera "usuário único" e "vários usuários" como duas situações diferentes - desligar o sistema sempre requer autenticação de administrador se outros usuários estiverem logados.

Todas essas ações são gerenciadas pelo PolicyKit. Se você quiser ajustar as políticas, você pode fazê-lo conforme descrito em polkit (8) - /etc/polkit-1/rules.d/20-disallow-shutdown.rules :

polkit.addRule(function(action, subject) {
    if ((action.id == "org.freedesktop.consolekit.system.stop" ||
         action.id == "org.freedesktop.consolekit.system.restart") &&
        subject.isInGroup("users")) {
            return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
    }
});

O PolicyKit 0.105 e versões anteriores documentam isso em pklocalauthority (8) - /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla :

[Disallow shutdown]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=no
ResultActive=auth_admin

Os Action s estão listados no ConsoleKit arquivo de política ou executando pkaction .

    
por 07.11.2011 / 09:10
4
  • A pklocalauthority é reprovada
  • Você precisa de systemd com logind e polkit.

Ações disponíveis

pkaction
# or /usr/share/polkit-1/actions/

Você deve olhar para /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Adicionar regra

Primeiramente, comece a monitorar as mensagens do sistema, para que possamos ver se nossa nova regra funciona:

journalctl -f

Em seguida, crie o arquivo /etc/polkit-1/rules.d/60-noreboot_norestart.rules (em javascript).

Neste arquivo, adicionamos lógica para verificar ações e permitir users em power group ou exigir su authorization:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.reboot" ||
        action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions") {
        if (subject.isInGroup("power")) {
            return polkit.Result.YES;
        } else {
            return polkit.Result.AUTH_ADMIN;
        }
    }
});

A regra deve ser carregada e deve funcionar. Referências abaixo.

  1. link
  2. link
  3. link
  4. link
por 13.02.2014 / 01:17