這個 HOME 環境變數在哪裡,我還需要添加什麼 -H 呢?
我最近嘗試執行一個失敗的啟動腳本,我不知道它為什麼會失敗,所以我在這裡發布了一個關於此的問題。
使用者 schaiba 建議我
>> /tmp/test.log 2>&1
在啟動腳本末尾添加以記錄並找出它不啟動的原因。我意識到它有以下問題。
sudo:對不起,你必須有一個 tty 才能執行 sudo 失敗
我查看了我的腳本並找到了這一行,這幾乎是啟動我的 java 程序的重要行。(這是
$cmd
)javaCommand="java" # name of the Java launcher without the path javaArgs="-classpath .:recaptcha4j-0.0.8.jar:mysql-connector-java-3.0.17-ga-bin.jar ChatServer" # arguments for Java launcher javaCommandLine="$javaCommand $javaArgs" # command line to start the Java service application cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" # Don't forget to add -H so the HOME environment variable will be set correctly. sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
在查看如何處理有關 sudo 失敗的錯誤時.. 許多解決方案表明我應該禁用另一篇文章中寫的預設設置
require-tty
會給etc/sudoers
我一個安全漏洞,SSH 使用者可以看到我的 root 密碼,即使 SSH 已經登錄 root 哈哈,無論如何我不想禁用任何安全性。我的猜測是我需要將 -H 添加到一些 Home 環境變數中,我不知道這意味著什麼,有人知道我必須在那裡做什麼嗎?
在
$SHELL
腳本中的任何地方都找不到變數,$serviceUser
是root
.
$HOME
是在使用者登錄時設置的環境變數。根據您的登錄方式,設置它的實際程序可能會有所不同。如果您通過控制台登錄(包括telnet/rlogin/etc),那麼它將由login
程序設置。如果您通過 SSH 登錄,它將由sshd
. 如果您使用桌面管理器登錄,您的桌面管理器可能會為您設置它。您需要使用的原因
-H
是在執行 sudo 時重置$HOME
環境變數,以便另一端獲取其他使用者的$HOME
sudo,而不是您正在執行 sudo 的使用者,某些環境允許傳播。然而,這不是你真正的問題。當 sudo 提示輸入密碼時,您需要一個 tty,而在執行非互動式腳本時您沒有。考慮到您從其他地方獲得此腳本,這可能意味著此腳本要麼 a.) 未正確編寫,要麼 b.) 僅在已以 root 身份執行時編寫使用(也許
-H
這裡被用作嘗試清理的迂迴方式一個潛在的 unclean$HOME
,儘管這樣做有點奇怪)。我建議聯繫作者或維護者。