CentOS8中恢復根目錄為預設許可權

夢共裡醉發表於2022-05-16
本文中介紹如何從意外執行 # chmod -R 777 / ,在 8作業系統上恢復預設許可權。

本文中我們將故意在一個測試伺服器上執行 chmod 777 ,並嘗試透過執行兩個命令進行恢復。就是如下兩條命令:

# rpm --setugids -a
# rpm --setperms -a

當再測試機上面執行下面命令之後,所有檔案許可權都會變成777。

[root@localhost ~]# chmod -R 777 /

列出根目錄下面的內容:

[root@localhost ~]# ls -al /

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
下面是SSH相關的重要檔案,需要有正確的許可權和所有權。但是,由於執行chmod 777,以下所有檔案都具有錯誤的許可權。

[root@localhost ~]# ll /etc/ssh/
total 588
-rwxrwxrwx. 1 root root     563386 May 11  2019 moduli
-rwxrwxrwx. 1 root root       1727 May 11  2019 ssh_config
drwxrwxrwx. 2 root root         28 Dec 29  2019 ssh_config.d
-rwxrwxrwx. 1 root root       4444 May 11  2019 sshd_config
-rwxrwxrwx. 1 root ssh_keys    480 Dec 29  2019 ssh_host_ecdsa_key
-rwxrwxrwx. 1 root root        162 Dec 29  2019 ssh_host_ecdsa_key.pub
-rwxrwxrwx. 1 root ssh_keys    387 Dec 29  2019 ssh_host_ed25519_key
-rwxrwxrwx. 1 root root         82 Dec 29  2019 ssh_host_ed25519_key.pub
-rwxrwxrwx. 1 root ssh_keys   1799 Dec 29  2019 ssh_host_rsa_key
-rwxrwxrwx. 1 root root        382 Dec 29  2019 ssh_host_rsa_key.pub

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權

帶有chmod 777許可權的SSH

下面嘗試透過SSH遠端登入伺服器。由於主機金鑰檔案許可權都變成了777了,所以登入會被拒絕。

下面再終端中ssh登入本機出現下面問題:
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
下面使用X 登入伺服器,同樣不能登入成功:

[C:\~]$ ssh root@192.168.43.131
Connecting to 192.168.43.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.43.131:22) at 10:28:06.
Type `help' to learn how to use Xshell prompt.

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權

恢復許可權

需要恢復許可權,我們需要載入Centos8的系統映象,開機啟動光碟映象:

在VMware Workstation中,載入光碟,並開機器用。開機按F2,進入BIOS,切換到Boot選項卡。將CD-ROM Drive移動到Hard Drive上面。按F10儲存並重啟。
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
選擇Troubleshooting,然後選擇進入救援模式。
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
當進入下面介面時,選擇1,直接進入shell介面。
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
使用 chroot命令將 /mnt/sysroot切換為根目錄:

sh-4.4#  chroot /mnt/sysroot

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
使用以下兩個命令執行,以恢復所有檔案,目錄和配置的許可權。執行此命令時,它將引發許可權被拒絕錯誤,並且無法訪問錯誤。只是忽略錯誤。

# rpm --setugids -a
# rpm --setperms -a

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
引數說明:

  • --setugids - 設定RPM包檔案的使用者/組所有權。
  • --setperms - 設定RPM包檔案的許可權。
  • -a - 適用於所有已安裝的RPM軟體包。

完成操作之後,退出,並重啟:

# exit
# reboot
檢視許可權、SSH連線伺服器測試

下面登入系統之後,看一下根目錄的許可權是否恢復正常:

# ls -l /

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
執行ssh登入,發現不能登入。使用 netstat -tlunp發現ssh埠沒有監聽中,使用 systemctl status sshd發現服務沒有啟動,啟動sshd服務時發現不能啟動,下面查詢原因:

發現金鑰檔案的許可權還是777,沒有還原:
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
下面設定金鑰檔案許可權:

# chmod 644 /etc/ssh/ssh_config
# chmod 600 /etc/ssh/sshd_config
# chmod 640 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
# chmod 644 /etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
下面再次啟動sshd試一下:

# systemctl enable sshd --now
# netstat -tlunp

Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權
可以看到啟動成功了。ssh遠端登入試一下,看到登入成功了。
Centos8中恢復根目錄為預設許可權Centos8中恢復根目錄為預設許可權

總結

就這樣,我們已經成功還原了已安裝的RPM軟體包的許可權並恢復了伺服器。切勿在任何檔案系統或配置上使用chmod 777。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2894394/,如需轉載,請註明出處,否則將追究法律責任。

相關文章