ทำไมฉันไม่มีรหัสผ่านสำหรับ“ su”? ปัญหาเกี่ยวกับ“ sudo”


34

ฉันติดตั้ง Ubuntu โดยใช้ GUI ให้รหัสผ่านและทุกสิ่งกับตัวเองแล้ว ฉันไม่ได้จำกระบวนการอย่างประณีต อย่างไรก็ตามสิ่งที่ฉันเป็นห่วงคือฉันไม่รู้รหัสผ่านต่อไปนี้:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

ฉันแค่ไม่รู้จะทำยังไง ฉันไม่ได้มีปัญหา แต่ฉันแค่อยากรู้ว่าเกิดอะไรขึ้นที่นี่ ฉันยังสามารถล็อคตัวเองออกจากไดเรกทอรี:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

ฉันสับสนเล็กน้อย ฉันจะล็อคตัวเองแบบนี้ได้อย่างไร ฉันคิดว่าsudoเป็นคำสั่งที่สำคัญที่นี่ แต่ฉันกำลังทำให้foobsไฟล์เปิดอย่างที่ควรจะเป็นผ่านทางchmodดังนั้นทำไมมันล็อคฉันออก?


6
คุณแทบจะไม่ควรทำอะไรchmod -R 777 whateverเว้นแต่ว่าคุณต้องการก่อให้เกิดความเสี่ยงด้านความปลอดภัย

1
@BroSlow ขอบคุณสำหรับสุดยอด นอกเหนือจากคำถามนี้ แต่หนึ่งชุดจะอ่านสิทธิ์การเขียนไปยังไดเรกทอรีได้อย่างปลอดภัยได้อย่างไร 666?
Starkers

1
ดีกว่าแน่นอน แต่ขึ้นอยู่กับสิ่งที่คุณพยายามจะทำ เช่นคุณต้องการให้ผู้ใช้ทุกคนสามารถเข้าถึงทุกสิ่งได้หรือไม่ ถ้าไม่คุณสามารถทำอะไรเช่น 644 (อ่านได้สำหรับทุกคนยกเว้นคุณ) และโดยทั่วไปฉันจะระวังตัวมากเมื่อทำการวนซ้ำchmodว่ามันเป็นการเปลี่ยนแปลงไฟล์ที่คุณตั้งใจเท่านั้น

1
@broslow คุณสูงหรือไม่ 666 คือ 1) ยังสามารถเขียนได้ทั่วโลกดังนั้นความเสี่ยงด้านความปลอดภัยในระดับเดียวกันและ 2) ลบบิตที่เรียกใช้งานได้ซึ่งหมายความว่าเขาจะไม่สามารถ chdir ในไดเรกทอรีนั้นอีกต่อไป
Shadur

@Starkers ปัญหาด้านความปลอดภัยที่แท้จริงที่ฉันเห็นที่นี่คือเหตุผลบางอย่างที่บ้าคลั่ง/var/lib/sudoถูกตั้งค่าให้โลกเขียนได้ สิ่งนี้ไม่ควรเกิดขึ้นและคุณควรพยายามหาสาเหตุว่าทำไม
Shadur

คำตอบ:


49

ตามค่าเริ่มต้นrootบัญชีsuperuser ( ) จะถูกปิดใช้งานและไม่มีรหัสผ่านใด ๆ คุณสามารถสร้างได้โดยเรียกใช้:

$ sudo passwd root

จากนั้นคุณจะสามารถเข้าสู่ระบบในฐานะรูทได้โดยsuใช้รหัสผ่านนี้

สำหรับchmodคำสั่งที่ถูกต้องจะเป็น:

$ chmod 777 -R foobs

คุณยังสามารถใช้:

$ sudo -i

เพื่อเข้าสู่ระบบในฐานะรูทโดยใช้รหัสผ่านของคุณ (โดยไม่ต้องสร้างรหัสผ่านรูทตามที่อธิบายไว้ข้างต้น)


4
@Oli sudo suบางทีคุณอาจจะแก้ไขคำถามของคุณเพื่อเพิ่ม สิ่งนี้ยังให้สิทธิ์ su อย่างถาวรในเครื่อง
ปลุก

13
ห้ามใช้sudo suเพราะจะทำให้สกรูกับสภาพแวดล้อมและสิ่งต่าง ๆ จะแตก sudo -iแทนที่จะใช้
strugee

20
อย่าตั้งรหัสผ่านรูท ไม่ได้ตั้งค่ารหัสผ่านราก
wchargin

4
chmod 777 นั้นเกือบจะไม่ดีเสมอ (ยกเว้น bit เหนียวเช่นใช้กับ / tmp) คำตอบนี้เป็นความเสี่ยงด้านความปลอดภัย รวมถึงการตั้งค่ารหัสผ่านรูทไม่ใช่วิธีที่อูบุนตูควรใช้ เชิญอีกครั้งความเสี่ยงด้านความปลอดภัย โปรดปฏิบัติตามคำตอบของ neon_overload
Rinzwind

4
@WChargin ทำไมคุณไม่แนะนำให้มีบัญชี / รหัสผ่านรูท? ฉันอยากรู้อยากเห็นอย่างแท้จริงในฐานะผู้ใช้ archlinux
Rob

67

1. ทำไมคุณไม่มีรหัสผ่านรูต

ในขณะที่คุณสามารถสร้างรหัสผ่านสำหรับบัญชี superuser ที่อนุญาตให้คุณเข้าสู่ระบบด้วยรูทsuแต่ก็มีมูลค่าการกล่าวถึงว่านี่ไม่ใช่วิธีปกติในการทำสิ่งต่าง ๆ กับ Ubuntu (หรือการกระจายอื่น ๆ มากขึ้น) Ubuntu เลือกที่จะไม่ให้การเข้าสู่ระบบและรหัสผ่านรูทโดยค่าเริ่มต้นด้วยเหตุผล แต่การติดตั้งเริ่มต้นของ Ubuntu จะใช้sudoเพื่อให้สิทธิ์ผู้ใช้ระดับสูงแทน ในการติดตั้งอูบุนตูเริ่มต้นผู้ที่ติดตั้งระบบปฏิบัติการจะได้รับสิทธิ์ "sudo" เป็นค่าเริ่มต้น

ใครก็ตามที่ได้รับอนุญาต "sudo" เต็มรูปแบบอาจดำเนินการบางอย่าง "เป็น superuser" โดยรอsudoคำสั่งล่วงหน้า ตัวอย่างเช่นหากต้องการใช้apt-get dist-upgradeเป็น superuser คุณสามารถใช้:

sudo apt-get dist-upgrade

คุณจะเห็นการใช้งาน sudo ได้ทุกที่ที่คุณอ่านบทช่วยสอนเกี่ยวกับ Ubuntu บนเว็บ มันเป็นทางเลือกในการทำสิ่งนี้

su
apt-get dist-upgrade
exit

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

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

ด้วย sudo คุณยังคงมีตัวเลือกในการเปิดเชลล์ superuser แบบโต้ตอบ (ถาวร) ด้วยคำสั่ง:

sudo su

... และสิ่งนี้สามารถทำได้โดยไม่ต้องใช้รหัสผ่านรูทใด ๆ เพราะsudoให้สิทธิ์ superuser แก่suคำสั่ง

และในทำนองเดียวกันแทนsu -สำหรับเปลือกเข้าสู่ระบบที่คุณสามารถใช้หรือทางลัดsudo su -sudo -i

อย่างไรก็ตามเมื่อทำเช่นนั้นคุณต้องระวังว่าคุณทำตัวเป็น superuser สำหรับทุกคำสั่ง เป็นหลักการด้านความปลอดภัยที่ดีที่จะไม่คงอยู่ในฐานะผู้ใช้ระดับสูงนานกว่าที่จำเป็นเพียงเพื่อลดความเป็นไปได้ที่จะเกิดความเสียหายกับระบบโดยไม่ตั้งใจ (โดยที่คุณไม่สามารถทำได้

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


2. ปัญหาเกี่ยวกับคำสั่ง chmod 777 -R ของคุณ

คำถามของคุณนอกจากนี้ยังมีส่วนที่สองไป: sudo chmod 777 -R foobsปัญหาของคุณกับคำสั่ง

ประการแรกคำเตือนต่อไปนี้ระบุถึงปัญหาความปลอดภัยที่ร้ายแรงที่อาจเกิดขึ้นกับเครื่องของคุณ:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

ซึ่งหมายความว่าในบางขั้นตอนคุณได้กำหนด/var/lib/sudoให้สามารถเขียนได้ทั่วโลก sudo chmod 777 -R /ผมคิดว่าคุณได้ทำนี้ที่บางขั้นตอนโดยใช้คำสั่งเช่น น่าเสียดายที่การทำเช่นนี้คุณอาจทำผิดสิทธิ์การใช้งานไฟล์ทั้งหมดในระบบของคุณ ไม่น่าเป็นไปได้ที่ไฟล์นี้จะเป็นไฟล์ระบบที่สำคัญเพียงไฟล์เดียวเท่านั้นที่มีการเปลี่ยนการอนุญาตเป็นแบบเขียนได้ทั่วโลก โดยพื้นฐานแล้วคุณมีระบบที่แฮ็คได้ง่ายในตอนนี้และวิธีเดียวที่จะเอากลับคืนมาได้อย่างง่ายดายก็คือติดตั้งใหม่

ประการที่สองคำสั่งที่คุณใช้:

sudo chmod 777 -R foobs

เมื่อจัดการไฟล์ภายในโฮมไดเร็กตอรี่ของคุณ, ในกรณีนี้~/Desktop, คุณไม่ควรใช้sudo. ไฟล์ทั้งหมดที่คุณสร้างในโฮมไดเร็กตอรี่ของคุณควรจะสามารถแก้ไขได้โดยคุณ

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

มันเกือบจะแน่นอนว่าchmod 777 -R [dir]มันไม่ได้เป็นทางออกที่เหมาะสมสำหรับปัญหาใด ๆ ที่คุณกำลังพยายามที่จะแก้ไข (และอย่างที่ฉันได้กล่าวไว้ข้างต้นมีหลักฐานว่าคุณได้ทำมันกับไฟล์ระบบใน / var / lib ด้วยและฉันคิดว่า สถานที่)

กฎพื้นฐานง่ายๆสองข้อ:

  • หากคุณเพียงแค่ล้อเล่นกับไฟล์ของคุณเองในโฮมไดเร็กตอรี่เดสก์ท็อป ฯลฯ คุณไม่จำเป็นต้องใช้sudoสิทธิ์หรือ superuser หากคุณเป็นสัญญาณเตือนว่าคุณกำลังทำอะไรผิด

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


คำอธิบายที่ยอดเยี่ยม .. ยกนิ้วให้ .. :)
Saurav Kumar

7
ผมคิดว่า "sudo -i" เป็น "ข้าราชการ" วิธีการรับเปลือกรากมากกว่า "sudo su"
แม็กซ์

3
ใช่คุณควรใช้มากกว่าsudo -i sudo su
เซท

sudo -i(หรือsudo su -) นั้นไม่ได้ดีกว่าในระดับสากล แต่แตกต่างกัน - สิ่งเหล่านี้เรียกใช้ล็อกอินเชลล์ที่จำลองสภาพแวดล้อมการล็อกอินของผู้ใช้รูทซึ่งดำเนินการเช่น.profileไฟล์หรือ.loginไฟล์ของผู้ใช้รูท สิ่งเหล่านี้จะดีกว่าถ้าคุณต้องการให้สภาพแวดล้อมในเชลล์เป็นเหมือนรูทล็อกอินเชลล์มากกว่าเชลล์แบบโต้ตอบที่เกิดขึ้นกับสิทธิ์ผู้ใช้ระดับสูง มันน่าจะดีกว่าถ้าใช้ shell-based shell ถ้าใช้ shell, แต่นั่นคือ moot: ประเด็นของคำตอบก็คือ Ubuntu นั้นถูกออกแบบมาเพื่อใช้sudoในการรันคำสั่งที่มีสิทธิ์ superuser เป็นหลัก
thomasrutter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.