全部產品
Search
文件中心

:Linux執行個體中關鍵的系統使用者不存在

更新時間:Aug 28, 2024

當Linux執行個體中關鍵的系統使用者不存在時,可能導致無法遠程登入。您可以通過執行個體健康診斷工具進行問題修複。

前提條件

Linux執行個體已通過執行個體健康診斷工具進行診斷,診斷結果中執行個體無法啟動情境的根帳號檢查未通過。

背景資訊

問題描述:在Linux作業系統中,/etc/passwd檔案儲存體了系統所有使用者的基本資料,/etc/shadow檔案儲存體了系統使用者的密碼資訊。如果檔案中關鍵的系統使用者資訊(例如root使用者及密碼)丟失,將導致無法正常登入該執行個體。

解決方案:您需要恢複/etc/passwd/etc/shadow設定檔的資訊。此外,/etc/group檔案中存放了系統使用者組的基本資料以及使用者與使用者組之間的關係資訊,也需要一同修複。

操作步驟

  1. 準備正確的系統使用者資訊設定檔。

    由於不同的Linux發行版中關鍵的系統使用者有所不同,且您在使用過程中可能建立了其它系統使用者,因此修複系統關鍵使用者資訊丟失的問題需要您根據不同的Linux發行版而定。

    建議您通過一台正常啟動並執行ECS執行個體擷取正確的系統使用者設定檔資訊,作為修複問題執行個體的參考檔案。正常啟動並執行ECS執行個體需要和問題執行個體使用同一Linux發行版本,並且安裝了相同的軟體包。所需正確的系統使用者設定檔資訊的路徑如下所示:

    • /etc/passwd
    • /etc/shadow
    • /etc/group
    您可以直接在正常啟動並執行ECS執行個體內查看正確的設定檔資訊,也可以將正確的設定檔資訊下載至本地主機進行查看。本文以CentOS 7.5系統為例,設定檔的內容樣本如下:
    • /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      adm:x:3:4:adm:/var/adm:/sbin/nologin
      lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      sync:x:5:0:sync:/sbin:/bin/sync
      shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
      halt:x:7:0:halt:/sbin:/sbin/halt
      mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      operator:x:11:0:operator:/root:/sbin/nologin
      games:x:12:100:games:/usr/games:/sbin/nologin
      ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      nobody:x:99:99:Nobody:/:/sbin/nologin
      systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
      dbus:x:81:81:System message bus:/:/sbin/nologin
      polkitd:x:999:998:User for polkitd:/:/sbin/nologin
      sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
      postfix:x:89:89::/var/spool/postfix:/sbin/nologin
      chrony:x:998:996::/var/lib/chrony:/sbin/nologin
      ntp:x:38:38::/etc/ntp:/sbin/nologin
      tcpdump:x:72:72::/:/sbin/nologin
      nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
    • /etc/shadow
      root:$6$Q9lA****/t1KPM$JLqO59UTxwGm****/rU7bHL0q5TVAij****/KeWAWPiO.6booVwpp7rdR9****.irQ6nso3YGVSqQqpyT****.:18668:0:99999:7:::
      bin:*:17632:0:99999:7:::
      daemon:*:17632:0:99999:7:::
      adm:*:17632:0:99999:7:::
      lp:*:17632:0:99999:7:::
      sync:*:17632:0:99999:7:::
      shutdown:*:17632:0:99999:7:::
      halt:*:17632:0:99999:7:::
      mail:*:17632:0:99999:7:::
      operator:*:17632:0:99999:7:::
      games:*:17632:0:99999:7:::
      ftp:*:17632:0:99999:7:::
      nobody:*:17632:0:99999:7:::
      systemd-network:!!:17864::::::
      dbus:!!:17864::::::
      polkitd:!!:17864::::::
      sshd:!!:17864::::::
      postfix:!!:17864::::::
      chrony:!!:17864::::::
      ntp:!!:17864::::::
      tcpdump:!!:17864::::::
      nscd:!!:17864::::::
    • /etc/group
      root:x:0:
      bin:x:1:
      daemon:x:2:
      sys:x:3:
      adm:x:4:
      tty:x:5:
      disk:x:6:
      lp:x:7:
      mem:x:8:
      kmem:x:9:
      wheel:x:10:
      cdrom:x:11:
      mail:x:12:postfix
      man:x:15:
      dialout:x:18:
      floppy:x:19:
      games:x:20:
      tape:x:33:
      video:x:39:
      ftp:x:50:
      lock:x:54:
      audio:x:63:
      nobody:x:99:
      users:x:100:
      utmp:x:22:
      utempter:x:35:
      input:x:999:
      systemd-journal:x:190:
      systemd-network:x:192:
      dbus:x:81:
      polkitd:x:998:
      ssh_keys:x:997:
      sshd:x:74:
      postdrop:x:90:
      postfix:x:89:
      chrony:x:996:
      ntp:x:38:
      tcpdump:x:72:
      nscd:x:28:
  2. 遠端連線問題執行個體。
    當ECS執行個體處於正在掛載修複盤的模式下時,只能通過VNC遠端連線。具體操作,請參見使用VNC登入執行個體
  3. 查看問題執行個體原有系統硬碟的掛載資訊。
    在臨時掛載的修複盤中,問題執行個體原有系統硬碟的檔案系統會被掛載到某一臨時目錄下。您可以通過以下任一方式查看所在的臨時目錄資訊:
    • 在系統硬碟詳情頁的掛載執行個體進行查看,對應的臨時目錄格式樣本為:/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,其中bp19bspzms79kqse****為執行個體原有系統硬碟的雲端硬碟序號。
    • 在臨時掛載的修複盤中,運行mount命令查看。例如,問題執行個體原有系統硬碟的裝置路徑為/dev/vda,命令樣本如下所示:
      mount | grep /dev/vda
      返回結果如下所示:
      /dev/vda1 on /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse**** type ext4 (rw,relatime)
  4. 運行chroot命令,將根目錄切換為問題執行個體原有系統硬碟所在的臨時路徑,並進入chroot環境。
    您需要在問題執行個體原有系統硬碟所在的臨時路徑中進行檔案修複。例如,臨時路徑為/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,命令如下所示:
    chroot /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****
  5. chroot環境中,運行以下命令,備份/etc/passwd/etc/shadow原檔案。
    cp /etc/passwd /etc/passwd.bak
    cp /etc/shadow /etc/shadow.bak
  6. 補充/etc/passwd檔案缺失的資訊。
    1. 通過ECS控制台的執行個體健康診斷結果,擷取缺失的系統關鍵使用者的資訊。
    2. 在已準備好的正確的系統使用者資訊設定檔/etc/passwd中,找到對應的系統關鍵使用者資訊,然後複製所在行的內容。
    3. 將內容粘貼到chroot環境的/etc/passwd檔案中對應缺失的位置。
      說明 修複狀態的ECS執行個體只能通過VNC遠端連線,當您需要輸入複製的內容時,單擊頂部的VNC複製命令輸入按鈕。
      /etc/passwd檔案中格式說明如下所示。
      一行使用者資訊的樣本內容如下所示:
      postfix:x:89:89::/var/spool/postfix:/sbin/nologin
      每一行使用者資訊被冒號(:)分隔為7個欄位,每個欄位對應的說明如下:
      使用者名稱:密碼:uid:gid:使用者描述:主目錄:登入shell
      粘貼後,您需要對新增的使用者資訊進行檢查:
      • 新增使用者資訊中的uid不能與檔案中其他使用者的uid重複。
      • 新增使用者資訊中的gid必須存在於chroot環境的/etc/group檔案中。如果不存在,需要複製正確的/etc/group檔案中對應的gid所在行到chroot環境的/etc/group中,並確保新增內容的gid不能與檔案中其它的gid重複。
        例如:
        • chroot環境的/etc/group檔案中存在對應的gid為89,則已滿足要求,無需對/etc/group檔案進行改動。
        • chroot環境的/etc/group檔案中不存在對應的gid為89,則需要複製正確的/etc/group檔案中對應的gid所在行到chroot環境的/etc/group中,且不能與其它行的gid重複。
      • 新增使用者資訊如果在正確的/etc/group檔案中存在使用者和使用者組的關聯關係,則在chroot環境的/etc/group檔案中也需要保持一致的關聯關係。

        例如:chroot環境中的/etc/passwd檔案中缺失了postfix使用者,除了需要複製正確的/etc/passwd/etc/group檔案中的配置項,如果正確的/etc/group檔案中配置了postfix使用者同時屬於mail組(例如mail:x:12:postfix),則需要將該配置項複製到chroot環境的/etc/group檔案中。

  7. 補充/etc/shadow檔案缺失的資訊。
    1. 通過ECS控制台的執行個體健康診斷結果,擷取缺失的系統關鍵使用者的資訊。
    2. 在已準備好的正確的系統使用者的密碼資訊設定檔/etc/shadow中,找到對應的系統關鍵使用者資訊,然後複製所在行的內容。
    3. 將內容粘貼到chroot環境的/etc/shadow檔案中對應缺失的位置。
      說明 修複狀態的ECS執行個體只能通過VNC遠端連線,當您需要輸入複製的內容時,單擊頂部的VNC複製命令輸入按鈕。
      如果chroot環境的/etc/shadow檔案中資訊未缺失,則不需要粘貼。
  8. 修複完成後,退出修複環境,然後檢查問題執行個體的目前狀態。
    1. 運行exit命令,退出chroot環境。
    2. 在ECS控制台的執行個體健康診斷頁面,卸載臨時掛載的修複盤並恢複問題執行個體至正常模式。
    3. 遠端連線已修複的ECS執行個體,確認成功登入。

其他解決方案

在正常執行個體上掛載異常執行個體的系統硬碟進行修複的具體操作,請參見Linux執行個體中關鍵的系統使用者不存在