วิธีแก้ไข sudo หลังจาก“ chmod -R 777 / usr / bin”


15

ฉันเข้ามาchmod -R 777 /usr/binและตอนนี้ sudo ไม่ทำงาน

sudo must be setuid rootมันบอกว่า

chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudoคำแนะนำบางออนไลน์กล่าวว่าการเรียกใช้

เมื่อเข้าสู่chown root:root /usr/bin/sudoมันแสดงให้เห็นopened in readonly modeข้อผิดพลาด


1
คุณจะต้องเป็นรากเรียกใช้คำสั่งเหล่านั้น

Manoj Kumar: ไม่วิธีการในคำตอบของฉัน (ซึ่งคุณได้ทำเครื่องหมายเป็นที่ยอมรับ) แก้ปัญหานี้สำหรับคุณ? ฉันเชื่อมั่นว่า Damien Roche และ Oli ให้ความเห็นว่าวิธีนี้ใช้ไม่ได้จริงหลังจากที่คำสั่งเสร็จสมบูรณ์ ชอบ, จะต้องมีราก setuid ในการทำงาน (ฉันไม่แน่ใจว่าทำไมเพราะใช้บริการ polkit แต่ทำเช่นนั้น) อย่างไรก็ตามฉันคิดว่าฉันได้ยินคนอื่นพูดว่าสิ่งนี้ได้ผลสำหรับพวกเขา คุณกด Ctrl + C ก่อนที่คำสั่ง chmod จะเสร็จสิ้นหรือไม่ pkexecsudo chmod -R 777 /usr/binsudopkexec777
Eliah Kagan

สวัสดี. วิธีนี้ใช้งานได้จริงสำหรับฉันหลังจากฉันประสบความสำเร็จในการวิ่งโดยไม่ตั้งใจsudo chmod -R 777 /usr/binแต่หลังจากเข้าสู่rootบัญชีแล้วเท่านั้น
iHowell

คำตอบ:


10

ได้รับการยืนยันสถานะ แต่อย่างไรก็ตามผมเชื่อว่าตอนนี้คำตอบนี้เป็นสิ่งที่ผิด (ฉันหวังว่าจะปรับปรุงมันเร็ว ๆ นี้หลังจากปรึกษากับ OP เกี่ยวกับการยอมรับ) ฉันคิดว่าฉันจำได้ว่ามีคนอื่นพูดว่าสิ่งนี้ได้ผล แต่ฉันเชื่อว่าปัญหาของพวกเขาแตกต่างกันเล็กน้อย วิธีที่อธิบายไว้ในที่นี้ยังคงมีค่าสำหรับบางสถานการณ์ที่chmod -R 777 /usr/binขัดจังหวะด้วยCtrl+ Cหรือไม่เสร็จสมบูรณ์ แต่เมื่อทำแล้วpkexecก็ยกเลิกการตั้งค่าเช่นกันและจะไม่ทำงานได้ดีไปกว่าsudoนี้เพราะ Damien Roche และ Oli แสดงความคิดเห็นอย่างถูกต้อง

บนระบบเดสก์ท็อปของ Ubuntu นั้นPolicyKitจะถูกติดตั้งดังนั้นpkexecสามารถใช้เพื่อซ่อมแซมsudoไฟล์หรือsudoersไฟล์ปฏิบัติการที่เสียหายได้ คุณไม่จำเป็นต้องบูตเข้าสู่โหมดการกู้คืนและคุณไม่จำเป็นต้องบูตจากซีดีสด คุณไม่จำเป็นต้องรีบูต

ในกรณีนี้ให้รันคำสั่งต่อไปนี้:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

ดูคำถามนี้สำหรับข้อมูลเพิ่มเติม


9
pkexec must be setuid root! ช่างเป็นฝันร้าย!
ดาเมียนโรช

1
เป็นจุดเดเมี่ยนออกปัญหาด้วยวิธีนี้คือเป็นในตรงสถานการณ์เดียวกับpkexec sudoมัน setuid /usr/binตามปกติและอาศัยอยู่ใน chmod -R 777 /usr/binผมได้ทดสอบมันและเพียงแค่นี้ไม่ทำงานหลังจากที่
Oli

@DamienRoche, Oli: ฉันขอโทษที่ไม่แก้ไขวิธีนี้เร็วกว่านี้! คุณทั้งคู่ถูกต้องแล้ว ฉันไม่แน่ใจว่าทำไมpkexecต้องให้ setuid รูททำงาน (ทำงานผ่าน polkit daemon เหมือนกับกระบวนการอื่นที่ไม่ใช่ setuid หรือไม่) แต่มันต้องการมัน ฉันได้แสดงความคิดเห็นเกี่ยวกับคำถามเพื่อดูว่า OP (ผู้ที่ยอมรับสิ่งนี้) สามารถให้ความกระจ่างเกี่ยวกับสิ่งที่ถูกหรือมีประโยชน์เกี่ยวกับคำตอบนี้หรือไม่ และฉันได้เพิ่มแบนเนอร์ชั่วคราวที่ด้านบนของโพสต์นี้ดังนั้นฉันจึงไม่ทำให้เข้าใจผิดมากขึ้น หากคำตอบนี้ยังคงมีอยู่แบบฟอร์มที่ปรับปรุงแล้วอาจจะรวมข้อมูลบางอย่างในปัจจุบันในแบนเนอร์นั้น
Eliah Kagan

คุณสามารถใช้suซึ่งตั้งอยู่ใต้ / bin
FliiFe

@FliiFe การแก้ไขการอนุญาต (หรือความเป็นเจ้าของ) ของไฟล์/usr/binต้องได้รับสิทธิ์รูท แต่คุณไม่สามารถsuรูทบนระบบ Ubuntu ส่วนใหญ่ได้เนื่องจากการเข้าสู่ระบบรูทถูกปิดใช้งานโดยค่าเริ่มต้น แตกต่างจากsudoและpkexecเมื่อคุณใช้suเพื่อรับรูทเชลล์หรือเรียกใช้คำสั่งในฐานะรูทคุณต้องระบุรหัสผ่านของรูทไม่ใช่ของคุณเอง แต่รูทไม่มีรหัสผ่านเป็นค่าเริ่มต้นในอูบุนตู (กล่าวคือการพิสูจน์ตัวตนโดยใช้รหัสผ่านสำหรับรูทมักจะล้มเหลวไม่ใช่ว่าการป้อนรหัสผ่านเปล่าจะใช้งานได้) ดูRootSudoสำหรับรายละเอียด
Eliah Kagan

4

แม้ในขณะที่วิ่งออกมาจากแผ่นซีดีสด / Pendrive คุณต้องคำนำหน้าของคำสั่งด้วยchmod sudoดังนั้นขั้นตอนของคุณจะเป็นดังนี้:

  1. บูตจากซีดีสด / Pendrive
  2. ตรวจสอบว่าดิสก์ของคุณได้รับการเมาต์อัตโนมัติแล้ว ถ้าไม่ติดมัน (ดูด้านล่าง)
  3. ใช้sudo chmod 0755 <path>เพื่อปรับการอนุญาต

วิธีหาที่ดิสก์ของคุณถูกเมาท์: จากหน้าต่างเทอร์มินัลรันmount(โดยไม่มีอาร์กิวเมนต์) รายการนี้จะแสดงรายการอุปกรณ์ที่ติดตั้งทั้งหมด ตรวจสอบtypeรายชื่อ - คุณสามารถข้ามทุกสิ่งที่ไม่ได้ใช้ "ระบบไฟล์จริง" (ดิสก์ของคุณอาจใช้ทั้ง ext3 หรือ ext4 - คุณสามารถข้ามสิ่งต่าง ๆ เช่น proc, sysfs และ like) หากสิ่งที่ฟังดูมีแนวโน้ม (ดูคล้าย/dev/sda1 on /media/sda1 type ext3) ให้ตรวจสอบเนื้อหาโดยใช้ls /media/sda1เพื่อดูว่าเป็นไปอย่างนั้นหรือไม่

ถ้ายังไม่ได้ติดตั้งคุณสามารถตรวจสอบกับ/devรายการที่ดิสก์อาจจะ (ใช้ls /dev/ |grep '/dev/sdเพื่อตรวจสอบอุปกรณ์ที่ใช้ได้; ดิสก์ของคุณควรมีลักษณะเช่น/dev/sdaX, /dev/sdbXหรือชอบ - เอ็กซ์เป็นตัวเลข) เปรียบเทียบสิ่งนี้กับรายการอุปกรณ์ที่ติดตั้ง หากไม่มีให้ลองเชื่อมต่อและตรวจสอบเนื้อหา (ดังที่แสดงด้านบน) การติดแรกสร้างจุดเมานท์เป็นเช่นsudo mkdir /mnt/mydiskนั้นพยายามที่จะติดตั้งอุปกรณ์ใช้และตรวจสอบเนื้อหาของการใช้mount /dev/sda1 /mnt/mydiskls /mnt/mydisk

เมื่อคุณได้รับดิสก์ขวามีคุณสามารถไปเปลี่ยนแปลงสิทธิ์กลับใน dir usr sudo chmod 0755 /mnt/mydisk/usrของคุณ:

ตอนนี้คุณยังอาจมีปัญหาหากคุณเริ่มรันchmodคำสั่งซ้ำโดยใช้-Rพารามิเตอร์ ในกรณีนี้คุณสามารถลองแก้ไขแต่ละรายการด้วยตนเอง - หรือคุณสามารถทำการติดตั้งใหม่ ...


ฉันพยายามสร้างจุดเมานต์ แต่ฉันพบข้อผิดพลาดซึ่งจุดอ่านเมานต์ mnt / mydisk ไม่มีอยู่คือ mydisk จะถูกแทนที่ด้วยบางสิ่งและสำหรับบันทึกที่ฉันเขียนmount /dev/sda /mnt/mydiskจากroot@Ubuntu:/dev#
vin

คุณได้ a) สร้างจุดเมานต์ (ไดเรกทอรี) ก่อนที่จะออกคำสั่ง mount (ดังอธิบาย) และ b) ดูแลเครื่องหมายทับชั้นนำด้วยหรือไม่ ลองmkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(ผมไม่คิดว่าคุณมีพาร์ทิชันที่ไม่มีใน/dev/sdaดังนั้นคุณจะต้องไม่ได้รับหมายเลขพาร์ติชันได้เป็นอย่างดีให้แน่ใจว่าคุณระบุอุปกรณ์ที่ถูกต้อง (หรือติดจะล้มเหลว.).
อิซซี่

1

ฉันคิดว่า Mat ถูกต้องคุณต้องรูทเพื่อเพิ่มบิตไปยัง / usr / bin แต่แน่นอนว่า sudo เสีย หากคุณมีรหัสผ่านรูทคุณสามารถใช้เพื่อเข้าสู่ระบบในฐานะรูทและแก้ไขสิทธิ์ด้วยคำสั่งด้านบน ถ้าคุณทำไม่ได้ (และฉันก็ไม่ทำเช่นนั้น) มันอาจเป็นการดีที่สุดที่จะ:

  • บูตจาก Linux Live CD
  • กลายเป็นรากที่นั่น
  • ประกอบพาร์ติชั่นด้วยระบบข้างต้น
  • จากนั้นปรับสิทธิอนุญาตให้ตรงกับระบบไฟล์นั้นโดยใช้เทอร์มินัล

รูทเป็นหมายเลขผู้ใช้เสมอ 0 ดังนั้นรูทบนระบบใด ๆ สามารถทำการเปลี่ยนแปลงที่อนุญาตให้รูทบนระบบไฟล์อื่น


1

ฉันมีความรู้ไม่มาก แต่ขั้นตอนเหล่านี้สามารถแก้ไขปัญหาของฉันได้โดยไม่ต้องรีสตาร์ทเครื่อง ทำตามขั้นตอนเหล่านี้:

su root
<enter root password>
cd /usr
chmod -R 755 *

1
คุณขาดคำสั่ง "cd" เป็นอย่างน้อย หากคุณทำเช่นนี้คุณกำลังทำ "chmod" บน dir บ้านเพื่อหาราก ที่จะทำให้สิ่งต่าง ๆ แย่ลง
Rinzwind

thaks ... แก้ไขคำตอบของฉัน ... ฉันอยู่ใน / usr โฟลเดอร์
มนู Mohan Thekkedath

2
ใช้งานได้เฉพาะถ้าตั้งรหัสผ่านไว้rootซึ่งไม่ใช่การกำหนดค่าเริ่มต้นของ Ubuntu
David Foerster

1

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

ขั้นตอนที่ 1:เปลี่ยนไปเป็นโหมดการกู้คืนอูบุนตู หากคุณไม่ทราบกระบวนการคุณสามารถดูคำตอบได้ที่นี่: /ubuntu//a/172346/223901

ขั้นตอนที่ 2:เมื่ออยู่ในโหมดการกู้คืนเลือกรูท - พร้อมต์ดร็อปรูทเชลล์

ขั้นตอนที่ 3:ทำคำสั่งต่อไปนี้

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

รอให้ระบบทำการบู๊ตตามปกติและคุณจะเห็นเจ้าของ sudo กลับสู่รูท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.