GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la forma correcta de evitar que los usuarios no root emitan apagados o reinicios?

  • pklocalauthority está en desuso
  • Necesita systemd con logind y polkit.

Acciones disponibles

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

Deberías mirar /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Añadir regla

Primero comience a monitorear los mensajes del sistema, para que podamos ver si nuestra nueva regla funciona:

journalctl -f

Luego crea el archivo /etc/polkit-1/rules.d/60-noreboot_norestart.rules (en javascript).

En este archivo agregamos lógica para verificar acciones y permitir users en power grupo o requiere su autorización:

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;
        }
    }
});

La regla debe cargarse y debería funcionar. Referencias a continuación.

  1. https://lists.fedoraproject.org/pipermail/users/2013-September/440457.html
  2. https://wiki.archlinux.org/index.php/Polkit#Authorization_rules
  3. http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
  4. https://bbs.archlinux.org/viewtopic.php?pid=1335204#p1335204

Primero, tenga en cuenta que la función de apagado de ConsoleKit considera "usuario único" y "usuarios múltiples" como dos situaciones diferentes:apagar el sistema siempre requiere la autenticación del administrador si otros usuarios han iniciado sesión.

Todas estas acciones son administradas por PolicyKit. Si desea ajustar las políticas, puede hacerlo como se describe en 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;
    }
});

PolicyKit 0.105 y versiones anteriores documentan esto en 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

El Action Los correos electrónicos se enumeran en el archivo de políticas de ConsoleKit o ejecutando pkaction .


Linux
  1. ¿Cómo evitar que `ls` ordene la salida?

  2. ¿Cómo evitar que los usuarios accedan al directorio raíz?

  3. ¿Cuál es la forma más sencilla de SSH usando Python?

  4. ¿Cuál es la forma correcta de usar inotify?

  5. ¿Cuál es la mejor manera de aprender SELinux?

¿Cuál es la forma más fácil de liberar espacio en un disco duro?

¿Cuál es la forma más fácil de visualizar datos de stdout como un gráfico?

¿Cuál es la forma correcta de ver la velocidad de su CPU en Linux?

¿Cuál es la forma más rápida de ejecutar un script?

¿Cuál es la sintaxis correcta de find -exec?

¿Cuál es la forma correcta de abrir un rango de puertos en iptables?