Score:1

ลบผู้ใช้ทั้งหมดใน WSL

ธง nu

ฉันใช้ Wsl Ubuntu 20.04 LTS ฉันไม่รู้ว่าทำไม แต่ผู้ใช้ทั้งหมดถูกลบ ฉันสร้างผู้ใช้ใหม่ ฉันหวังว่าฉันจะไม่ได้ทำ

รหัสผ่าน:

tetemp:x:1000:100::/home/tetemp:

และตอนนี้

$ ผู้ใช้ที่รูท
adduser: รูทเท่านั้นที่สามารถเพิ่มผู้ใช้หรือกลุ่มเข้าสู่ระบบ
$ sudo adduser root
sudo: ผู้ใช้ที่ไม่รู้จัก: รูท
sudo: ไม่สามารถเริ่มต้นปลั๊กอินนโยบาย

ฉันไม่สามารถเปลี่ยนรหัสผ่านได้เนื่องจากเป็นแบบอ่านอย่างเดียว

- ฉันจะรูตกลับได้อย่างไร
- ฉันสามารถลบ tetemp ได้หรือไม่? (wsl เริ่มเป็น root ถ้าฉันทำได้)

in flag
You could just wipe the WSL image and start over again. That would be the fastest way to get things operational again.
NotTheDr01ds avatar
vn flag
What happens when you just run `wsl` (or `wsl `)? I just set up a new Ubuntu instance, created a new (second) user, deleted everything but that user from `/etc/passwd`. After exiting, I'm still UID 0 when I start the instance back up and can edit `/etc/passwd` in that state. I *cannot*, however, start up as `wsl -u root`, but I can without `-u root`.
Atduyar avatar
nu flag
@NotTheDr01ds I can edit passwd because its read only. and i try `-u root` PS C:\Users\Kullanic> wsl -u root => User not found.
NotTheDr01ds avatar
vn flag
@Atduyar Okay, I can reproduce it now, at least. I think I had to add the user *after* deleting `/etc/passwd`. The last time I added the user while `/etc/passwd` was still intact, then deleted all lines *but* the `tetemp` user.
Score:0
ธง vn

นั่นเป็นสิ่งที่ยาก. ปกติ wsl -u รูท กลไกการกู้คืนจะไม่ทำงานหากไม่มี ราก ผู้ใช้ใน /etc/passwd, และเมื่อ เทเทม ถูกเพิ่มเข้ามา มันกลายเป็นผู้ใช้เริ่มต้น (โดยไม่มี ซูโด สิทธิ์).

ฉันเห็นทางข้างหน้าสองทาง อย่างน้อยที่สุด สร้างอินสแตนซ์ใหม่ (และคัดลอกไฟล์ทับ) หรือพยายามกู้คืนอินสแตนซ์ที่เสียหาย:

  • อันดับแรก หลังจากลองทำสิ่งนี้ในอินสแตนซ์ทดสอบแล้ว ฉัน สามารถ ยังคงเข้าถึงอินสแตนซ์ภายใต้ Windows โดยใช้ \wsl$\อูบุนตู เส้นทาง. ที่จะไม่ให้คุณแก้ไข /etc/passwdแต่อย่างน้อยก็จะให้คุณคัดลอกไฟล์ใด ๆ ที่คุณต้องการกู้คืนจากอินสแตนซ์

    คุณสามารถติดตั้งอินสแตนซ์ที่สองของการแจกจ่าย Ubuntu เดียวกันกับที่คุณติดตั้งจาก Store:

    1. เริ่ม PowerShell ในฐานะผู้ดูแลระบบ

    2. วิ่ง:

       Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\' | Where-Object {$_.Name -eq 'install.tar.gz' }
      
    3. เอาต์พุตจะมีตำแหน่งของ install.tar.gz ที่ใช้สร้างอินสแตนซ์ดั้งเดิม

    4. สร้างไดเร็กทอรีที่จะสร้างอินสแตนซ์ใหม่ ฉันใช้บางอย่างเช่น %userprofile%\WSL\NewUbuntu.

    5. จาก PowerShell ปกติที่ไม่ใช่ผู้ดูแลระบบ ให้เรียกใช้

      wsl --import NewUbuntu ".\path\to\WSL\NewUbuntu" "<path_with_tarball>\intall.tar.gz" -- เวอร์ชัน 2`
      
    6. เริ่มต้นอินสแตนซ์ใหม่โดยใช้ wsl -d NewUbuntu. คุณจะ ราก โดยค่าเริ่มต้น.

    7. เพิ่มผู้ใช้ประจำของคุณด้วย:

      เพิ่มผู้ใช้ <ชื่อผู้ใช้>
      usermod -aG adm,dialout,cdrom,floppy,sudo,audio,dip,วิดีโอ,plugdev,netdev <ชื่อผู้ใช้>
      

      นี่คือชุดของกลุ่มที่สร้างขึ้นสำหรับผู้ใช้เริ่มต้นใน Ubuntu บน WSL

    8. ทำให้ผู้ใช้นี้เป็นค่าเริ่มต้นใน WSL โดยการสร้าง /etc/wsl.conf ตามที่กล่าวไว้ใน คำตอบนี้.

    ตอนนี้คุณควรจะสามารถคัดลอกไฟล์จากอินสแตนซ์เก่าของคุณ (\wsl$\อูบุนตู) ไปที่ใหม่ (\wsl$\Newอูบุนตู).

    ในที่สุด เพื่อลบสำเนาเก่า เมื่อคุณอยู่ แน่นอน คุณมีไฟล์สำคัญทั้งหมดของคุณแล้ว wsl --unregister <distroname>.

มีตัวเลือกที่เป็นไปได้ที่ฉันคิดได้ซึ่งอาจทำให้คุณทำได้ ซ่อมแซม/กู้คืน อินสแตนซ์ที่มีอยู่ ฉันยังไม่ได้ทดสอบทีละขั้นตอนเหล่านี้ แต่ทุกอย่างส่วนใหญ่เป็นสิ่งที่ฉันทำในคราวเดียว:

  • อันนี้ผมไม่แนะนำเพราะมันมี ศักยภาพ เพื่อให้อินสแตนซ์อยู่ในสถานะที่ไม่เสถียรในที่สุด:

    • แปลงอินสแตนซ์เป็น WSL1 โดยใช้ wsl --set-version อูบุนตู 1
    • ใน Windows ให้นำทางไปยังตำแหน่งที่ตั้งของระบบไฟล์โอเวอร์เลย์ WSL1 ใน %userprofile%\AppData\Local\Packages\Canonical...\LocalState\rootfs\etc\passwd.
    • แก้ไขของคุณ /etc/passwd ใช้แอพ Windows ที่จัดการการลงท้ายบรรทัดของ Linux สิ่งนี้อาจเป็นปัญหาได้ในที่สุด ทำให้ระบบไฟล์เสียหายใน WSL. มันอาจจะง่ายและปลอดภัยที่สุด ลบ เดอะ รหัสผ่าน เนื่องจากเราเชื่อว่าการทำเช่นนั้นจะทำให้คุณเข้าสู่ระบบด้วย UID 0 อีกครั้ง จากนั้นจึงสร้างไฟล์ ราก ผู้ใช้
    • แปลงกลับเป็น WSL2 หากต้องการ
  • หรือใช้อินสแตนซ์อื่นเพื่อแก้ไขปัญหาแรก:

    • สร้าง tarball ของอินสแตนซ์ที่เสียของคุณด้วย wsl -- ส่งออก Ubuntu fixme.tar.

    • กลับไปที่ตัวเลือกแรกด้านบนที่เราสร้างอินสแตนซ์ใหม่และทำตามขั้นตอนเหล่านั้น แต่เรียกอินสแตนซ์ว่า "UbuntuTemp"

    • ภายในอินสแตนซ์ใหม่ (ชั่วคราว):

      mkdir ~/fixme
      ซีดี ~/fixme
      sudo tar --xattrs-include="security.capability" -xvf /mnt/c/path/to/fixme.tar
      sudo cp /etc/passwd ~/fixme/etc/passwd
      sudo tar --xattrs -cvf /mnt/c/path/to/fixed.tar
      
    • ออกจากอินสแตนซ์ Ubuntu ชั่วคราว

    • ใน PowerShell ให้สร้างไดเร็กทอรีสำหรับอินสแตนซ์ Ubuntu ที่แก้ไขแล้ว จากนั้น:

      wsl --import Ubuntu20_04 "path/you/just/created" "path/to/fixed.tar" --version 2
      
    • เริ่มอินสแตนซ์ (หวังว่า) คงที่ด้วย wsl -d Ubuntu20_04.

    • ตั้งค่าผู้ใช้ทั่วไปของคุณเป็นค่าเริ่มต้นโดยใช้ /etc/wsl.conf ต่อ คำตอบนี้.

    • สมมติว่าการทำงานถูกต้อง ให้ตั้งค่าอินสแตนซ์เป็นค่าเริ่มต้นโดยใช้:

      wsl --set-default Ubuntu20_04
      

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา