Heim  >  Artikel  >  System-Tutorial  >  So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

WBOY
WBOYnach vorne
2024-01-15 16:42:26542Durchsuche

Haben Sie jemals die Fehlermeldung „Berechtigung verweigert“ erhalten, wenn Sie die Linux-Befehlszeile verwenden? Dies kann daran liegen, dass Sie versuchen, einen Vorgang auszuführen, der Root-Rechte erfordert. Der folgende Screenshot zeigt beispielsweise den Fehler, der auftrat, als ich versuchte, eine Binärdatei in ein Systemverzeichnis zu kopieren.

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

Zugriff für Shell verweigert

Wie lässt sich dieser Fehler also ganz einfach beheben? Verwenden Sie den Befehl sudo.

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

Verwenden Sie sudo, um Befehle auszuführen

Benutzer werden aufgefordert, ihr (eigenes) Anmeldekennwort einzugeben, nachdem sie diesen Befehl ausgeführt haben. Sobald das richtige Passwort eingegeben wurde, wird der Vorgang erfolgreich ausgeführt.

Es besteht kein Zweifel, dass sudo ein Befehl ist, den jeder kennen muss, der die Befehlszeile unter Linux verwendet. Um diesen Befehl jedoch verantwortungsvoller und effektiver nutzen zu können, müssen Sie dennoch einige relevante (und detaillierte) Details kennen. Genau das werden wir in diesem Artikel besprechen.

Bevor wir fortfahren, ist es erwähnenswert, dass alle in diesem Artikel erwähnten Befehlsanweisungen unter Bash-Version 4.3.11 unter Ubuntu 14.04 LTS getestet wurden.

Was ist sudo

Wie die meisten von Ihnen wissen, wird sudo zum Ausführen von Befehlen verwendet, die erhöhte Rechte erfordern (normalerweise als Root-Benutzer). Ein solches Beispiel wurde weiter oben in diesem Artikel im Einleitungsabschnitt besprochen. Sie können jedoch sudo verwenden, um Befehle als anderer Benutzer (ohne Rootberechtigung) auszuführen, wenn Sie möchten.

Dies wird durch die vom Tool bereitgestellte Befehlszeilenoption -u erreicht. Wie im folgenden Beispiel gezeigt, habe ich (himanshu) beispielsweise versucht, eine Datei im Home-Verzeichnis eines anderen Benutzers (howtoforge) umzubenennen, habe aber die Fehlermeldung „Zugriff verweigert“ erhalten. Dann habe ich sudo -u howtoforge hinzugefügt und denselben „mv“-Befehl verwendet, und der Befehl wurde erfolgreich ausgeführt:

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

Was ist sudo

Kann jemand Sudo verwenden?

Nein. Damit ein Benutzer sudo verwenden kann, sollte in der Datei /etc/sudoers eine benutzerbezogene Information vorhanden sein. Der folgende Auszug aus der Ubuntu-Website kann es deutlicher erklären:

/etc/sudoers Die Datei steuert, wer als welcher Benutzer welche Befehle auf welcher Maschine ausführen kann, und kann auch Sondersituationen steuern, etwa ob für einen bestimmten Befehl ein Passwort erforderlich ist. Diese Datei besteht aus Aliasnamen (Basisvariablen) und Benutzerspezifikationen (steuert, wer welche Befehle ausführen kann).

Wenn Sie Ubuntu verwenden, ist es ganz einfach, einem Benutzer die Ausführung von Sudo-Befehlen zu ermöglichen: Sie müssen lediglich den Kontotyp in „Administrator“ ändern. Dies kann direkt in den Systemeinstellungen -> Benutzerkonten erfolgen.

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

sudo-Benutzer

Entsperren Sie zuerst dieses Fenster:

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

Fenster zum Entsperren

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

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

Sudo-Konten auswählen

Wenn Sie jedoch kein Ubuntu verwenden oder Ihre Distribution diese Funktion nicht bietet, können Sie die Datei /etc/sudoers manuell bearbeiten, um diese Änderung zu implementieren. So fügen Sie der Datei eine Zeile wie diese hinzu:

[user]    ALL=(ALL:ALL) ALL

Unnötig zu erwähnen, dass [Benutzer] durch den Benutzernamen des Benutzers ersetzt werden sollte, dem Sie Sudo-Berechtigungen erhöhen möchten. Eine wichtige Sache, die hier erwähnt werden sollte, ist, dass es offiziell empfohlen wird, die Datei über den visudo-Befehl zu bearbeiten – Sie müssen lediglich den folgenden Befehl ausführen:

sudo visudo

Um zu erklären, worum es geht, hier ein Auszug aus dem Visudo-Handbuch:

visudo 以安全的模式编辑 sudoers 文件。visudo 锁定 sudoers 文件以防多个编辑同时进行,提供基本的检查(sanity checks)和语法错误检查。如果 sudoers 文件现在正在被编辑,你将会收到一个信息提示稍后再试。

关于 visudo 的更多信息,前往这里。

什么是 sudo 会话

如果你经常使用 sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次 sudo 命令。但是一段时间后,sudo 命令会再次要求你的密码。

这种现象跟运行 sudo 命令数目无关,跟时间有关。是的,sudo 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。

然而,如果你想的话,你能改变这种现象。用以下命令打开 /etc/sudoers 文件:

sudo visudo

找到这一行:

Defaults env_reset

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

env_reset

然后在这行最后添加以下变量:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value] 为想要 sudo 会话持续的时间数。例如,设数值为 40。

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

sudo timeout value

如果你希望每次使用 sudo 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 sudo 会话永远不过时,应赋值为 -1。

注意将 timestamp_timeout 的值赋为 “-1” 是强烈不推荐的。

sudo 密码

你可能注意过,当 sudo 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。

好消息是那有可能也很容易做到。所有你需要做的就是在 /etc/sudoers 文件里将下述的行:

Defaults env_reset

改成

Defaults env_reset,pwfeedback

然后保存文件。

现在,无论什么时候输入 sudo 密码,星号都会显示。

So lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo

hide the sudo password

一些重要的 sudo 命令行参数

除了 -u 命令行参数(我们已经在这篇教程的开始部分讨论过了),还有其他重要的 sudo 命令行参数值得注意。在这部分,我们将会讨论其中一些。

-k 参数

考虑下这种情况:输入密码后你刚刚运行了几个 sudo 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用 sudo ,你将会怎么做?

还好,有 -k 命令行参数允许用户取消 sudo 权限。这是 sudo 帮助页面(man page)对此的解释:

-k, --reset-timestamp

不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用 sudo 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 .logout 文件中来撤销 sudo 权限。

当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致 sudo 忽略用户缓存的凭据。结果是 sudo 要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。

-s 参数

有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变 /etc/sudoers 文件调整 sudo 会话的过期时限。

这种情况下,你可以用 sudo 的 -s 参数。这是 sudo 帮助页面对此的解释:

-s, --shell

Wenn die Umgebungsvariable SHELL gesetzt ist oder die Shell durch Aufrufen der Passwortdatenbank des Benutzers angegeben wird, wird die Shell ausgeführt. Wenn ein Befehl angegeben ist, wird der Befehl über den Parameter -c der Shell zur Ausführung an die Shell übergeben. Wenn kein Befehl angegeben ist, wird eine interaktive Shell ausgeführt.

Dieser Befehlsparameter bewirkt also im Grunde Folgendes:

Starten Sie eine neue Shell – Informationen zu der Shell finden Sie in der Zuweisung der SHELL-Umgebungsvariablen. Wenn $SHELL leer ist, wird die in /etc/passwd definierte Shell verwendet.
Wenn Sie einen Befehlsnamen mit dem Parameter -s übergeben (z. B. sudo -s whoami), wird tatsächlich sudo /bin/bash -c whoami ausgeführt.
Wenn Sie versuchen, keine anderen Befehle auszuführen (das heißt, Sie führen einfach sudo -s aus), erhalten Sie eine interaktive Shell mit Root-Rechten.

Denken Sie daran, dass Sie mit dem Befehlszeilenparameter -s eine Shell mit Root-Rechten erhalten, es sich jedoch nicht um eine Root-Umgebung handelt – sie führt weiterhin Ihre eigene .bashrc-Datei aus. Wenn Sie beispielsweise in einer neuen Shell mit sudo -s den Befehl whoami ausführen, wird immer noch Ihr Benutzername zurückgegeben, nicht root.

-i-Parameter

Der Parameter -i ähnelt dem besprochenen Parameter -s. Es gibt jedoch einen Unterschied. Ein wichtiger Unterschied besteht darin, dass -i Ihnen eine Root-Umgebung gibt, was bedeutet, dass die .bashrc-Datei Ihres (Benutzers) ignoriert wird. Dies ist so, als würden Sie Root werden, ohne sich explizit als Root anzumelden. Darüber hinaus müssen Sie nicht das Root-Benutzerkennwort eingeben.

Wichtig: Bitte beachten Sie, dass Sie mit dem su-Befehl auch den Benutzer wechseln können (standardmäßig root). Für diesen Befehl müssen Sie Ihr Root-Passwort eingeben. Um dies zu vermeiden, können Sie es mit sudo (sudo su) ausführen, sodass Sie nur Ihr Login-Passwort eingeben müssen. Es gibt jedoch implizite Unterschiede zwischen su und sudo su – mehr darüber und wie sie sich von sudo -i unterscheiden, erfahren Sie hier.

Zusammenfassung

Ich hoffe, Sie kennen jetzt zumindest die Grundlagen von sudo und wissen, wie Sie das Standardverhalten von sudo anpassen. Bitte versuchen Sie, /etc/sudoers wie erläutert anzupassen. Durchsuchen Sie auch die Forumsdiskussionen, um mehr über den Befehl sudo zu erfahren.

Das obige ist der detaillierte Inhalt vonSo lösen Sie Fehlermeldungen in der Linux-Befehlszeile: Verwenden Sie den Befehl sudo. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:linuxprobe.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen