除了 sudo 之外,有沒有一種可靠的方法可以讓多個使用者帳戶以 root 身份執行?
我和一個朋友正在管理相當數量的虛擬機,每台虛擬機都致力於整個系統中的某些任務。當我們需要管理它們時,我們通常以 root 身份登錄,因為我們登錄機器的唯一時間是我們需要在它們中執行管理任務時。我們不使用 sudo,因為我們執行的每個命令通常都是 sudo 命令。
我們希望在這些機器上保持我們的帳戶分開,給我們單獨的 .bash_history,查看另一個人上次登錄的時間等。為此,我們需要兩個具有完全 root 權限的帳戶。
一種方法是將我們的普通使用者帳戶更改為 UID = 0 GID = 0,即與 root 相同,但是在這個問題中我被該解決方案勸阻:是否有任何陷阱通過使他們 UID = 授予使用者 root 權限0 GID=0?
$$ That question is the same as this, up to here $$ 該問題的答案是使用 sudo,但正如我所提到的,sudo 對於我們的案例來說非常不方便。幾乎所有在這些 VM 上執行的命令都是 sudo 命令(
| sudo tee >\dev\null
對於每個輸出重定向都令人麻木!),因此 sudo 可能比擁有單獨的歷史記錄和其他帳戶日誌記錄更不方便。然後我的後續問題變成:除了 sudo 之外,是否有一種可靠的方法可以讓多個使用者帳戶以 root 身份執行?或者有沒有辦法讓 sudo 更方便(除此之外沒有
sudo -i
達到目的)。
如果您使用
sudo -s
的$HOME
是未更新的,那麼您的 shell 歷史記錄將保存在您自己的帳戶中。(請記住,其他配置/歷史文件,例如由 創建的那些
vim
,也以 root 身份創建。這意味著您最終可能會在主目錄中擁有 root 擁有的文件。這可能會在您需要時創建“有趣”的情況修改它們而不是 root,有時你需要執行類似chown -R myusername "$HOME"
修復它的東西。)
這是我們在之前的工作中處理這個問題的方式。
首先,我們有一個安全的堡壘主機,管理員可以登錄該主機以獲取對目標機器的所有 root 訪問權限。該主機配置了一個特殊
keymaster
帳戶,該帳戶持有與目標主機上的 root 對應的私鑰。(我們還有一個系統,新主機會自動註冊自己。但這超出了這裡的範圍。)管理員將使用使用者級帳戶登錄此堡壘主機,然後連接到目標系統。
除了我們少數可以訪問堡壘主機本身的 root 之外,沒有管理員可以直接訪問密鑰;相反,他們使用
connect
在 sudo 下執行的命令(作為keymaster
,而不是 root)進行連接。該連接命令將環境變數設置REMOTE_ADMIN
為連接使用者的名稱,並以 root 使用者身份連接到目標系統。然後,將遠端系統設置為具有
AcceptEnv=REMOTE_ADMIN
insshd_config
和 .bashrc 文件以設置BASH_HISTORY
為~/.bash_history-$REMOTE_ADMIN
.使用此設置,不同的
.bash_history
文件不是安全記錄,但至少出於非惡意回顧所發生情況的目的,它們是不同的。安全記錄在堡壘主機上,顯示誰何時連接。(我們也將 2FA 用於sudo connect
命令。)此外,除了破壞主機之外,無需擔心指定係統之外的 root 訪問(無論是惡意的還是只是為了“方便”)。雖然可以停用密鑰,但沒有必要僅僅因為某人的訪問級別發生了變化就這樣做。
您可以使用此解決方案的全部或部分;僅僅擁有
.bash_history-$SUDO_USER
可能就足夠了,這取決於你真正想要完成的事情。