GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la bonne façon d'empêcher les utilisateurs non root d'émettre des arrêts ou des redémarrages

  • pklocalauthority est obsolète
  • Vous avez besoin de systemd avec logind et polkit.

Actions disponibles

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

Vous devriez regarder /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Ajouter une règle

Commencez par surveiller les messages du système, afin que nous puissions voir si notre nouvelle règle fonctionne :

journalctl -f

Créez ensuite le fichier /etc/polkit-1/rules.d/60-noreboot_norestart.rules (en javascript).

Dans ce fichier, nous ajoutons une logique pour vérifier les actions et autoriser users en power groupe ou nécessite su autorisation :

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 règle devrait être chargée et cela devrait fonctionner. Références ci-dessous.

  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

Tout d'abord, notez que la fonction d'arrêt de ConsoleKit considère "un seul utilisateur" et "plusieurs utilisateurs" comme deux situations différentes - l'arrêt du système nécessite toujours l'authentification de l'administrateur si d'autres utilisateurs sont connectés.

Toutes ces actions sont gérées par PolicyKit. Si vous souhaitez ajuster les politiques, vous pouvez le faire comme décrit dans 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 et les versions antérieures documentent cela dans 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

Le Action s sont répertoriés dans le fichier de stratégie ConsoleKit ou en exécutant pkaction .


Linux
  1. Quel est le moyen le plus rapide de déplacer un million d'images d'un répertoire à un autre sous Linux ?

  2. Quel est le moyen le plus rapide d'ajouter du texte à un fichier à partir de la ligne de commande ?

  3. Quelle est la regex pour valider les utilisateurs Linux ?

  4. Quelle est la bonne syntaxe find -exec

  5. Quelle est la bonne façon d'ouvrir une plage de ports dans iptables

Quelle est la bonne façon de démarrer un service mongod sous Linux / OS X ?

Quel est le moyen le plus simple de libérer de l'espace sur un disque dur ?

Quel est le moyen le plus simple de visualiser les données de stdout sous forme de graphique ?

Quelle est la meilleure façon d'apprendre SELinux ?

Quelle est la bonne façon d'afficher la vitesse de votre CPU sous Linux ?

Quel est le moyen le plus rapide d'exécuter un script ?