如何從整個檔案系統上設定的擴充權限恢復對 RHEL 系統的遠端存取?

如何從整個檔案系統上設定的擴充權限恢復對 RHEL 系統的遠端存取?

問題原因

我打算透過以下內容新增對「.hgignore」等隱藏檔案的群組寫入權限:

#密碼
/選擇
# sudo chmod -R g+w .*

問題是“..”與此模式匹配,現在整個 RHEL 檔案系統都設定了 g+w。眼前的問題如下:

  • /etc/sudoers需要設定為440,而不是460,所以現在使用者無法使用sudo。
  • 一些與上面類似的機制不允許 ssh 存取。 (遠端 ssh 用戶端收到訊息「ssh_exchange_identification:連線被遠端主機關閉」錯誤)

問題

為了重新獲得遠端登入的能力,需要指導能夠物理存取伺服器的人員如何修復系統。

現在的問題是:哪些重要的檔案和目錄需要恢復其權限才能恢復sshsudo功能?

關於「作為重複項關閉」的注意事項

問題為什麼「chmod -R 777 /」具有破壞性?詳細解釋了遞歸擴展權限可能產生的影響。這個問題旨在回答如何透過 ssh 重新獲得遠端存取權限,以便可以執行更廣泛的恢復和修復。

答案1

對於屬於套件一部分的文件,您可以透過執行以下操作找出搞砸的內容

rpm --驗證“包名”

其中 packagename 是單一套件,或者您可以循環遍歷「rpm -qa」的輸出

然後你應該能夠使用 rpm 來修復它們,例如

rpm --setperm "包名"

答案2

ssh 的問題不僅限於 /etc 下,還與您嘗試連接的使用者的 .ssh 資料夾具有不正確的權限有關。通常,使用者的 .ssh 資料夾應為 700,私鑰應為 600,其他所有內容都可以為 644。

/etc/ssh 資料夾應為 755,/etc/ssh 下的私鑰應為 600,其他所有內容應為 644。

如何從 /etc 中的錯誤權限恢復伺服器?

最簡單的方法之一可能是從備份中還原。您確實進行了備份並測試了復原過程,對嗎? :)

如果您沒有可用於還原的備份,則可能需要在虛擬機器中設定相同的乾淨系統,然後透過比較兩者來修復基於您的伺服器的主機上的權限。

答案3

如果您有一台已知良好的伺服器,則在該良好伺服器上運行類似以下內容可能會幫助您恢復它。 (假設遞歸通配能力(zsh),可以使用 find 和 -exec / xargs 來代替):

for i in /etc/**/*; do
    perm=$(stat "$i" -c "%a")
    ssh root@badServerHostName "chmod $perm $i"
done

可能是幾個子目錄,以排除其他可能添加的內容...如果可以的話,Rsync 會更好僅有的權限,但我不認為可以。

答案4

如果您有備份並且有 LVM 和足夠的空間,您可以執行以下操作:

1. 將備份還原到新的臨時 lv(將其安裝在 /oldperm 下)
2. 執行類似以下偽代碼的操作:

foreach oldfile in /oldperm/* {  
  newf = strip "/oldperm" from oldfile  
  chmod --reference=oldfile newf  
}

您可以部分恢復,例如先恢復 /etc 下的所有內容,以防出現空間問題。這個技巧依賴 chmod 的標誌 --reference ,它將另一個檔案作為模板,並使參數在權限方面匹配。

這樣您只需恢復舊的權限而不更改檔案的內容。

相關內容