GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ein Leitfaden für Anfänger zum Verständnis von sudo auf Ubuntu

Haben Sie jemals einen „Permission denied“-Fehler erhalten, während Sie an der Linux-Befehlszeile gearbeitet haben? Wahrscheinlich haben Sie versucht, eine Operation auszuführen, die Root-Berechtigungen erfordert. Der folgende Screenshot zeigt beispielsweise den Fehler, der ausgelöst wurde, als ich versuchte, eine Binärdatei in eines der Systemverzeichnisse zu kopieren:

Was ist also die Lösung für dieses Problem? Verwenden Sie ganz einfach das sudo Befehl.

Der Benutzer, der den Befehl ausführt, wird zur Eingabe seines Anmeldekennworts aufgefordert. Sobald das richtige Passwort eingegeben wurde, wird der Vorgang erfolgreich ausgeführt.

Während sudo zweifellos ein Muss-Befehl für jeden ist, der an der Befehlszeile unter Linux arbeitet, gibt es einige andere verwandte (und detaillierte) Details, die Sie kennen sollten, um den Befehl verantwortungsvoller und effektiver zu verwenden. Und genau das werden wir hier in diesem Artikel besprechen.

But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.

Was ist sudo?

Wie die meisten von Ihnen vielleicht bereits wissen, wird der Befehl sudo verwendet, um einen Befehl mit erhöhten Rechten (normalerweise als Root) auszuführen. Ein Beispiel dafür haben wir bereits im Einführungsabschnitt oben besprochen. Wenn Sie jedoch möchten, können Sie sudo verwenden, um den Befehl als ein anderer (Nicht-Root-)Benutzer auszuführen.

Dies wird durch das -u erreicht Befehlszeilenoption, die das Tool bietet. In dem unten gezeigten Beispiel habe ich (himanshu) beispielsweise versucht, eine Datei im Home-Verzeichnis eines anderen Benutzers (howtoforge) umzubenennen, aber es wurde die Fehlermeldung „Erlaubnis verweigert“ angezeigt. Und dann habe ich den gleichen 'mv'-Befehl mit 'sudo -u howtoforge' versucht, der Befehl war erfolgreich:

Kann jeder Benutzer sudo verwenden?

Nein. Damit ein Benutzer sudo verwenden kann, sollte sich ein diesem Benutzer entsprechender Eintrag in /etc/sudoers befinden Datei. Der folgende Absatz - von der Ubuntu-Website entnommen - sollte es klarer machen:

The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

Wenn Sie Ubuntu verwenden, können Sie ganz einfach sicherstellen, dass ein Benutzer den sudo-Befehl ausführen kann:Alles, was Sie tun müssen, ist, diesen Benutzerkontotyp „Administrator“ zu machen. Gehen Sie dazu zu Systemeinstellungen... -> Benutzerkonten.

Fenster entriegeln:

Wählen Sie dann den Benutzer aus, dessen Kontotyp Sie ändern möchten, und ändern Sie dann den Typ in „Administrator“

Wenn Sie jedoch nicht Ubuntu verwenden oder Ihre Distribution diese Funktion nicht bereitstellt, können Sie die Datei /etc/sudoers manuell bearbeiten Datei, um die Änderung vorzunehmen. Sie müssen dieser Datei die folgende Zeile hinzufügen:

[user]    ALL=(ALL:ALL) ALL

[Benutzer] sollte natürlich durch den Benutzernamen des Kontos ersetzt werden, dem Sie das sudo-Privileg gewähren. Eine wichtige Sache, die es hier zu erwähnen gilt, ist, dass die offiziell vorgeschlagene Methode zum Bearbeiten dieser Datei über das visudo erfolgt Befehl - Sie müssen lediglich den folgenden Befehl ausführen:

sudo visudo

Um Ihnen eine Vorstellung davon zu geben, warum genau das so ist, hier ein Auszug aus dem visudo-Handbuch:

visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

Weitere Informationen zu visudo finden Sie hier.

Was ist eine Sudo-Sitzung?

Wenn Sie den sudo-Befehl häufig verwenden, ist Ihnen sicherlich aufgefallen, dass Sie nach einmaliger erfolgreicher Eingabe des Passworts mehrere sudo-Befehle ausführen können, ohne zur Eingabe des Passworts aufgefordert zu werden. Aber nach einiger Zeit fragt der sudo-Befehl erneut nach Ihrem Passwort.

Dieses Verhalten hat nichts mit der Anzahl der von Ihnen ausgeführten sudo-gesteuerten Befehle zu tun, sondern hängt stattdessen von der Zeit ab. Ja, standardmäßig fragt sudo 15 Minuten lang nicht nach dem Passwort, nachdem der Benutzer es einmal eingegeben hat. Nach diesen 15 Minuten werden Sie erneut zur Eingabe des Passworts aufgefordert.

Wenn Sie möchten, können Sie dieses Verhalten jedoch ändern. Öffnen Sie dazu die Datei /etc/sudoers mit folgendem Befehl:

sudo visudo

Und dann gehen Sie zu der Zeile, die lautet:

Defaults env_reset

und fügen Sie die folgende Variable (unten fett hervorgehoben) am Ende der Zeile hinzu

Defaults env_reset,timestamp_timeout=[new-value]

Das Feld [neuer Wert] sollte durch die Anzahl der Minuten ersetzt werden, die Ihre Sudo-Sitzung dauern soll. Ich habe zum Beispiel den Wert 40 verwendet.

Falls Sie jedes Mal, wenn Sie den Befehl sudo verwenden, zur Eingabe des Passworts aufgefordert werden möchten, können Sie dieser Variable in diesem Fall den Wert '0' zuweisen. Und für diejenigen unter Ihnen, die möchten, dass ihre Sudo-Sitzung niemals abläuft, können Sie den Wert '-1' zuweisen.

Bitte beachten Sie, dass von der Verwendung von timestamp_timeout mit dem Wert '-1' dringend abgeraten wird.

Das sudo-Passwort

Wie Sie vielleicht bemerkt haben, wird nichts angezeigt, wenn sudo Sie nach einem Passwort fragt und Sie mit der Eingabe beginnen - nicht einmal Sternchen, die normalerweise die Norm sind. Obwohl dies im Allgemeinen keine große Sache ist, möchten einige Benutzer möglicherweise, dass die Sternchen aus irgendeinem Grund angezeigt werden.

Das Gute ist, dass das möglich und ziemlich einfach zu tun ist. Sie müssen lediglich die folgende Zeile in der Datei /etc/sudoers ändern:

Defaults        env_reset

zu

Defaults        env_reset,pwfeedback

Und speichern Sie die Datei.

Jedes Mal, wenn Sie jetzt das sudo-Passwort eingeben, wird ein Sternchen angezeigt.

Einige wichtige sudo-Befehlszeilenoptionen

Abgesehen von der Befehlszeilenoption -u (die wir bereits zu Beginn dieses Tutorials besprochen haben) gibt es einige andere wichtige sudo-Befehlszeilenoptionen, die eine Erwähnung verdienen. In diesem Abschnitt werden wir einige davon besprechen.

Die Option -k

Stellen Sie sich einen Fall vor, in dem Sie gerade einen sudo-gestützten Befehl ausgeführt haben, nachdem Sie Ihr Passwort eingegeben haben. Wie Sie bereits wissen, bleibt die Sudo-Sitzung jetzt standardmäßig 15 Minuten lang aktiv. Angenommen, Sie müssen während dieser Sitzung jemandem Zugriff auf Ihr Terminal gewähren, möchten aber nicht, dass er sudo verwenden kann. Was werden Sie tun?

Glücklicherweise gibt es eine Befehlszeilenoption -k die es dem Nutzer ermöglicht, die sudo-Berechtigung zu widerrufen. Hier ist, was die sudo-Manpage zu dieser Option zu sagen hat:

-k, --reset-timestamp

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

Die Option -s

Es kann vorkommen, dass Sie bei Ihrer Arbeit eine Menge Befehle ausführen müssen, für die Root-Berechtigungen erforderlich sind, und Sie nicht hin und wieder das sudo-Passwort eingeben möchten. Außerdem möchten Sie das Timeout-Limit der sudo-Sitzung nicht optimieren, indem Sie Änderungen an der Datei /etc/sudoers vornehmen.

In diesem Fall können Sie das -s verwenden Befehlszeilenoption des sudo-Befehls. So erklärt es die sudo-Manpage:

-s, --shell

Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Im Grunde macht diese Befehlszeilenoption also Folgendes:

  • Startet eine neue Shell - für welche Shell wird auf die SHELL-Umgebungsvariable verwiesen. Falls $SHELL leer ist, die in /etc/passwd definierte Shell Datei wird abgeholt.
  • Wenn Sie zusammen mit der Option -s auch einen Befehlsnamen übergeben (zum Beispiel:sudo -s whoami ), dann ist der tatsächlich ausgeführte Befehl: sudo /bin/bash -c whoami.
  • Wenn Sie nicht versuchen, einen anderen Befehl auszuführen (das heißt, Sie versuchen nur, sudo -s auszuführen ) erhalten Sie dann eine interaktive Shell mit Root-Rechten.

Beachtenswert ist hier, dass das -s Befehlszeilenoption gibt Ihnen eine Shell mit Root-Rechten, aber Sie erhalten nicht die Root-Umgebung - es ist Ihre .bashrc, die bezogen wird. Das bedeutet zum Beispiel in der neuen Shell, dass sudo -s läuft, wobei whoami ausgeführt wird Der Befehl gibt immer noch Ihren Benutzernamen zurück und nicht 'root'.

Die Option -i

Die Option -i ähnelt der Option -s, die wir gerade besprochen haben. Es gibt jedoch einige Unterschiede. Einer der Hauptunterschiede ist das -i gibt Ihnen auch die Root-Umgebung, was bedeutet, dass Ihre (Benutzer-) .bashrc ignoriert wird. Es ist, als würde man root werden, ohne sich explizit als root anzumelden. Außerdem müssen Sie nicht auch das Passwort des Root-Benutzers eingeben.

Wichtig :Bitte beachten Sie, dass es ein su gibt Befehl, mit dem Sie auch den Benutzer wechseln können (standardmäßig können Sie damit root werden). Für diesen Befehl müssen Sie das Root-Passwort eingeben. Um dies zu vermeiden, können Sie es auch mit sudo ('sudo su') ausführen; in diesem Fall müssen Sie nur Ihr Login-Passwort eingeben. Allerdings haben 'su' und 'sudo su' einige grundlegende Unterschiede - um sie zu verstehen und mehr darüber zu erfahren, wie 'sudo -i' mit ihnen verglichen wird, gehen Sie hierher.

Schlussfolgerung

Ich hoffe, dass Sie jetzt zumindest die Grundidee hinter sudo verstanden haben und wissen, wie Sie das Standardverhalten optimieren. Probieren Sie die /etc/sudoers-Optimierungen aus, die wir hier erklärt haben, gehen Sie auch durch die Forumsdiskussion (verlinkt im letzten Absatz), um mehr Einblick in den sudo-Befehl zu erhalten.


Ubuntu
  1. Eine Anleitung zum Linux-Terminal für Anfänger

  2. Root-Benutzer in Ubuntu 22.04 werden - Schritt-für-Schritt-Anleitung?

  3. PostgreSQL auf Ubuntu 20.04 installieren – Schritt-für-Schritt-Anleitung?

  4. Apache Subversion auf Ubuntu 20.04 LTS installieren – Schritt-für-Schritt-Anleitung?

  5. Installieren Sie RabbitMQ auf Ubuntu 20.04 LTS - Eine Schritt-für-Schritt-Anleitung?

Ubuntu 22.04-Leitfaden

Festlegen einer statischen IP unter Ubuntu:Ein Leitfaden für Anfänger

So installieren Sie die GUI auf Ubuntu Server (Eine einfache Anleitung)

Beheben Sie den Fehler „Kein Wi-Fi-Adapter gefunden“ auf Ubuntu

20 grundlegende Ubuntu-Befehle für Anfänger

Ping-Befehl in Ubuntu 22.04