วิธีการคืน sudo บน Ubuntu?


12

ฉันทำสิ่งนี้แล้ว:

sudo chown -R myname /usr/

และตอนนี้ฉันไม่สามารถใช้sudoคำสั่งได้เนื่องจากข้อผิดพลาดนี้:

sudo: ต้องเป็น setuid root

และเมื่อฉันอ่านข้อความนี้หมายความว่าเจ้าของไฟล์/usr/bin/sudoนี้ไม่ได้เป็นรูท มันเป็นผู้ใช้ของฉันตอนนี้เพราะ chown ใน/usrโฟลเดอร์

ในฟอรัมและบล็อกที่หลายคนแนะนำให้ทำเช่นนี้ในฐานะรูท:

# chown root:root /usr/bin/sudo
# chmod 4111 /usr/bin/sudo

... แต่ปัญหาของเรื่องนี้คือฉันต้องเข้าสู่ระบบในฐานะที่เป็น root แต่ฉันทำไม่ได้เพราะถ้าฉันเขียนsuในเทอร์มินัลรหัสผ่านไม่ถูกต้อง (อันที่จริงฉันใช้รหัสผ่านที่ฉันเพิ่มให้กับผู้ใช้ของฉัน):

$ su
Password:
su: Authentication failure

ดังนั้นฉันจะกลับsudoคำสั่งได้หรือไม่

แก้ไข: Ubuntu ของฉันอยู่ภายใต้ Paralells บน Mac OS X ของฉัน


คุณหมายถึงอะไร "ฉันใช้รหัสผ่านที่ฉันเพิ่มให้ผู้ใช้" เมื่อคุณใช้suคุณจะได้รับแจ้งสำหรับรหัสผ่าน root ของsudoไม่ได้ใช้รหัสผ่านของผู้ใช้เช่นเดียวกับ คุณรู้รหัสผ่านรูทของเครื่องนี้หรือไม่?
Caleb

ไม่ฉันไม่จำเป็นต้องเพิ่มหรือแก้ไขมีค่าเริ่มต้นหรือไม่
อดัม

คุณต้องรีบูตในโหมดผู้ใช้คนเดียว คุณแจกจ่ายอะไรอยู่
Gilles 'หยุดความชั่วร้าย'

1
แค่อยากรู้อยากเห็น แต่สิ่งที่ทำให้คุณตัดสินใจที่จะใช้sudo chmod -R cirk:cirk /usrสิ่งที่คุณพยายามที่จะบรรลุ?
loosecannon

1
โปรแกรมที่ติดตั้งที่ใดที่หนึ่งใน / usr / เนื่องจากฉันไม่ทราบตำแหน่งที่แน่นอนของโปรแกรมฉันตัดสินใจที่จะใช้ chown ในโฟลเดอร์ usr ทั้งหมดและเพราะฉันไม่ใช่คนโง่ฉันเมาทุกอย่างอีกครั้ง: P
Adam

คำตอบ:


5

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

วิธีที่เร็วที่สุดคือติดตั้งระบบปฏิบัติการของคุณใหม่หรือกู้คืนจากการสำรองข้อมูล

ใน Ubuntu หรือคล้ายกันแล้วไม่มีรหัสผ่าน root โดยค่าเริ่มต้น (บัญชีที่ถูกปิดใช้งาน) suซึ่งเป็นเหตุผลที่คุณไม่สามารถ


8
ว้าวใช้ง่ายมีนี่ไม่ใช่ windows ติดตั้งใหม่ไม่ได้เป็นวิธีที่ง่ายที่สุดหรือเร็วที่สุดในการทำอะไรและแน่นอนไม่ได้สอนคนวิธีการแก้ไขปัญหา ในกรณีนี้สิ่งที่เขาต้องทำก็แค่ย้อนกลับการกระทำที่เขาทำได้ซึ่งทำได้ง่ายๆโดยการติดตั้งระบบไฟล์ในสภาพแวดล้อมอื่นเช่น LiveCD หรือโหมดช่วยเหลือที่คุณแนะนำ (ขึ้นอยู่กับ distro)
Caleb

@Caleb เมื่อคุณทิ้งการอนุญาตทั้งหมดในระบบไฟล์ที่สำคัญ เขาไม่ได้แค่ทำให้ sudo เสีย แต่เขาลืมที่จะพูดถึงในโพสต์ของเขาว่าเขาใช้ -R (ไม่เช่นนั้นมันจะเปลี่ยนเจ้าของไดเรกทอรี / usr เท่านั้นเองและไม่ใช่ sudo) ฉันยังได้อธิบายถึงวิธีการย้อนกลับกระบวนการ แต่มันเป็นงานที่ต้องใช้เวลาและความพยายามอย่างมาก
psusi

1
นี้เป็นกรณีของการไม่ได้chown chmodเนื่องจากทุกอย่างใน/usrโฟลเดอร์ควรเป็นroot:rootสิ่งนี้จึงเป็นวิธีแก้ไขที่ง่ายไม่ใช่การแก้ไขด้วยความพยายามอย่างที่ผู้chmodสวมใส่จะหมายถึง
Caleb

2
@Caleb ไม่ใช่ทุกอย่างใน / usr ควรเป็น root: root
psusi

6
@Caleb chownรีเซ็ตบิต setxid มีไฟล์บางไฟล์/usrที่รูทไม่ได้เป็นเจ้าของ มากกว่าที่อยู่ในกลุ่มอื่น (โดยเฉพาะอย่างยิ่งโปรแกรม setgid ใน/usr/bin)
Gilles 'หยุดความชั่วร้าย'

11

เนื่องจากคุณได้ปิดการอนุญาตในสิ่งเดียวที่ให้สิทธิ์การเข้าถึงระดับรูตคุณจะต้องได้รับความช่วยเหลือจากสภาพแวดล้อมซอฟต์แวร์ปัจจุบันเพื่อแก้ไขปัญหานี้

ฉันขอแนะนำว่าวิธีที่ง่ายที่สุดคือการบูต LiveCD สำหรับ distro ของคุณติดตั้งไดรฟ์ของคุณและเปลี่ยนการอนุญาตไฟล์โดยใช้chmodรายการที่คุณระบุ

คุณสามารถลองบูตในโหมดผู้ใช้คนเดียวเพื่อรับรูตเชลล์

โปรดทราบว่าโดยปกติทุกสิ่งใน/usr/ไดเรกทอรีควรเป็นเจ้าของrootดังนั้นคุณควรจะสามารถเรียกซ้ำchownเพื่อแก้ไขสิ่งที่คุณแตกได้ ( แก้ไข:ต่อความคิดเห็น @Gilles เห็นได้ชัดว่าการทำงานchownแบ่งบิต setuid และ setgid ดังนั้นคุณจะต้องเปรียบเทียบกับระบบที่มีอยู่ด้วยตนเองเพื่อเรียกคืนทั้งหมดเหล่านี้เมื่อคุณแก้ไขความเป็นเจ้าของอีกครั้ง)

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


เป็นไปได้ไหมหากระบบปฏิบัติการอยู่ใน Virtual Machine?
อดัม

ใช่มันไม่ต่างอะไร คุณสามารถใช้ runlevel 1 (สิ่งที่คุณสามารถทำได้ในตอนเริ่มต้นกระบวนการบูตจาก grub / lilo หรือ wahtever bootloader ของคุณคือ) หรือคุณสามารถตั้งค่า VM ให้ใช้อิมเมจ ISO ของ LiveCD เป็นอุปกรณ์บูต
Caleb

Aham ดีก่อนที่จะติดตั้งใหม่ผมจะพยายามให้คำแนะนำของคุณ :)
อดัม

ตกลงฉันคิดว่าฉันอยู่ใน LiveCD ตอนนี้ฉันต้องเขียนมันใน terminal? sudo chown -R root /usr/?
อดัม

ยาเริ่มต้นกับที่ แต่ไม่ได้อยู่/usrใน LivdCD /mnt/mydrive/usrคุณจะต้องติดมันที่อื่นและทำงานกับเส้นทางที่พูด แล้วคุณจะต้องแก้ไขบิต setuid /mnt/mydrive/usr/bin/sudoบน จากนั้นดู / usr บน livecd และดูว่ามีเจ้าของรายอื่นที่ไม่ใช่รูทหรือไม่ find /usr -not -uid 0และเปลี่ยนสิ่งเหล่านั้นให้ตรงกัน จากนั้นค้นหาสิ่งต่าง ๆ ที่มี setuid หรือ setgid bits ที่แตกต่างกันและตรวจสอบให้แน่ใจว่าตรงกันเหล่านั้นด้วย หากคุณมีระบบ Ubunutu จริงเพื่อเปรียบเทียบกับที่จะดีที่สุด
Caleb

4

ในโหมดการกู้คืนของ Ubuntu ให้ป้อนคำสั่งต่อไปนี้ .. นี่เป็นการแก้ไขการออกสำหรับฉัน ..

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

หวังว่านี่จะช่วยแก้ปัญหาของคุณ (หรือของคนอื่น)

ฉันพบสิ่งนี้ที่นี่ในโพสต์บล็อกนี้


2

มันง่ายกว่าคำตอบอื่น ๆ ที่แนะนำ ไม่จำเป็นต้องฟอร์แมตรีบูตหรือใช้ซีดีสด

su root # then enter your password to switch to root user
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
exit # to get back to the original user

นี่เป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้ คำอธิบาย sudo เสียหาย (ฉันรู้ว่าเสียหายเป็นคำที่ผิด แต่มันไม่ทำงานดังนั้นเราต้องหลีกเลี่ยงการใช้ sudo)

  • การใช้คำสั่ง 1 (su root)เราเปลี่ยนผู้ใช้เป็นรูทโดยไม่ใช้ sudo
  • การใช้คำสั่ง 2 (chown root: root / usr / bin / sudo && chmod 4755 / usr / bin / sudo)เราแก้ไขสิทธิ์ / ความเป็นเจ้าของของ sudo
  • ใช้คำสั่ง 3 (ออก)เรากลับไปที่ผู้ใช้เดิม

ฉันได้ทดสอบวิธีนี้กับ Linux มินต์ ซึ่งเป็นระบบเช่นอูบุนตู ให้ฉันรู้ว่าวิธีการนี้ใช้ไม่ได้กับระบบปฏิบัติการอื่น จะอัปเดตคำตอบตาม

ขอบคุณ


ตามที่ฉันเข้าใจแล้วบัญชีรูทเริ่มต้นไม่มีรหัสผ่านดังนั้นจึงเป็นไปไม่ได้ที่จะให้รหัสผ่านในขั้นตอนแรกsu rootและเนื่องจากsudoไม่สามารถใช้งานได้จึงไม่สามารถตั้งค่ารหัสผ่านรูทได้
TitanFighter

1
ขอบคุณมันช่วยฉัน
อรุณ

1

มันง่ายกว่าที่คนทำกัน ลองทำสิ่งต่อไปนี้:

  1. แทนที่จะพยายามเข้าสู่ระบบในฐานะรูทโดยใช้suคำสั่งที่ขาดให้ออกจากระบบในฐานะผู้ใช้ปัจจุบันของคุณและเข้าสู่ระบบอีกครั้งในฐานะรูทผ่านตัวจัดการหน้าจอปกติของคุณ (เช่นหน้าจอเข้าสู่ระบบ)
  2. ดำเนินการต่อไปนี้ที่สถานี: chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

การดำเนินการนี้ควรแก้ไขsudoคำสั่งและทำให้คุณพร้อมใช้งานได้ทันที


0

ในการเข้าสู่ระบบในฐานะ root โดยไม่มี su หรือ sudo คุณสามารถใช้ pkexec:

pkexec su

ตอนนี้เปลี่ยนการอนุญาตไฟล์ ':

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