beim Neustarten/Herunterfahren des Systems immer nach dem Sudo-Passwort fragen

beim Neustarten/Herunterfahren des Systems immer nach dem Sudo-Passwort fragen

Also,

Mir ist aufgefallen, dass bei Manjaro, wenn nur ein Benutzer vorhanden ist, das Tippen rebootohnesudo, schlägt einfach fehl und fragt nach dem Sudo-Passwort, während auf einem Ubuntu-Server bei der Eingabe dieses nicht nach dem Sudo-Passwort gefragt wird und das System erfolgreich neu gestartet wird. Meine Frage ist, wie kann ich es so einrichten, dass bei der EingabeNeustart/Herunterfahren/Anhalten, Ubuntu fragt immer nach dem Sudo-Passwort, auch wenn derzeit nur ein Benutzer angemeldet ist? Kann das mit Polkit zu tun haben? Wenn ja, wie kann ich das ändern?

Der Grund für meine Frage ist, dass ich sicher sein möchte, dass niemand, der physischen Zugriff auf meinen Server hat, einen Neustart durchführen kann (außer natürlich durch Herausziehen des Netzkabels, was etwas anderes ist, lol).

Danke

Antwort1

Eine Möglichkeit, wie ich das gemacht habe, istMaskierung der systemdZiele, wodurch die Ausführung bestimmter Aktionen verhindert wird, unabhängig davon, wer den Befehl eingibt. Um beispielsweise das Herunterfahren des Systems zu verhindern, können Sie Folgendes tun:

sudo systemctl mask poweroff.target

sudo shutdownJetzt schlägt jeder Versuch, das System über oder herunterzufahren, sudo systemctl shutdownstillschweigend fehl. Dasselbe kann mit Anhalten und Neustarts passieren:

sudo systemctl mask runlevel0.target
sudo systemctl mask halt.target
sudo systemctl mask runlevel6.target
sudo systemctl mask reboot.target

Notiz: runlevel6ist gleichwertig mit reboot, und runlevel0ist gleichwertig mit shutdownund halt.

Um dies rückgängig zu machen, können diese Befehle erneut ausgeführt werden, jedoch mit unmask:

sudo systemctl unmask runlevel0.target
sudo systemctl unmask shutdown.target
sudo systemctl unmask halt.target
sudo systemctl unmask runlevel6.target
sudo systemctl unmask reboot.target

Mit diesem Wissen im Hinterkopf können Sie nun ein Skript schreiben, das ausführbar istnurfür Menschen mit sudoZugang:

#!/bin/bash

## Determine the operation to run (mask | unmask)
op=mask

if [[ $1 = unmask ]]
then
        op=unmask
fi

## Set the targets we want to mask
declare -a arr=("runlevel0" "runlevel6" "shutdown" "reboot" "halt")

## Run the commands
for i in "${arr[@]}"
do
        cmd=$( sudo systemctl $op $i.target )
        echo "$i :: $op"
done

WARNUNG:Dieser Code funktioniert, ist aber ziemlich grob. Überprüfen Sie ihn unbedingt mit einer VM oder an einem „sicheren“ Ort, bevor Sie ihn auf einer Produktionsmaschine ausführen.

Jetzt können Sie dieses Skript ausführen, um die Ziele nach dem Booten zu maskieren und das Herunterfahren/Neustarten wie folgt durchzuführen:

sudo ~./setTargetMask.sh unmask
sudo shutdown now

Notiz:Sie können dem Skript jeden beliebigen Namen geben.

verwandte Informationen