Wie mache ich / sbin / shutdown, / sbin / reboot etc. und benötige sudo erneut in 16.04?

18

Aus irgendeinem Grund haben wir nicht mehr benötigen root (oder mit sein sudo) zu laufen /sbin/shutdown, /sbin/rebootusw.

Dies scheint darauf zurückzuführen zu sein, dass diese ausführbaren Dateien nun Symlinks sind, mit /bin/systemctldenen alles als normaler Benutzer behandelt wird.

Was aber, wenn ich will shutdownund rebootwieder root Authentifizierung erforderlich ist ? Wie kann ich das erreichen?

Byte Commander
quelle
3
Ich würde Polkit-Regeln erraten. Ändern askubuntu.com/a/570969/158442 nach Bedarf (Verwendung pkaction | grep login1für andere Regeln von Interesse)
muru
3
(Ein Beispiel für Regeln, die Administratorrechte erfordern: askubuntu.com/a/744094/158442 )
muru
1
Ist dies nicht nur möglich, wenn Sie die einzige Person sind, die angemeldet ist? Wenn noch jemand im System angemeldet ist, werden Sie aufgefordert, das root-Passwort einzugeben.
Erkennt
Dies ist möglicherweise nicht die erwartete Antwort, aber ein ähnliches Verhalten kann durch einen anderen Administrator verursacht werden, der Ihre '/ etc / sudoers' bearbeitet hat. Wenn dies der Grund für Ihr Problem ist, können Sie es durch Eingabe zurücksetzen sudo visudound prüfen, ob eine Zeile mit dem Pfad zu diesen ausführbaren Dateien vorhanden ist.
Damien

Antworten:

5

Systemd umgehen kann in der Tat das shutdown, rebootund andere Befehle, und die Standardzugewiesenen Berechtigungen sind permissive. Um dies zu ändern, müssen Sie eine Polkit-Regel erstellen. Erstellen Sie eine .pklaDatei in /etc/polkit-1/localauthority/50-local.d(zum Beispiel confirm-shutdown.pkla), die Folgendes enthält:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

Die verschiedenen Herunterfahren, Neustarten etc. Befehle sind, in polkit Bedingungen, Aktionen in org.freedesktop.login1, zum Beispiel org.freedesktop.login1.power-off, org.freedesktop.login1.rebootusw. Das spezifische Problem hier ist die Standardkonfiguration, die in ist /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Beachten Sie, dass der aktive Benutzer ausgeschaltet, neu gestartet usw. werden kann.

muru
quelle
0

Sie können den chmodBefehl verwenden.

  • Wenn Sie nur root Zugriff gewähren möchten, können Sie schreiben:

    chmod 700 directory/to/the/file
    
  • Wenn Sie der Root- und der Sudo-Gruppe Berechtigungen erteilen möchten, können Sie Folgendes schreiben:

    chmod 770 directory/to/the/file
    
  • Wenn Sie die Gruppe der Datei von sudo in eine andere ändern möchten (z. B. Benutzer oder Administratoren), müssen Sie Folgendes eingeben:

    chown owner:group directory/to/the/file
    
  • Wenn Sie zurückkehren möchten, führen Sie Folgendes aus:

    chown root:sudo filedirectory 
    

Hinweis : Möglicherweise müssen Sie sudodiesen Befehl verwenden oder sich im Root-Konto angemeldet haben

Yakusho
quelle
Beachten Sie, dass der Versuch, die Berechtigungen des Links zu ändern, die Berechtigungen des Ziels ändert (in diesem Fall /bin/systemctl). Wenn Sie also chmod / sbin / shutdown ausführen, wirken sich dies auf alle Links aus, auf /bin/systemctldie verwiesen bin/systemctlwird , da die Berechtigungen geändert werden, wie durch den Befehl $ ll /bin/systemctl bestätigt -rwx ------ 1 root root 659848 18. Januar 16.04 / bin / systemctl *
Elder Geek
Wenn Sie es wieder ändern müssen, sind die Standardberechtigungen-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek
-1

Sie können ein Skript erstellen, das prüft, ob der Benutzer es mit Root-Berechtigungen ausführt oder nicht.
Dann wird der Befehl systemctl ausgeführt oder ein Fehler zurückgegeben.

#! / bin / bash
if ["$ (whoami)"! = "root"]; dann
    echo "Sorry, du bist nicht root."
    Ausfahrt 1
sonst
    (Befehl systemctl shutdown)
fi

Quelle

Ven3k
quelle
4
Was hindert einen Nicht-Root-Benutzer daran, dieses Skript einfach zu umgehen?
Robie Basak
-1

Versuchen Sie, die Berechtigungen im Terminal zu ändern. Sie können es nur für eine bestimmte Gruppe ausführbar machen, z. B. wheel oder admin. Leider (oder vielleicht zum Glück) kann eine Datei nur einen Gruppeneigentümer haben, so dass ein Chown für sich allein einfach nicht funktioniert. Versuchen Sie "sudo chown root: wheel / sbin / shutdown" und dann "sudo chmod g + x / sbin / shutdown". Dadurch kann die Datei nur von root und Admins (shudders) ausgeführt werden, und sudoers müssen ihre Passwörter eingeben.

Chevydog
quelle
2
Die "Wheel" -Gruppe ist eine Sache von Arch Linux und vielleicht anderen Distributionen, aber definitiv nicht auf Ubuntu.
Byte Commander
2
Dies ist nicht effektiv. Ein Benutzer kann einfach eine systemctl-Binärdatei von einer anderen Stelle herunterladen und stattdessen ausführen.
Robie Basak
@Robie, das kannst du mit jeder Lösung machen. Sie könnten den Netzschalter gedrückt halten. Meine Lösung funktioniert für das, was er verlangt.
Chevydog