
所以,我不明白這裡發生了什麼事。
我已經設定了 Debian 10.2 伺服器並像之前對其他伺服器所做的那樣進行配置。一切工作正常,因為它是本地計算機,而且我是唯一的用戶,所以我使用 root 執行所有操作。現在我想停用 ssh root 登入。
但如果我使用非 root 用戶透過 SSH 登錄,它找不到“service”或“reboot”等基本命令。 (Bash:服務:未找到指令。)
更奇怪的是,當我使用“su root”時,我什至無法訪問這些東西。我確實是 root 用戶,但仍然無法訪問/找到這些命令。
當直接使用 root 使用者登入時,一切都會正常進行。
答案1
您的使用者的PATH
環境變數不包含這些檔案所在的路徑。當您使用 時su -
,root 的環境變數會載入到您的會話中。看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
為了更好地理解這一點,讓我們看看這些二進位檔案之一在哪裡,並將 root 的 PATH 與您的進行比較:
- 做
su -
- 做
which service
。如果您要執行該命令,這將告訴您service
將從哪裡載入二進位檔案service
。 - 做
echo $PATH
。這將顯示 root 的路徑。您會注意到service
此處列出了可以找到的目錄。 - 再次成為
exit
您的非 root 使用者。 - 做
echo $PATH
。您將看到您在步驟 2 中標識的目錄不在這裡。
這是某些環境/發行版中的正常預設設置,其中某些管理程式(例如service
、fdisk
等)保存在諸如/usr/sbin
或 之類的目錄中/sbin
,並且此類目錄遠離普通用戶的路徑。