一個經典錯誤
我們錯誤地sudo chown -R ubuntu:www-data /
在 ubuntu 20.04 AWS EC2 伺服器上執行了此操作。雖然有很多帖子表明我無法挽救機器並且必須重新安裝新機器 - 我想獲取在此伺服器上運行的 postgres 的副本。目前我們無法使用 sudo 執行任何指令。因此我們無法啟動 postgres 或透過 phppgadmin 登入。
我們做了以下工作:
- 停止實例
- 分離捲
- 建立了一個新實例
- 附上捲
- 已安裝卷
- 在新實例中更改為 root
- 做了
chown -R root:root /mnt/rescue
(將其更改為root:ubuntu
、ubuntu:ubuntu
等) - 做了
chmod -R 4755 /mnt/rescue
(也做了0755
,ug-s
等等) - 退出根目錄
umount /mnt/rescue
- 關閉救援實例
- 分離音量
- 將磁碟區附加到損壞的電腦。機器指示新所有者 - 但 sudo 不起作用。
- 我們嘗試建立一個新實例 - 附加此更正後的捲,更新 /etc/fstab - 重新啟動實例。我們將磁碟區與機器合併。重新啟動後 - 仍然是相同的問題 - 無法 sudo。
我們當然可以重新建立機器或進行備份和還原。然而,一些關鍵任務資料駐留在 postgres 中。我如何 sudo,或從死掉的 postgres 中檢索文件。
我們常面臨這樣的錯誤:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
但是,當我在 /usr 或 /usr/bin 內的任何位置執行 ls -l 時 - 所有檔案的全部所有權仍屬於 ubuntu:ubuntu 或我們嘗試過的其他組合。
答案1
嘗試設定 setuid 位元並使其對 root 可執行,這是 sudo 的預設權限 (rws)
chmod u+s /mnt/rescue/usr/bin/sudo
chmod +x /mnt/rescue/usr/bin/sudo
雖然這對於恢復系統很有用,但還有許多其他檔案和目錄具有不同的此類權限和所有權,單獨設定它們可能會很乏味。