Wenn wir Pakete installieren, entfernen, aktualisieren oder Änderungen vornehmen, die Administratorrechte erfordern, werden wir zur Eingabe des Kennworts des Administrators aufgefordert, der über diese sudo
Rechte verfügt - dies geschieht sowohl über die Benutzeroberfläche als auch über das Terminal.
Wenn wir jedoch versuchen, über das Terminal herunterzufahren und neu zu starten, wird Folgendes beanstandet root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Wir werden jedoch nie nach einem Passwort gefragt, wenn wir diese Aktionen über das Zahnrad oben rechts ausführen.
Warum gibt es diese Diskrepanz?
sudo
shutdown
restart
privileges
Aditya
quelle
quelle
sudo shutdown -h now
Problem ist jedoch, dass die Eingabe ohne Zugriffsberechtigungshutdown
niemals funktioniert .. Hoffe, Sie verstehen meine Situation .. :)Antworten:
Die Abschaltung am Zahnrad prüft, ob Sie die Maschine abschalten dürfen. Dies erfolgt über PolicyKit. Im Falle eines Herunterfahrens wird diese Anweisung in der Datei
/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
überprüft:Das PolicyKit löst einen
dbus-send
Befehl aus. Im Falle eines Herunterfahrens wäre es:Im Hintergrund wird ein Daemon mit Root-Rechten ausgeführt, der den Befehl shutdown für Sie aufruft.
Wenn Sie in der Lage sein möchten, die Maschine "auf die alte Art" über die Befehlszeile (
shutdown, reboot, halt, ...
) herunterzufahren, müssen Sie diesen Befehlen das suid-Bit hinzufügen. Beachten Sie jedoch, dass jeder auf Ihrem System, der Zugriff auf die Shell hat, Ihren Computer herunterfahren kann.quelle
sudo visudo
, Hinzufügen%sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot
, Speichern und Beenden. Auf diese Weise ist ein Neustart über die Befehlszeile weiterhin erforderlichsudo reboot
, Sie müssen jedoch kein Kennwort eingeben.Ubuntu ist eine Distribution des GNU / Linux-Betriebssystems, das wiederum zur Unix-Systemfamilie gehört - eine gemeinsame Architektur für eine Reihe moderner Betriebssysteme.
Normalerweise lief Unix auf Großrechnern. Zentrale Computereinrichtungen, die Dutzende oder Hunderte von Benutzern über entfernte Terminals bedienen. Da alle Benutzer auf die Verfügbarkeit des Mainframes angewiesen waren, durfte kein einzelner Benutzer einen Befehl zum Herunterfahren ausgeben. Eine Idee, die für die Unix-Architektur von grundlegender Bedeutung ist: Der Systemkern initialisiert niemals ein Herunterfahren, es sei denn, die entsprechende Funktion wird von einem Superuser-Prozess aufgerufen.
In modernen Desktopsystemen haben Entwickler bestimmte Anstrengungen unternommen, um das Herunterfahren nur dem Desktop-Benutzer zur Verfügung zu stellen. Eine übliche Technik besteht darin, den Anmeldemanager, der normalerweise im Sicherheitskontext des Root-Benutzers ausgeführt wird, das Herunterfahren und den Neustart durchführen zu lassen. In diesem Fall fordert die grafische Shell den Anmeldemanager auf, den Computer herunterzufahren. Dies beinhaltet die Verwendung von IPC (Inter Process Communication), normalerweise über den dbus-Dienst.
Das oben erwähnte Policykit erweitert diesen Prozess um ein standardisiertes Framework, mit dem der Login-Manager (oder ein anderes Programm, das den Shutdown-Service bereitstellt) überprüfen kann, welche Benutzer einen Shutdown verursachen dürfen, und über das ein Administrator diese Berechtigungen konfigurieren kann.
Einige Desktop-Umgebungen verwenden keine IPC-basierten Dienste, sondern eine Reihe von Hilfsprogrammen, um dieselben oder ähnliche Funktionen bereitzustellen. Diese Hilfsprogramme werden über Mechanismen aufgerufen, die es ermöglichen, in den Superuser-Kontext zu wechseln, z. B. sudo, suid oder einen Policykit-Mechanismus, der sudo ähnelt.
In jedem Fall funktioniert das dumme traditionelle Shutdown-Programm auf der Shell nicht so. Sie müssen sicherstellen, dass es in einem Superuser-Kontext ausgeführt wird.
quelle
Da Linux häufig als Server oder ähnliches verwendet wird, ist das Einbinden von SSH in eine Linux-Box, selbst ein normaler Ubuntu-Laptop, durchaus üblich.
Möglicherweise möchten Sie nicht, dass Personen mit SSH-Zugriff das System herunterfahren können, insbesondere wenn andere Benutzer remote angemeldet sind, die es verwenden. Jemand mit Zugriff auf die GUI - nun, er kann sie auf jeden Fall mit dem physischen Ein- / Ausschalter selbst herunterfahren.
Außerdem kann ein remote angemeldeter Benutzer die Funktion nicht wieder aktivieren.
quelle
Nur wenn Sie der einzige angemeldete Benutzer sind. Wenn andere Benutzer (einschließlich Konsolenbenutzer) vorhanden sind, müssen Sie möglicherweise ein Root-Kennwort eingeben. Dies gilt auch für OS X und neuere Windows-Versionen.
Der folgende Befehl:
Warum
shutdown
prüft der Befehl nicht einfach, ob jemand angemeldet ist? Um ehrlich zu sein, scheint das ein ungewöhnliches Merkmal zu sein. Ich kann mir vorstellen, dass es manchmal Zeit spart, aber eine konsistente Konsole wird oft bevorzugt. Ich möchte nicht, dass Befehle manchmal ein Kennwort erfordern, nachdem sie ausgeführt wurden, und manchmal nicht.Meine Pronomen sind Er / Ihn
quelle
sudo
weder bei einem über GDM angemeldeten Benutzer noch bei einem über tty angemeldeten Benutzer nach dem Root- / Benutzerkennwort gefragt .Der Grund, warum Sie nicht als Root angemeldet sein müssen, um ein Herunterfahren über die grafische Benutzeroberfläche zu initiieren, ist für den typischen Desktop-Benutzer im Wesentlichen eine Frage der Bequemlichkeit. Das System weiß, dass Sie der Benutzer sind, der an der Konsole angemeldet ist. Wenn Sie den Computer also versehentlich herunterfahren, können Sie ihn vermutlich wieder einschalten.
Für einen Benutzer in der Shell sind Sie möglicherweise remote angemeldet. Das System erfordert daher, dass Sie als Root angemeldet sind, um einen Befehl zum Herunterfahren auszugeben. Auf diese Weise wird verhindert, dass ein regulärer Benutzer, der bei einem Server angemeldet ist, diesen herunterfährt, während andere ihn verwenden, und während nicht unbedingt jemand physisch da ist, um die Sicherung des Computers zu starten.
Der Grund, warum das Herunterfahren keine GUI-Eingabeaufforderung für das Super-User-Passwort bietet, ist wahrscheinlich, dass dort kein echtes Dienstprogramm verfügbar ist. Wenn Sie sich an der Konsole befinden, an der die Eingabeaufforderung angezeigt wird, können Sie einfach das Zahnrad verwenden. Wheeel-Menü statt. Wenn Sie eine Eingabeaufforderung für das Superuser-Kennwort zum Herunterfahren haben möchten, ist diese bereits mit "sudo shutdown" verfügbar.
quelle
In einem Mehrbenutzersystem möchten Sie als Letztes Ihre Benutzer anmelden und den Server jederzeit nach dem Zufallsprinzip neu starten können. Daher ist die Befehlszeilenversion von Reboot ein reiner Superuser-Befehl, bei dem Sie als root oder angemeldet sein müssen Sudo-Rechte haben.
Ebenso die Befehle Halt und PowerOff.
quelle