.png)
だから、ここで何が起こっているのか分かりません。
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 と比較してみましょう。
- する
su -
- を実行します。これにより、コマンドを実行した場合にバイナリが
which service
どこからロードされるかがわかります。service
service
- を実行します。これにより、ルートの PATH が表示されます。ここには、見つかる
echo $PATH
ディレクトリがリストされていることがわかります。service
exit
再度非ルートユーザーになるには、次の手順を実行します。- 実行します
echo $PATH
。手順 2 で指定したディレクトリがここにないことがわかります。
service
これは、、などの特定の管理プログラムが、またはfdisk
などのディレクトリに保存され、そのようなディレクトリが通常のユーザーの PATH から除外されている特定の環境/ディストリビューションでの通常のデフォルト設定です。/usr/sbin
/sbin