Autorizzazione allo spegnimento di Linux


8

Supponiamo di installare un ambiente desktop, ad esempio Ubuntu o Debian. È possibile arrestare il sistema facendo clic su un pulsante da qualche parte nel menu di sistema come utente normale. Non è necessario passare al superutente per farlo.

Tuttavia, nello stesso ambiente desktop, se apro un terminale (ad esempio gnome-terminal) come un normale utente e digito

shutdown -h now

Sarei richiesto da

shutdown: need to be root

L'unico modo per arrestare è anteporre il comando con un sudo.

Qualcuno può spiegare perché è così?

Grazie KC


Risposte:


8

La domanda posta da K.Chen è: perché ho bisogno dei privilegi di sudo quando lo faccio dalla CLI, anche se non ho bisogno di tali privilegi quando lo faccio dalla GUI.

La prima parte della risposta è che le persone che progettano ambienti desktop, come Gnome, KDE, Xfce, Mate, Cinnamon, ... cercano di semplificare il lavoro dei loro utenti e configurano l'arresto e il riavvio senza richiedere credenziali sudo. Questo, per inciso, implica che ci deve essere una sequenza di spegnimento che non comporta l'arresto del programma, che richiede privilegi di sudo (assolutamente no).

Non so in dettaglio come ogni DE lo fa, ma so che esiste un modo delicato per far cadere o riavviare / spegnere / ibernare il tuo sistema, che non richiede i privilegi di root. Puoi trovare il post originale in un post del forum Arch Linux . In sostanza, equivale a emettere questi comandi:

arresto

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

riavvio

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-sospendere

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

hibernate

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

La mia ipotesi è che i pulsanti della GUI utilizzino approssimativamente questi comandi. Per essere sicuri si dovrebbe esaminare il codice, ma credo che questa sia una scommessa sicura.


1
Se qualcuno effettua l'accesso remoto a una macchina che ha anche un ambiente desktop in esecuzione, può emettere questi comandi e arrestare / riavviare / sospendere / ibernare con successo?
Gerrit,

C'è un lato malizioso in questa domanda, credo che dovrebbe essere esercitata una certa discrezione.
MariusMatutiae,

1
Perché malizioso? Se può essere abusato, i sysops dovrebbero sapere e quindi sapere come proteggersi.
Gerrit,

Non sto dicendo che sei dannoso, ma che si potrebbe fare un uso dannoso di queste informazioni. Mi sto già pentendo di averlo condiviso ... Forse avrei dovuto fare come @Matteo
MariusMatutiae,

5

Il motivo alla base di questa decisione di progettazione non è tecnico (potresti avere un shutdowncomando non privilegiato o richiedere una password nella GUI).

  • Quando si utilizza un ambiente desktop, l'utente dovrebbe avere accesso fisico alla macchina. Quindi meglio consentire uno spegnimento pulito piuttosto che consentire all'utente di premere il pulsante di accensione o scollegare il cavo di alimentazione.

  • Quando si utilizza una shell, l'utente potrebbe essere un utente remoto e per evitare un arresto remoto sono richiesti più privilegi.

Queste non sono regole ma solo impostazioni predefinite basate su presupposti: puoi avere un utente locale in una shell e un utente remoto con un ambiente desktop. Se si desidera scegliere il comportamento predefinito, è possibile configurare il sistema di conseguenza.


Vedo il tuo punto, @Matteo. Ma come ha detto MariusMatutiae, DE deve aver chiamato un programma diverso da "shutdown" per lo spegnimento senza il privilegio di superutente. Hai idea di cosa sia?
K.Chen,

1

Sudo (superuser do) consente a un amministratore di sistema di dare a determinati utenti (o gruppi di utenti) la possibilità di eseguire alcuni (o tutti) i comandi come root durante la registrazione di tutti i comandi e gli argomenti. shutdown -h command o init 0 command possono essere usati per spegnere la macchina. Ma entrambi i comandi richiedevano il privilegio di root per essere eseguiti.

Il comando che trova in / sbin deve avere il privilegio di root per eseguirlo. Per trovare la posizione del comando di arresto,

digitare quale arresto nel terminale.

Spero ora che il tuo dubbio sia chiaro :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.