導語:平常運維人員會誤操作一些目錄許可權,導致一些問題,那麼如何恢復呢?
問題:物理機、虛機等等Linux作業系統/usr/bin目錄許可權誤操作,導致無法切換root?
實驗環境:
ip地址 | 是否目錄正常 | 核心版本 | 備註 |
192.168.140.136 | 目錄正常機器 | 3.10.0-1160.el7.x86_64 | |
192.168.140.138 | 目錄損壞機器 | 3.10.0-1160.el7.x86_64 |
誤操作
問題現象
解決方案:可以通過系統自帶的getfacl命令來拷貝和還原系統許可權,若是其他系統目錄被誤操作,同樣可行。修復的方法如下
(1)儘量找一臺相鄰且相同核心正常的物理機、虛機,登陸上去,執行自帶的getfacl命令拷貝該目錄的系統許可權
[root@master ~]#getfacl -Rp /usr/bin > systemp_list.bak #將/usr/bin目錄下的所有檔案的許可權都備份儲存在systemp_list.bak
補充說明:
setfacl命令 是用來在命令列裡設定ACL(訪問控制列表)。在命令列裡,一系列的命令跟隨以一系列的檔名。
選項
-b,--remove-all:刪除所有擴充套件的acl規則,基本的acl規則(所有者,群組,其他)將被保留。
-k,--remove-default:刪除預設的acl規則。如果沒有預設規則,將不提示。
-n,--no-mask:不要重新計算有效許可權。setfacl預設會重新計算ACL mask,除非mask被明確的制定。
--mask:重新計算有效許可權,即使ACL mask被明確指定。
-d,--default:設定預設的acl規則。
--restore=file:從檔案恢復備份的acl規則(這些檔案可由getfacl -R產生)。通過這種機制可以恢復整個目錄樹的acl規則。此引數不能和除--test以外的任何引數一同執行。
--test:測試模式,不會改變任何檔案的acl規則,操作後的acl規格將被列出。
-R,--recursive:遞迴的對所有檔案及目錄進行操作。
-L,--logical:跟蹤符號連結,預設情況下只跟蹤符號連結檔案,跳過符號連結目錄。
-P,--physical:跳過所有符號連結,包括符號連結檔案。
-p, --absolute-names 不去除路徑前的 '/' 符號
--version:輸出setfacl的版本號並退出。
--help:輸出幫助資訊。
--:標識命令列引數結束,其後的所有引數都將被認為是檔名
-:如果檔名是-,則setfacl將從標準輸入讀取檔名。
(2)將生成的systemp_list.bak拷貝到目錄誤操作損壞的機器上
[root@master ~]# scp systemp_list.bak [email protected]:/home/xxx/
(3)在異常伺服器進入單使用者中執行命令setfacl --restore=systemp.bak即可將現在的系統許可權恢復成和正常系統一樣
①重啟機器在這個頁面按E進入編輯
②將ro 改成 rw init=/sysroot/bin/sh 按ctrl-x進入單使用者 ,chroot /sysroot 掛載系統盤
③切換到systemp_list.bak所在的目錄然後執如下命令
setfacl --restore=systemp.bak
④執行完後使其生效touch ./autorelable 重啟reboot機器即可恢復正常