Führen Sie ein Skript als Root aus, wenn sich ein Nicht-Root-Benutzer anmeldet

Führen Sie ein Skript als Root aus, wenn sich ein Nicht-Root-Benutzer anmeldet

Ich habe diese Frage schon einmal gestellt gesehenHierUndHieraber sie sind ziemlich alt und ich habe keine Lösung zum Laufen bringen können.

Grundsätzlich muss ich jedes Mal, wenn ein Nicht-Root-Benutzer sich per SSH mit dem Server verbindet, automatisch ein Skript oder einen Befehl als Root ausführen. Der Server läuft unter Ubuntu 16.04 und verwendet OpenSSH, falls das einen Unterschied macht.

EDIT: Genauer gesagt möchte ich einen Prozess beenden, der von Benutzer A erstellt wurde, wenn sich Benutzer B anmeldet. Meine Mitbewohner und ich schürfen Krypto auf meinem Headless-Gaming-Server und ich möchte in der Lage sein, pkill miner.shautomatisch zu starten, wenn sich jemand anmeldet, unabhängig davon, wer es gestartet hat. Da es wahnsinnig unsicher wäre, Benutzer die Prozesse der anderen beenden zu lassen, scheint dies schwieriger zu sein als erwartet.

Antwort1

pam_exec hat Sie in die richtige Richtung gelenkt, aber setuid ist ein schlechter Ratschlag; die meisten (alle?) modernen Linux-Versionen ignorieren es bei Shell-Skripten und respektieren es nur bei binären ausführbaren Dateien.

Wäre es ein Problem, wenn das Skript (als Root) zu anderen Zeiten als der Anmeldung ausgeführt würde? Wenn es in Ordnung ist, dass es öfter ausgeführt wird als unbedingt erforderlich, könnten Sie ein Wrapper-Skript erstellen, das bei jeder SSH-Anmeldung mit Benutzerberechtigungen ausgeführt wird und sudo (ohne Passwort) verwendet, um Ihr Skript als Root auszuführen. Dies bedeutet jedoch, dass die Benutzer es auch manuell (als Root) so oft ausführen könnten, wie sie möchten.

Um dies einzurichten, fügen Sie diese Zeile zu /etc/pam.d/sshd hinzu

account optional pam_exec.so /etc/pam.d/LoginWrapper.sh

Erstellen Sie dann die Datei /etc/pam.d/LoginWrapper.sh mit dem Inhalt:

#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi

Beachten Sie, dass Sie Ihr Sudo oben aktualisieren sollten, wenn es sich in einem anderen Pfad befindet.

Fügen Sie nun in /etc/sudoers die folgende Zeile hinzu:

ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh

Antwort2

Dies wurde gelöst, indem alle Benutzer zu einer Gruppe namens „mygroup“ hinzugefügt wurden

sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2

Anschließend /etc/sudoerskönnen Sie die Ausführung dieser Gruppe sudo pkillohne Kennwort zulassen, indem Sie sudoers Folgendes hinzufügen

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

Dann habe ich den Befehl einfach sudo pkillunten hinzugefügt /etc/profileund es hat wunderbar funktioniert.

verwandte Informationen