Auf einige Befehle kann nicht zugegriffen werden, wenn man als Nicht-Root-Benutzer angemeldet ist (auch nach „su root“)

Auf einige Befehle kann nicht zugegriffen werden, wenn man als Nicht-Root-Benutzer angemeldet ist (auch nach „su root“)

Also, ich verstehe nicht, was hier passiert.

Ich habe einen Debian 10.2-Server eingerichtet und ihn so konfiguriert, wie ich es zuvor mit anderen Servern getan habe. Alles funktioniert einwandfrei, und da es sich um eine lokale Maschine handelt und ich der einzige Benutzer bin, habe ich für alles Root verwendet. Jetzt wollte ich die SSH-Root-Anmeldung deaktivieren.

Wenn ich mich jedoch als Nicht-Root-Benutzer über SSH anmelde, werden grundlegende Befehle wie „service“ oder „reboot“ nicht gefunden. (Bash: Service: Befehl nicht gefunden.)

Noch seltsamer ist, dass ich nicht einmal auf diese Dinge zugreifen kann, wenn ich „su root“ verwende. Ich bin zwar der Root-Benutzer, kann aber trotzdem nicht auf diese Befehle zugreifen/sie finden.

Wenn Sie sich direkt als Root-Benutzer anmelden, funktioniert alles wie es soll.

Antwort1

PATHDie Umgebungsvariable Ihres Benutzers enthält nicht den Pfad, in dem sich diese Dateien befinden. Wenn Sie verwenden su -, werden die Umgebungsvariablen von root in Ihre Sitzung geladen. Siehe man su:

   -, -l, --login
          Start the shell as a login shell with an environment similar
          to a real login:

             o      clears all the environment variables except TERM and
                    variables specified by --whitelist-environment

             o      initializes the environment variables HOME, SHELL,
                    USER, LOGNAME, and PATH

             o      changes to the target user's home directory

             o      sets argv[0] of the shell to '-' in order to make
                    the shell a login shell

Um dies besser zu verstehen, schauen wir uns an, wo sich eine dieser Binärdateien befindet, und vergleichen den PATH von root mit Ihrem:

  1. Tunsu -
  2. do which service. Dadurch erfahren Sie, woher die serviceBinärdatei geladen würde, wenn Sie den Befehl ausführen würden service.
  3. tun echo $PATH. Dadurch wird Ihnen der Pfad des Stammverzeichnisses angezeigt. Sie werden feststellen, dass das Verzeichnis, in dem es servicezu finden ist, hier aufgeführt ist.
  4. tun exit, um wieder Ihr Nicht-Root-Benutzer zu werden.
  5. Sie werden sehen, dass das Verzeichnis, das echo $PATHSie in Schritt 2 identifiziert haben, nicht hier ist.

Dies ist eine normale Standardeinstellung in bestimmten Umgebungen/Distributionen, in denen bestimmte Verwaltungsprogramme wie service, fdisk, usw. in einem Verzeichnis wie /usr/sbinoder gespeichert werden /sbin, wobei solche Verzeichnisse von den PATHs normaler Benutzer ferngehalten werden.

verwandte Informationen