非ルートユーザーでログインすると、一部のコマンドにアクセスできません (「su root」を実行した後でも)

非ルートユーザーでログインすると、一部のコマンドにアクセスできません (「su root」を実行した後でも)

だから、ここで何が起こっているのか分かりません。

Debian 10.2 サーバーをセットアップし、以前他のサーバーで行ったように構成しました。すべて正常に動作し、ローカル マシンであり、ユーザーが私だけなので、すべてに root を使用しました。ここで、ssh root ログインを無効にしたいと考えました。

しかし、非ルートユーザーを使用して SSH 経由でログインすると、「service」や「reboot」などの基本コマンドが見つかりません。(Bash: サービス: コマンドが見つかりません。)

さらに奇妙なことに、「su root」を使用しても、これらのコマンドにアクセスできません。私は確かにルート ユーザーですが、それでもこれらのコマンドにアクセスしたり、見つけたりすることはできません。

root ユーザーで直接ログインすると、すべてが正常に動作します。

答え1

ユーザーのPATH環境変数には、これらのファイルが配置されているパスが含まれていません。 を使用するとsu -、ルートの環境変数がセッションに読み込まれます。 を参照してください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

これをよりよく理解するために、これらのバイナリの 1 つがどこにあるかを確認し、ルートの PATH を自分の PATH と比較してみましょう。

  1. するsu -
  2. を実行します。これにより、コマンドを実行した場合にバイナリがwhich serviceどこからロードされるかがわかります。serviceservice
  3. を実行します。これにより、ルートの PATH が表示されます。ここには、見つかるecho $PATHディレクトリがリストされていることがわかります。service
  4. exit再度非ルートユーザーになるには、次の手順を実行します。
  5. 実行しますecho $PATH。手順 2 で指定したディレクトリがここにないことがわかります。

serviceこれは、、などの特定の管理プログラムが、またはfdiskなどのディレクトリに保存され、そのようなディレクトリが通常のユーザーの PATH から除外されている特定の環境/ディストリビューションでの通常のデフォルト設定です。/usr/sbin/sbin

関連情報