Centos

如何執行 su root 並在腳本中輸入憑據?

  • November 12, 2020

我有一個腳本,它需要由 root 使用者執行。我只是想知道如何在腳本中使用su該腳本。- 我正在執行 CentOS7。

我嘗試的命令(如下)失敗:

su root credentials=/home/root/root.cred

然後繼續腳本的其餘部分 - 遺憾的是它沒有工作。我包含了 .cred 文件,因為 root 在更改為 root 時會要求輸入 root 密碼。有沒有辦法su root在腳本中執行並更改為 root。

有任何想法嗎?


我可能會感到困惑,但我只想進一步解釋:

我有一個腳本,我希望能夠從正常(非 sudoer)使用者執行,但此命令是 sudo 命令 - 因此只能由 sudoer 執行。root 是一個 sudoer,所以當腳本由普通使用者執行時 - 它將在腳本中以 root 身份執行。如果我用它開始腳本su root就無法通過它,因為它需要密碼。有沒有辦法輸入 root 密碼以通過su命令並使用腳本本身執行腳本的其餘部分。也許echo還是什麼?- 我不知道,這就是我提出這個問題的原因。

任何進一步的問題,請在下面問我:)

沒有一種機制可以安全地“在腳本的其餘部分將使用者轉換為 root”。從使用者級別獲取 root 權限的所有方法都必須使用新憑據啟動單獨的 shell 或程序實例,以提升程序的權限。為了解決使用者在 shell 中輸入命令的問題,我們應該使用sudo系統。

對於您的問題,解決方案是將要提升的腳本部分分離到另一個腳本中,並在第一個“普通使用者”部分的末尾使用 sudo 啟動它。如 Parsa Mousavi的答案所示,您將使用visudo編輯 sudoers 文件並對其進行配置,如果您願意,可以授予普通使用者執行 root 腳本的權限而無需輸入密碼。

重要提示:您必須在 sudoers 定義中指明腳本和參數(如果有)的完整路徑,並在呼叫腳本中編寫完全相同的路徑和參數。說,如果您/bin/mount /cdrom在 sudoers 文件中授權,則必須在呼叫腳本中說明sudo /bin/mount /cdrom此操作。如果您的腳本在 sudoers 文件中沒有任何參數,例如/root/my_script.sh,那麼您將在sudo /root/my_script.sh不帶參數的情況下呼叫它。此外,您必須使腳本歸 root 所有(並應用chmod go-w到它),因此沒有人可以修改它並不正確地執行未經授權的命令。

您必須在/etc/sudoers文件中添加一個條目才能在不使用任何密碼的情況下僅以 root 身份執行您的腳本:

username ALL = (root) NOPASSWD: /your/script's/absolute/address

您必須將 替換為username您自己的使用者名。

但從某種意義上說,如果非特權(即非 sudoer)使用者篡改了您的腳本,那麼他/她可以在沒有任何密碼的情況下以 root 權限執行他/她想要的任何程序,因此安全措施是使該文件對非 root 使用者只讀:

sudo chmod 755 your_script

通過這樣做,您授予非 sudoer 使用者讀取和執行(但不寫入)腳本的權限。

並且還為了防止任何未來的回歸:

sudo chown root your_script

通過這樣做,您將文件的所有權僅授予 root。

引用自:https://unix.stackexchange.com/questions/590683