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

507
jamzsabb

Ich habe diese Frage schon hier und hier gesehen, aber sie ist ziemlich alt und ich konnte keine Lösung finden, um zu funktionieren.

Grundsätzlich muss ich jedes Mal ein Skript oder einen Befehl automatisch als root ausführen, wenn SSHs eines Nicht-Root-Benutzers in den Server einsteigen. Der Server führt Ubuntu 16.04 aus und verwendet OpenSSH, falls dies einen Unterschied macht.

EDIT: Um genauer zu sein, ich möchte einen Prozess töten, die durch den Benutzer A erstellt wurde, wenn Benutzer B anmeldet Meine Mitbewohner und ich Krypto auf meinem kopflos Spieleserver mein, und ich möchte in der Lage sein zu laufen. pkill miner.shAutomatisch, wenn jemand anmeldet unabhängig davon, wer damit angefangen hat. Da es wahnsinnig unsicher wäre, die Benutzer die Prozesse der anderen Benutzer töten zu lassen, scheint dies schwieriger als erwartet zu sein.

0
`pam_exec`, das in der zweiten Frage erwähnt wurde, ist auch das, was ich versuchen würde. Benötigt ein wenig PAM. dirkt vor 5 Jahren 0
@dirkt Ja ich habe das gesehen, aber ich habe Erlaubnisfehler bekommen, als ich es versuchte. Ich werde mehr darüber nachdenken. Ich kenne PAM wirklich nicht, also könnte dies das Problem sein jamzsabb vor 5 Jahren 0
Sie erhalten möglicherweise eine bessere Antwort, wenn Sie erklären, was Sie beim Anmelden tatsächlich tun möchten (es gibt möglicherweise eine bessere Möglichkeit, als ein Skript als root auszuführen). Omnipresence vor 5 Jahren 0

2 Antworten auf die Frage

1
Omnipresence

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

Wäre es ein Problem, wenn das Skript zu anderen Zeitpunkten als login (als root) ausgeführt wurde? Wenn es in Ordnung ist, öfter als unbedingt erforderlich auszuführen, können Sie ein Wrapper-Skript erstellen, das bei jedem ssh-Login mit Benutzerberechtigungen ausgeführt wird, das sudo (ohne Kennwort) verwendet, um Ihr Skript als root auszuführen. Dies bedeutet jedoch, dass die Benutzer es auch manuell (als root) ausführen können, so oft 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

Dann erstellen Sie die Datei /etc/pam.d/LoginWrapper.sh mit 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

Wenn sich Ihr Sudo in einem anderen Pfad befindet, sollten Sie ihn oben aktualisieren.

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

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

Danke für die Hilfe @Omnipresence, aber ich bekomme immer noch `pkill: töten von pid 2629 fehlgeschlagen: Operation nicht erlaubt`, wenn ich versuche, es auszuführen. Mein root_script.sh ist im Grunde nur "pkill miner.sh" jamzsabb vor 5 Jahren 0
Ich habe meine Frage mit weiteren Informationen aktualisiert. Ich bin nicht wirklich darauf eingestellt, dies auf eine bestimmte Art und Weise zu tun. Es ist nur eine einfache Sache, die ich aus Bequemlichkeitsgründen tun wollte, weshalb ich viel tiefer in die Linux-Benutzerberechtigungen hineingeschaut habe. An dieser Stelle möchte ich es nur tun, um zu beweisen, dass es möglich ist! jamzsabb vor 5 Jahren 0
0
jamzsabb

Dies wurde durch Hinzufügen aller Benutzer zu einer Gruppe namens mygroup behoben

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

Ändern Sie dann /etc/sudoers, dass diese Gruppe sudo pkillohne Kennwort ausgeführt werden kann, indem Sie Folgendes zu sudoers hinzufügen

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

Dann fügte ich nur den Befehl sudo pkillunten hinzu /etc/profileund es funktionierte einen Zauber.