使用非 root 使用者登入時無法存取某些命令(即使在“su root”之後)

使用非 root 使用者登入時無法存取某些命令(即使在“su root”之後)

所以,我不明白這裡發生了什麼事。

我已經設定了 Debian 10.2 伺服器並像之前對其他伺服器所做的那樣進行配置。一切工作正常,因為它是本地計算機,而且我是唯一的用戶,所以我使用 root 執行所有操作。現在我想停用 ssh root 登入。

但如果我使用非 root 用戶透過 SSH 登錄,它找不到“service”或“rebo​​ot”等基本命令。 (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 與您的進行比較:

  1. su -
  2. which service。如果您要執行該命令,這將告訴您service將從哪裡載入二進位檔案service
  3. echo $PATH。這將顯示 root 的路徑。您會注意到service此處列出了可以找到的目錄。
  4. 再次成為exit您的非 root 使用者。
  5. echo $PATH。您將看到您在步驟 2 中標識的目錄不在這裡。

這是某些環境/發行版中的正常預設設置,其中某些管理程式(例如servicefdisk等)保存在諸如/usr/sbin或 之類的目錄中/sbin,並且此類目錄遠離普通用戶的路徑。

相關內容