![Führen Sie ein Skript als Root aus, wenn sich ein Nicht-Root-Benutzer anmeldet](https://rvso.com/image/1568338/F%C3%BChren%20Sie%20ein%20Skript%20als%20Root%20aus%2C%20wenn%20sich%20ein%20Nicht-Root-Benutzer%20anmeldet.png)
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.sh
automatisch 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/sudoers
können Sie die Ausführung dieser Gruppe sudo pkill
ohne Kennwort zulassen, indem Sie sudoers Folgendes hinzufügen
%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill
Dann habe ich den Befehl einfach sudo pkill
unten hinzugefügt /etc/profile
und es hat wunderbar funktioniert.