當(dāng)Linux實(shí)例中關(guān)鍵的系統(tǒng)用戶不存在時(shí),可能導(dǎo)致無法遠(yuǎn)程登錄。您可以通過實(shí)例健康診斷工具進(jìn)行問題修復(fù)。

前提條件

Linux實(shí)例已通過實(shí)例健康診斷工具進(jìn)行診斷,診斷結(jié)果中實(shí)例無法啟動(dòng)場(chǎng)景的根賬號(hào)檢查未通過。

背景信息

問題描述:在Linux操作系統(tǒng)中,/etc/passwd文件存儲(chǔ)了系統(tǒng)所有用戶的基本信息,/etc/shadow文件存儲(chǔ)了系統(tǒng)用戶的密碼信息。如果文件中關(guān)鍵的系統(tǒng)用戶信息(例如root用戶及密碼)丟失,將導(dǎo)致無法正常登錄該實(shí)例。

解決方案:您需要恢復(fù)/etc/passwd/etc/shadow配置文件的信息。此外,/etc/group文件中存放了系統(tǒng)用戶組的基本信息以及用戶與用戶組之間的關(guān)系信息,也需要一同修復(fù)。

操作步驟

  1. 準(zhǔn)備正確的系統(tǒng)用戶信息配置文件。

    由于不同的Linux發(fā)行版中關(guān)鍵的系統(tǒng)用戶有所不同,且您在使用過程中可能創(chuàng)建了其它系統(tǒng)用戶,因此修復(fù)系統(tǒng)關(guān)鍵用戶信息丟失的問題需要您根據(jù)不同的Linux發(fā)行版而定。

    建議您通過一臺(tái)正常運(yùn)行的ECS實(shí)例獲取正確的系統(tǒng)用戶配置文件信息,作為修復(fù)問題實(shí)例的參考文件。正常運(yùn)行的ECS實(shí)例需要和問題實(shí)例使用同一Linux發(fā)行版本,并且安裝了相同的軟件包。所需正確的系統(tǒng)用戶配置文件信息的路徑如下所示:

    • /etc/passwd
    • /etc/shadow
    • /etc/group
    您可以直接在正常運(yùn)行的ECS實(shí)例內(nèi)查看正確的配置文件信息,也可以將正確的配置文件信息下載至本地主機(jī)進(jìn)行查看。本文以CentOS 7.5系統(tǒng)為例,配置文件的內(nèi)容示例如下:
    • /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. 遠(yuǎn)程連接問題實(shí)例。
    當(dāng)ECS實(shí)例處于正在掛載修復(fù)盤的模式下時(shí),只能通過VNC遠(yuǎn)程連接。具體操作,請(qǐng)參見使用VNC登錄實(shí)例
  3. 查看問題實(shí)例原有系統(tǒng)盤的掛載信息。
    在臨時(shí)掛載的修復(fù)盤中,問題實(shí)例原有系統(tǒng)盤的文件系統(tǒng)會(huì)被掛載到某一臨時(shí)目錄下。您可以通過以下任一方式查看所在的臨時(shí)目錄信息:
    • 在系統(tǒng)盤詳情頁的掛載實(shí)例進(jìn)行查看,對(duì)應(yīng)的臨時(shí)目錄格式示例為:/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,其中bp19bspzms79kqse****為實(shí)例原有系統(tǒng)盤的云盤序列號(hào)。
    • 在臨時(shí)掛載的修復(fù)盤中,運(yùn)行mount命令查看。例如,問題實(shí)例原有系統(tǒng)盤的設(shè)備路徑為/dev/vda,命令示例如下所示:
      mount | grep /dev/vda
      返回結(jié)果如下所示:
      /dev/vda1 on /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse**** type ext4 (rw,relatime)
  4. 運(yùn)行chroot命令,將根目錄切換為問題實(shí)例原有系統(tǒng)盤所在的臨時(shí)路徑,并進(jìn)入chroot環(huán)境。
    您需要在問題實(shí)例原有系統(tǒng)盤所在的臨時(shí)路徑中進(jìn)行文件修復(fù)。例如,臨時(shí)路徑為/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,命令如下所示:
    chroot /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****
  5. chroot環(huán)境中,運(yùn)行以下命令,備份/etc/passwd/etc/shadow原文件。
    cp /etc/passwd /etc/passwd.bak
    cp /etc/shadow /etc/shadow.bak
  6. 補(bǔ)充/etc/passwd文件缺失的信息。
    1. 通過ECS控制臺(tái)的實(shí)例健康診斷結(jié)果,獲取缺失的系統(tǒng)關(guān)鍵用戶的信息。
    2. 在已準(zhǔn)備好的正確的系統(tǒng)用戶信息配置文件/etc/passwd中,找到對(duì)應(yīng)的系統(tǒng)關(guān)鍵用戶信息,然后復(fù)制所在行的內(nèi)容。
    3. 將內(nèi)容粘貼到chroot環(huán)境的/etc/passwd文件中對(duì)應(yīng)缺失的位置。
      說明 修復(fù)狀態(tài)的ECS實(shí)例只能通過VNC遠(yuǎn)程連接,當(dāng)您需要輸入復(fù)制的內(nèi)容時(shí),單擊頂部的VNC復(fù)制命令輸入按鈕。
      /etc/passwd文件中格式說明如下所示。
      一行用戶信息的示例內(nèi)容如下所示:
      postfix:x:89:89::/var/spool/postfix:/sbin/nologin
      每一行用戶信息被冒號(hào)(:)分隔為7個(gè)字段,每個(gè)字段對(duì)應(yīng)的說明如下:
      用戶名:密碼:uid:gid:用戶描述:主目錄:登錄shell
      粘貼后,您需要對(duì)新增的用戶信息進(jìn)行檢查:
      • 新增用戶信息中的uid不能與文件中其他用戶的uid重復(fù)。
      • 新增用戶信息中的gid必須存在于chroot環(huán)境的/etc/group文件中。如果不存在,需要復(fù)制正確的/etc/group文件中對(duì)應(yīng)的gid所在行到chroot環(huán)境的/etc/group中,并確保新增內(nèi)容的gid不能與文件中其它的gid重復(fù)。
        例如:
        • chroot環(huán)境的/etc/group文件中存在對(duì)應(yīng)的gid為89,則已滿足要求,無需對(duì)/etc/group文件進(jìn)行改動(dòng)。
        • chroot環(huán)境的/etc/group文件中不存在對(duì)應(yīng)的gid為89,則需要復(fù)制正確的/etc/group文件中對(duì)應(yīng)的gid所在行到chroot環(huán)境的/etc/group中,且不能與其它行的gid重復(fù)。
      • 新增用戶信息如果在正確的/etc/group文件中存在用戶和用戶組的關(guān)聯(lián)關(guān)系,則在chroot環(huán)境的/etc/group文件中也需要保持一致的關(guān)聯(lián)關(guān)系。

        例如:chroot環(huán)境中的/etc/passwd文件中缺失了postfix用戶,除了需要復(fù)制正確的/etc/passwd/etc/group文件中的配置項(xiàng),如果正確的/etc/group文件中配置了postfix用戶同時(shí)屬于mail組(例如mail:x:12:postfix),則需要將該配置項(xiàng)復(fù)制到chroot環(huán)境的/etc/group文件中。

  7. 補(bǔ)充/etc/shadow文件缺失的信息。
    1. 通過ECS控制臺(tái)的實(shí)例健康診斷結(jié)果,獲取缺失的系統(tǒng)關(guān)鍵用戶的信息。
    2. 在已準(zhǔn)備好的正確的系統(tǒng)用戶的密碼信息配置文件/etc/shadow中,找到對(duì)應(yīng)的系統(tǒng)關(guān)鍵用戶信息,然后復(fù)制所在行的內(nèi)容。
    3. 將內(nèi)容粘貼到chroot環(huán)境的/etc/shadow文件中對(duì)應(yīng)缺失的位置。
      說明 修復(fù)狀態(tài)的ECS實(shí)例只能通過VNC遠(yuǎn)程連接,當(dāng)您需要輸入復(fù)制的內(nèi)容時(shí),單擊頂部的VNC復(fù)制命令輸入按鈕。
      如果chroot環(huán)境的/etc/shadow文件中信息未缺失,則不需要粘貼。
  8. 修復(fù)完成后,退出修復(fù)環(huán)境,然后檢查問題實(shí)例的當(dāng)前狀態(tài)。
    1. 運(yùn)行exit命令,退出chroot環(huán)境。
    2. 在ECS控制臺(tái)的實(shí)例健康診斷頁面,卸載臨時(shí)掛載的修復(fù)盤并恢復(fù)問題實(shí)例至正常模式。
    3. 遠(yuǎn)程連接已修復(fù)的ECS實(shí)例,確認(rèn)成功登錄。

其他解決方案

在正常實(shí)例上掛載異常實(shí)例的系統(tǒng)盤進(jìn)行修復(fù)的具體操作,請(qǐng)參見Linux實(shí)例中關(guān)鍵的系統(tǒng)用戶不存在