ข้อผิดพลาด sudo คือโหมด 0777 ควรเป็น 0440


26

ฉันได้รับข้อผิดพลาด sudo ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร

sudo: /etc/sudoers is mode 0777, should be 0440
sudo: no valid sudoers sources found, quitting 

ดังที่ผู้ใช้เคยตั้งข้อสังเกตไว้ให้ใช้ "chmod 0440 / etc / sudoers" เมื่อไฟล์ sudoers.d / README มี chmod ที่ไม่ถูกต้องไม่ทำงาน
kentfx

คุณจะบอกว่าเมื่อปัญหาคือสิทธิ์บน/etc/sudoers.d/READMEที่ข้อผิดพลาดยังสามารถพูดได้sudo: /etc/sudoers is mode 0777, should be 0440?
Eliah Kagan

คำตอบ:


26

ตัวเลือกแรก

ติดตามโพสต์นี้ :

  1. รีบูทพีซี
  2. เมื่อหน้าจอเลือกการบูต GRUB แสดงขึ้นให้เลือกโหมดการกู้คืน (หากยังไม่ปรากฏขึ้นให้กดShiftปุ่มเมื่อคุณเห็นตัวโหลด GRUB ที่ด้านล่าง)
  3. เทอร์มินัลสีดำควรปรากฏขึ้น ณ จุดนี้คุณสามารถเรียกใช้คำสั่งนี้ (คุณควรมีสิทธิ์ใช้งานรูท):

    chmod 0440 /etc/sudoers
    

อีกทางเลือกหนึ่ง

คุณจะต้องวาง Ubuntu ลงบน LiveCD บูตเข้า LiveCD ติดพาร์ทิชัน Ubuntu ของคุณบนฮาร์ดไดรฟ์ (เปิดเบราว์เซอร์ไฟล์เช่น Nautilus และคลิกพาร์ติชัน Ubuntu ของคุณหรือคลิกสถานที่ -> "xxGB พาร์ทิชัน / พาร์ติชัน Ubuntu ของคุณ ")

จากนั้นเปิดเทอร์มินัลภายในเซสชัน LiveCD และพิมพ์คำสั่งสองคำสั่งนี้:

cd /media/<name of permanent ubuntu partition>/etc
sudo chmod 0440 sudoers

ปัญหาพิเศษ

หากมีข้อผิดพลาดใด ๆ (ตามที่โพสต์ด้านล่าง) ให้ทำตามพร้อมท์ข้อผิดพลาดและปรับแต่ละไฟล์ให้สอดคล้องโดยใช้หนึ่งในสองขั้นตอนข้างต้น:

sudo apt-get update sudo: /etc/sudoers.d/README เป็นโหมด 0777, ควรเป็น 0440 sudo: / var / lib / sudo เขียนได้โดยผู้ที่ไม่ใช่เจ้าของ (040777), ควรเป็นโหมด 0700 [sudo] รหัสผ่านสำหรับ

แก้ไขโดยทำตามด้วย:

chmod 0440 /etc/sudoers.d/README
chmod 0700 /var/lib/sudo

คำสั่งทั้งสองนี้ควรใช้อย่างเหมาะสมกับขั้นตอนที่อธิบายไว้ข้างต้น พวกเขาจะเปลี่ยนการอนุญาตไฟล์ที่เกี่ยวข้องกับไฟล์นั้น 0440 จะให้สิทธิ์เจ้าของ (รูท) และกลุ่มมีสิทธิ์อ่านและ 0700 จะมอบสิทธิ์เจ้าของ (รูท) ให้อ่านเขียนและดำเนินการอนุญาต


ฉันสามารถใช้คำสั่ง sudo แต่มีข้อ จำกัด sudo apt-get update sudo: /etc/sudoers.d/README is mode 0777, should be 0440 sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700 [sudo] password for
user20698

@Alex: ESC สำหรับมรดกของ GRUB ใช่ไหม ควรกด Shift เพื่อรับ GRUB2
Lekensteyn

@ user20698: คุณไม่จำเป็นต้องsudoใช้อันแรกควรทำขั้นตอนที่สองจาก Live CD
Lekensteyn

หาก sudoers คือ 0777 ผู้ใช้จะไม่สามารถเรียกใช้chmod 0440 /etc/sudoersโดยไม่ใช้sudo เนื่องจาก sudoers สามารถเขียนได้โดยทุกคนหรือไม่
Seppo Erviälä

2
@Seppo: ไม่เฉพาะเจ้าของไฟล์เท่านั้นที่สามารถเปลี่ยนการอนุญาตไฟล์ได้
Lekensteyn

16

sudoเสียหายในสถานการณ์นี้ แต่pkexec(ส่วนหน้าบรรทัดคำสั่งไปยังPolicyKit ) ยังคงใช้งานได้ดังนั้นคุณสามารถแก้ไขได้ด้วยคำสั่งเดียว ไม่จำเป็นต้องบูตเครื่องใหม่

pkexec chmod 0440 /etc/sudoers

สิ่งนี้ถือว่า PolicyKit ได้รับการติดตั้งแล้ว หากนี่เป็นระบบเดสก์ท็อป (แทนที่จะเป็นเซิร์ฟเวอร์ที่ไม่มี GUI) แสดงว่าเป็น


4

บูตเข้าสู่โหมดการกู้คืนเลือกรูตเชลล์และ:

chmod 0440 /etc/sudoers

หรือถ้าคุณไม่ต้องการรีสตาร์ทคุณสามารถใช้ทางเลือกนี้:

pkexec chmod 0440 /etc/sudoers
pkexec chmod 0440 /etc/sudoers.d/README

มันจะเปลี่ยนการอนุญาต ลองใช้งานได้


1
ทำไมคุณchmodไอเอ็นจีบางไฟล์ไป440และคนอื่น ๆ0440? คุณไม่ควรใช้0440อย่างสม่ำเสมอ? และทำไมคุณถึงเปลี่ยนสิทธิ์/etc/sudoers.d/READMEเมื่อคุณใช้pkexecวิธี แต่ไม่ใช่อย่างอื่น? และไฟล์อื่น ๆ ที่เป็นไปได้มี/etc/sudoers.dอะไรบ้าง?
Eliah Kagan

1

คุณทำอะไรเพื่อรับข้อผิดพลาดเหล่านี้

  • หากคุณ: sudo chmod -R 777 /etcคุณต้องใช้ Live CD เพื่อซ่อมแซม

    1. บูตเข้า Live CD แล้วเลือก "ลองใช้"
    2. เมานต์พาร์ติชัน Ubuntu ของคุณ (หรือพาร์ติชันที่บรรจุไว้/etcหากคุณใส่/etcพาร์ติชันแยกต่างหาก) สามารถทำได้โดยใช้ไฟล์เบราว์เซอร์เช่น Nautilus หรือเมนูสถานที่
    3. เปิด Terminalโดยไปที่Applications => Accessories => Terminal
    4. ls -l /mediaตรวจสอบโฟลเดอร์ของคุณพาร์ทิชันอูบุนตูคุณสามารถแสดงรายการเนื้อหาของพาร์ทิชันที่ติดตั้งโดยใช้ มันอาจจะเป็นชื่อหรือubuntu ในขั้นตอนต่อไปผมจะถือว่าdiskubuntu
    5. ในเทอร์มินัลตั้งค่าการอนุญาต จำกัด โดยค่าเริ่มต้น:

      sudo find /media/ubuntu/etc -type f -exec chmod g-wx,o-rwx {} \;
      sudo find /media/ubuntu/etc -type d -exec chmod g-w,o-rwx {} \;
      
    6. จากนั้นใช้ Live CD เป็นจุดอ้างอิงในการกู้คืนการอนุญาตไฟล์ คำสั่งด้านล่างจะเปลี่ยนการอนุญาตไฟล์สำหรับการ/etc/media/ubuntuใช้/etcโฟลเดอร์บน Live CD เป็นจุดอ้างอิง มันจะเปลี่ยนเฉพาะการอนุญาตไฟล์ ( -type f) และไดเรกทอรี ( -type d) ในระบบไฟล์เดียวกัน ( -xdev) ข้อผิดพลาดใด ๆ ถูกเขียนลงใน~/errors.logข้อผิดพลาดเช่น "ไม่พบไฟล์" ระบุว่ามีการติดตั้งไฟล์ในระบบ แต่ไม่พบใน Live CD คำสั่งจากขั้นตอนที่ 5 ควรตั้งค่าการอนุญาตที่ถูกต้อง แต่เพื่อผลลัพธ์ที่ดีที่สุดคุณควรติดตั้งแพ็กเกจให้ดีขึ้น

      cd /media/ubuntu && sudo find etc -xdev \( -type f -o -type d \) -f -exec chmod --reference=/{} {} \; 2>~/errors.log
      
    7. ตอนนี้ปลอดภัย~/errors.logที่ไหนสักแห่ง (เช่นhttp://paste.ubuntu.com/ ) เพื่อให้คุณสามารถเพิ่มเป็นความคิดเห็นคำตอบนี้หากคุณมีปัญหาเกี่ยวกับการใช้งาน

1

ใน Ubuntu คุณสามารถกดCtrl+ Alt+ ก่อนเพื่อTเปิดเทอร์มินัล หลังจากที่คุณสามารถคัดลอกวางคำสั่งด้านล่างด้วยCtrl+ Cและวางใน terminal กับCtrl+ +ShiftV

pkexec chmod 0440 /etc/sudoers

0

สำหรับฉันฉันต้องเพิ่มอีกหนึ่งขั้นตอนตามpkexecคำแนะนำต่อจากนี้ฉันโชคดีที่ฉันมีช่วง 2 ssh ที่เกิดขึ้นเมื่อฉันทำผิดโง่ ๆ :

  1. เปิดเทอร์มินัล 2 เครื่อง
  2. ในเทอร์มินัล 2 ให้เรียกใช้echo $$เพื่อรับ PID
  3. ทำงานpkttyagent --process PID_FROM_STEP2ในเทอร์มินัล 2
  4. ในเทอร์มินัล 1 ให้เรียกใช้ pkexec chmod 0440 /etc/sudoers
  5. ในกรณีของฉันฉันก็ต้องวิ่ง pkexec chown root:root /etc/sudoers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.