Der Befehl wurde nur gefunden, wenn er mit "sudo" im Terminal verwendet wurde

448
wailay

Ich bin auf Debian 9. Es gibt einige Befehle, die nicht gefunden werden können, wenn ich nicht sudodirekt tippe. Kann ich diese Funktion deaktivieren?

Ich habe Arch Linux und es gibt diese Sicherheitsfunktion nicht. Mein Benutzer ist in der Admin-Gruppe.

0
Bitte geben Sie Beispiele für die Befehle. Sudo ist seit geraumer Zeit ein fester Bestandteil der Linux-Sicherheit. music2myear vor 6 Jahren 0
Befehle, für die erhöhte Berechtigungen erforderlich sind, funktionieren natürlich mit "sudo". Das bedeutet nicht, dass sie ohne es "nicht gefunden" werden können. Erfahren Sie, wie Sie mit Debian und Derivaten innerhalb des Sicherheitsmodells arbeiten. Dies wird unter https://help.ubuntu.com/community/RootSudo (Ubuntu basiert auf Debian) erläutert. GabrielaGarcia vor 6 Jahren 0
Ich kann iwconfig und ifconfig nicht ohne sudo verwenden, da sonst der Befehl nicht gefunden wird wailay vor 6 Jahren 0

2 Antworten auf die Frage

4
ivanivan

Unter Debian die Standardumgebung $PATHenv. var für den root-Benutzer (oder bei Verwendung sudo) enthält die Verzeichnisse /sbin/and /usr/sbin/und /usr/local/sbin/, wohingegen ein Benutzer ohne Rootberechtigung (selbst in der sudoGruppe usw.) diese Verzeichnisse nicht standardmäßig verwendet $PATH.

user@LM193:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games user@LM193:~$ sudo -i [sudo] password for user:  root@LM193:~# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin root@LM193:~#  
1
Kamil Maciorowski

Ich würde es nicht als Sicherheitsfunktion bezeichnen.

Eine ausführbare Datei kann nach ihrem alleinigen Namen ausgeführt werden, wenn sie in einem der durch PATHUmgebungsvariable angegebenen Verzeichnisse gefunden wird . In meinem Debian 9 /etc/profiledefiniert die Datei grundlegend PATHwie folgt:

if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" fi export PATH 

Dies bedeutet für jeden Benutzer mit UID 0(in meinem Debian nur für root) der Standard

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

(Verzeichnisse werden durch getrennt :) und für jeden anderen Benutzer ist es

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" 

Ich nenne es "default", weil es normalerweise /etc/profilefür jeden Benutzer geladen wird, aber der Benutzer kann seinen eigenen ändern PATH. Normalerweise ~/.profileist eine gute Datei dazu geeignet.

Wenn Sie laufen sudo some_command, sudoverwendet noch eine weitere Gruppe von Verzeichnissen statt PATH. Dieser Satz kann irgendwo in sudoconfig ( /etc/sudoers, /etc/sudoers.d/*) definiert sein oder nicht . Wenn es nicht explizit definiert ist /etc/sudoers, wird der Standardwert angegeben

secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

(Dies ist etwas vereinfacht, andere Optionen können diese Mechanik ändern; man 5 sudoersEinzelheiten hierzu).

Beachten Sie, dass PATHfür rootund secure_pathverwendet von sudonur wenige Verzeichnisse sbin(an verschiedenen Orten) benannt sind, während dies PATHfür normale Benutzer nicht gilt. In diesen Verzeichnissen gibt es Werkzeuge, die hauptsächlich von verwendet werden sollen root.

Wenn also sudo some_commanddie ausführbare Datei gefunden wird und die einzige some_commandnicht, liegt dies daran, dass sie some_commandsich in einem der Verzeichnisse befindet, die sich secure_pathin Ihrem Verzeichnis befinden, aber nicht in Ihrem PATH.

Dies ist jedoch keine Sicherheitsfunktion. Jeder Benutzer kann alle diese sbinVerzeichnisse zu seinen eigenen hinzufügen PATH, so dass some_commanddie Shell nach der Eingabe versucht, die ausführbare Datei auszuführen. Oder sie können einen vollständigen Pfad verwenden /sbin/some_command. Dann setzen echte Sicherheitsfunktionen ein:

  • Die Dateiberechtigungen können Benutzer ohne Rootberechtigung möglicherweise nicht ausführen (obwohl in Debian 9 viele (alle?) Systemdateien von jedem Benutzer ausgeführt werden können).
  • Die Datei wird zwar ausgeführt, kann jedoch nicht auf wichtige Ressourcen zugreifen. Daher wird ein Fehler ausgegeben und das Programm beendet (z. B. /sbin/hwclock).
  • Die Datei wird ausgeführt und verwendet einen bestimmten Authentifizierungsagenten, um Berechtigungen ohne zu erhöhen sudo(eine solche Datei würde höchstwahrscheinlich binzuerst eingefügt, Beispiel:) /bin/systemd;
  • oder die Datei wird erfolgreich ausgeführt, weil Sie sie trotz laufen können sbin(zB /sbin/discoverin meinem Debian).

Ihr Benutzerkonto ist nicht für die Ausführung some_commandohne eingerichtet, sudoda Sie es als normaler Benutzer nicht benötigen. Wenn Sie es trotzdem möchten, verwenden Sie einfach den vollständigen Pfad und erhalten Sie es ( whereis some_commandmöglicherweise nützlich). Wenn Sie PATHalle diese sbinVerzeichnisse mit Daten füllen, wird dies nur Ihre Tab-Vervollständigung (z. B. in Bash) verunreinigen.


Tab Vervollständigung verdient eine Erklärung. Nehmen Sie Bash als Beispielshell mit dieser Funktionalität. Die Shell hat PATHin ihrer Umgebung, sie kann sie lesen. Wenn Sie also tippen another_comund schlagen tab, können Sie einen Hinweis auf einen another_commandgefundenen Ort finden PATH. Wenn some_commandirgendwo drin ist sbin, some_com tabwerde ich es nicht finden.

sudo some_com tabKann es immer noch finden. Das mag seltsam erscheinen, weil die Schale nicht wissen kann, rootist PATHnoch kann sie lesen /etc/sudoersund so. Was passiert, ist, dass die Shell vorübergehend allgemeine sbinVerzeichnisse hinzufügt, um PATHnur diese Suche durchzuführen. Dies geschieht in der Datei /usr/share/bash-completion/completions/sudo, die entsprechende Zeile ist

local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin 

Um Ihre explizite Frage zu beantworten

Kann ich diese Funktion deaktivieren?

Ja, Sie können sbinVerzeichnisse hinzufügen PATH. Dies erlaubt es Ihnen jedoch nicht, Befehle erfolgreich auszuführen sudo, wenn sie wirklich benötigt werden sudo(und viele tun dies).

Der Grund, warum ich einen Befehl ohne sudo eingebe, ist nur, um sicherzustellen, dass sie existieren, bevor sie mit sudo versucht werden, und um mir etwas Zeit zu sparen. Ist es üblich, einem Sudoer-Benutzer "sbin" hinzuzufügen, oder es wird nicht empfohlen, da dies den Tab-Abschluss verpasst. Kannst du erklären, was "Wurf beim Tabulatorabschluss" bedeutet? wailay vor 6 Jahren 0
@ Wailay Ich weiß nicht, ob es üblich ist. Mit "Wurf" meine ich, dass Ihre Tab-Vervollständigung Ihnen Dinge anzeigt, die im Zusammenhang mit normalen Benutzern unbrauchbar sind (Wurf, Cruft). Denken Sie an eine Mehrbenutzerumgebung, in der die meisten Benutzer keinen sudo-Zugriff haben. Sie brauchen keine Werkzeuge von "sbin". Nur wenige Superusse oder Admins bilden Ausnahmen, nicht die Hauptbevölkerung. Sie sollten wissen, wie sie ihre Einstellungen anpassen können. Wenn Sie einen Grund haben, den "PFAD" zu erweitern, dann machen Sie weiter, es ist Ihr "PFAD" und schließlich Ihre Bequemlichkeit. In diesem Fall sollten Sie `~ / .profile` bearbeiten, nicht` / etc / profile`, auch wenn Sie der einzige Benutzer sind. Kamil Maciorowski vor 6 Jahren 0