ทำไมโลก su ถึงสามารถปฏิบัติการได้?


20

ฉันมีเซิร์ฟเวอร์หัวขาดที่ลงชื่อเข้าใช้จากระยะไกลโดยผู้ใช้หลายคน ไม่มีผู้ใช้อื่น ๆ ที่อยู่ใน sudoers sudoไฟล์เพื่อให้พวกเขาไม่สามารถรับรากผ่าน อย่างไรก็ตามเนื่องจากสิทธิ์บนsuมี-rwsr-xr-xไม่มีอะไรหยุดพวกเขาจากการพยายามบังคับเดรัจฉานรหัสผ่านราก

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

มีอะไรทำให้ฉันสับสนอีกต่อไปเพราะมันไม่ได้มีประโยชน์แม้แต่น้อย มันช่วยให้ฉันทำงานsuได้โดยตรงแทนที่จะต้องทำsudo suแต่มันก็ไม่สะดวก

ฉันมองอะไรบางอย่าง โลกนี้ได้รับอนุญาตจากที่suนั่นเพียงเพราะเหตุผลทางประวัติศาสตร์หรือไม่? มีข้อเสียในการลบการอนุญาตที่ฉันยังไม่เคยพบหรือไม่


9
"มันช่วยให้ฉันสามารถเรียกใช้ su ได้โดยตรงแทนที่จะต้องทำ sudo su แต่มันก็ไม่สะดวก - แล้วระบบที่ไม่มีตัวเลือกsudoติดตั้งล่ะ? ฉันจะบอกว่ามันเป็นความไม่สะดวกที่ค่อนข้างใหญ่นั่น)
marcelm

1
คุณสามารถ จำกัด การเข้าถึงสำหรับ / bin / su ได้ตลอดเวลา แต่อย่าลืมทำเช่นเดียวกันกับ / usr / bin / pkexec
jpa

6
ฉันไม่สามารถเข้าใจแรงจูงใจที่อยู่เบื้องหลังคำถามนี้ ดูเหมือนคุณกำลังสงสัยว่าทำไม su จึงจำเป็นต้องปฏิบัติการในโลก แต่สิ่งที่จะเป็นทางเลือก? นั่นคือถ้า su สามารถทำงานได้โดย root เท่านั้น (?) คุณคิดว่ามันจะใช้เพื่ออะไร
David Z

1
@DavidZ จริงๆแล้วมันมีประโยชน์สำหรับ root จริงๆ! คุณสามารถสลับผู้ใช้ได้อย่างรวดเร็ว
วาลพูดว่า Reinstate Monica

1
@ ใช่ใช่นั่นเป็นเรื่องจริง ความจริงที่ว่ารูตสามารถใช้ su ไม่ได้เป็นปัญหา (เมื่ออ่านใหม่ฉันสามารถดูว่าความคิดเห็นก่อนหน้าของฉันจะแนะนำเป็นอย่างอื่นได้อย่างไร แต่นั่นไม่ใช่สิ่งที่ฉันหมายถึง) ฉันอยากรู้ว่า Altay_H คิดอย่างไรเกี่ยวกับเรื่องนี้ก่อนที่พวกเขาจะถามคำถามนี้
David Z

คำตอบ:


39

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

ตัวอย่างเช่นหากฉันเข้าสู่ระบบในฐานะผู้ใช้jimและฉันต้องการตรวจสอบปัญหาที่mikeได้รายงาน แต่ฉันไม่สามารถทำซ้ำได้ฉันอาจลองลงชื่อเข้าmikeใช้ด้วยและเรียกใช้คำสั่งที่ทำให้เขาเดือดร้อน

13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),14(ftp),920(vboxusers)

การใช้-lตัวเลือกsuทำให้เกิดการเข้าสู่ระบบเต็มรูปแบบ ( manต่อหน้า)

อย่างไรก็ตามข้างต้นจำเป็นต้องมีความรู้เกี่ยวกับmikeรหัสผ่าน หากฉันมีsudoสิทธิ์เข้าถึงฉันสามารถเข้าสู่ระบบmikeได้โดยไม่ต้องใช้รหัสผ่าน

13:27:37 /home/jim> sudo su -l mike
Password:(I type my own password, because this is sudo asking)
13:27:41 /home/mike>

โดยสรุปเหตุผลที่สิทธิ์ในการsuเรียกใช้งานเป็นไปตามที่คุณแสดงเนื่องจากsuเป็นเครื่องมืออเนกประสงค์ที่ผู้ใช้ทุกคนในระบบสามารถใช้งานได้


1
นั่นทำให้รู้สึกมาก ตั้งแต่ผมอยู่ในนิสัยของการใช้sudoฉันลืมที่สามารถใช้สำหรับการมากกว่าเพียงแค่su sudo -sและโดยไม่ต้องเป็น sudoer นี่จะเป็นวิธีเดียวที่จะสลับผู้ใช้โดยไม่ต้องเปลี่ยนคีย์ ssh สำหรับกรณีการใช้งานของฉันนี่เป็นอีกสาเหตุหนึ่งในการลบการอนุญาต แต่ฉันเข้าใจแล้วว่าทำไมโลกจึงอนุญาตให้เรียกใช้งานการตั้งค่าเริ่มต้นได้ ขอบคุณ!
Altay_H

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

ส่วนหนึ่งของความสับสนคือคนคิดว่าsuหมายถึง "super user" ซึ่งมันเมื่อไม่มีผู้ใช้ระบุ (หรือระบุรากอธิบาย) แต่ก็หมายถึง "สลับผู้ใช้" การใช้ครั้งที่สองsuนี้จึงถูกลืมได้ง่าย
Monty Harder

20

ในอดีต (ที่ไม่ GNU Unices) มันไม่ได้หรืออย่างน้อยก็มีการตรวจสอบด้วยตนเองถ้าคุณอยู่ในกลุ่มที่เรียกว่า "ล้อ" suได้รับอนุญาตให้ รุ่น GNU ของsuไม่ได้ทำหน้าที่นี้อีกครั้งเนื่องจากอุดมการณ์ของ RMS เกี่ยวกับการควบคุมการเข้าถึงในขณะนั้น:

Why GNU `su' does not support the `wheel' group
===============================================

   (This section is by Richard Stallman.)

   Sometimes a few of the users try to hold total power over all the
rest.  For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else.  (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

   However, occasionally the rulers do tell someone.  Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest.  The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

   I'm on the side of the masses, not that of the rulers.  If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้มากขึ้นโดย Googling "กลุ่มล้อ rms" หรือคล้ายกัน


3
นี่เป็นคำตอบเดียวที่ถูกต้อง การตั้งค่าเป็นเจตนาประวัติศาสตร์และนี่คือเหตุผลสำหรับมัน เทคนิคทั้งหมดเป็นเพียงแค่นั้น - blabla คุณสามารถสร้างกลุ่ม "wheel" ขึ้นมาใหม่ใน Unix ที่ทันสมัย
Tom

10

อย่างไรก็ตามเนื่องจากสิทธิ์บนsuมี-rwsr-xr-xไม่มีอะไรหยุดพวกเขาจากการพยายามบังคับเดรัจฉานรหัสผ่านราก

ใช่. สมมติว่าระบบ Linux ปกติของคุณpam_unix.soโมดูลจะหน่วงเวลาการตรวจสอบสิทธิ์ที่ล้มเหลวภายในเวลา ~ สองวินาที แต่ฉันไม่คิดว่าจะมีสิ่งใดที่จะหยุดความพยายามในเวลาเดียวกัน

ความพยายามที่ล้มเหลวเข้าสู่ระบบแน่นอน:

Aug 16 22:52:33 somehost su[17387]: FAILED su for root by ilkkachu

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

มีอะไรทำให้ฉันสับสนอีกต่อไปเพราะมันไม่ได้มีประโยชน์แม้แต่น้อย

แน่นอนว่ามันมีประโยชน์ช่วยให้คุณสามารถยกระดับตัวเองrootถ้าคุณรู้รหัสผ่าน

มันช่วยให้ฉันทำงานsuได้โดยตรงแทนที่จะต้องทำsudo suแต่มันก็ไม่สะดวก

sudo suค่อนข้างซ้ำซ้อน ไม่จำเป็นต้องใช้โปรแกรมสองโปรแกรมที่มีไว้เพื่อให้คุณสามารถเรียกใช้โปรแกรมในฐานะผู้ใช้รายอื่นได้ เพียงแค่ใช้sudo -iหรือsudo -s(หรือsudo /bin/bashอื่น ๆ ) หากคุณต้องการเรียกใช้เชลล์

ฉันมองอะไรบางอย่าง โลกนี้ได้รับอนุญาตจาก su ด้วยเหตุผลทางประวัติศาสตร์หรือไม่?

ดูด้านบน. ไม่ใช่ว่าทุกระบบจะsudoเป็นทางเลือกฉันไม่แน่ใจว่าคุณจะพิจารณาประวัติศาสตร์นั้นหรือไม่

มีข้อเสียในการลบการอนุญาตที่ฉันยังไม่เคยพบหรือไม่

ไม่จริงไม่เท่าที่ฉันรู้ ฉันคิดว่าระบบบางระบบได้suตั้งไว้เพื่อให้สมาชิกของกลุ่มใดกลุ่มหนึ่ง (" wheel") เท่านั้นที่สามารถเรียกใช้ได้ คุณสามารถทำเช่นเดียวกันกับsudoถ้าคุณชอบ ( chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo)

หรือคุณสามารถลบโปรแกรมใดโปรแกรมหนึ่งหรือทั้งสองอย่างหากคุณไม่ต้องการ แม้ว่าใน Debian suจะมาพร้อมกับloginแพ็คเกจดังนั้นจึงไม่ใช่ความคิดที่ดีที่จะลบแพ็คเกจทั้งหมด (และการจับคู่loginและการsuรวมกันเหมือนที่ดูเหมือนจะค่อนข้างเก่าแก่)


1
ระบบ BSD กำหนดให้ผู้ที่จะอยู่ในกลุ่มที่จะใช้wheel suมีระบบ BSD บางระบบ (ฉันสามารถพูดกับ OpenBSD ได้เท่านั้น) ที่ไม่ได้จัดส่งsudoเลย (เป็นแพ็คเกจของบุคคลที่สาม) OpenBSD มีdoasการปรับใช้พื้นฐานsudoใหม่ แต่มันถูกปิดใช้งานโดยค่าเริ่มต้นเมื่อติดตั้งระบบใหม่
Kusalananda

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

ฉันเรียกใช้ 'sudo su -' เพื่อให้แน่ใจว่าเชลล์รูทที่ฉันได้รับคือการเข้าสู่ระบบรูทแบบเต็มโดยไม่มีสภาพแวดล้อมที่สกปรกจากบัญชีผู้ใช้ของฉัน sudoers เริ่มต้นบน RHEL มีตัวแปรสภาพแวดล้อมที่สามารถใช้งานได้ (เช่น PS1)
jsbillings

@ jsbillings อืมโอเค ไม่suล้างสภาพแวดล้อมแล้ว? ดูเหมือนจะไม่ทำอย่างนั้นใน Debian ...
ilkkachu

“ su -“ ทำใน Linux ทุกตัวที่ฉันรู้จัก ใจรีบ
jsbillings

7

คุณมีคำตอบที่ดีอยู่แล้ว แต่มีส่วนหนึ่งของโพสต์ที่ไม่ได้กล่าวถึง

เท่าที่ฉันสามารถบอกได้ว่าโลกดำเนินการอนุญาตบน / usr / bin / su เป็นช่องทางเดียวสำหรับผู้ใช้ที่พยายามรับรูทบนเซิร์ฟเวอร์ของฉัน

นั่นเป็นข้อสันนิษฐานที่อันตราย หากคุณตั้งรหัสผ่านที่ดีสำหรับรูทแล้วในกรณีส่วนใหญ่มีแนวโน้มว่าการเพิ่มสิทธิ์ที่ประสบความสำเร็จจะเกิดจากการใช้ประโยชน์จากบั๊กในเคอร์เนลหรือไบนารี setuid (แน่นอนคุณสามารถลบ setuid ได้เช่นกัน บิตจากสิ่งเหล่านั้น แต่passwdเป็น setuid และหากคุณต้องการความปลอดภัยสูงคุณควรเสนอสิ่งนั้นให้กับผู้ใช้ของคุณและปฏิเสธพวกเขาตัวเลือกในการเปลี่ยนรหัสผ่านของพวกเขาไม่เข้ากัน)


1

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

หากคุณกังวลเกี่ยวกับคนอื่นที่ใช้รหัสผ่านรูทคุณสามารถปิดใช้งานได้ (ทำให้แฮชไม่ถูกต้องดังนั้นไม่มีรหัสผ่านที่กำหนดสามารถจับคู่ได้)

ฉันไม่ทราบเกี่ยวกับฉันทามติ แต่ฉันคิดว่าจะสามารถเข้าสู่ระบบได้เนื่องจากรูทมีปัญหาด้านความปลอดภัยโดยตรงและในตัวเอง


-2

คำตอบอื่น ๆ นั้นถูกต้องว่า "su" ช่วยให้คุณสามารถเข้าสู่ระบบบัญชีอื่นที่ไม่ใช่รูท

หมายเหตุหนึ่งเกี่ยวกับ "sudo su" นี่เป็นการอนุญาตให้คุณเข้าสู่บัญชีรูทโดยไม่ทราบรหัสผ่านรูท คุณต้องรู้รหัสผ่านของบัญชีที่คุณใช้งาน sudo รวมถึงมีบัญชีนั้นอยู่ในไฟล์ sudoers


3
ขึ้นอยู่กับว่าsudoersได้ตั้งค่าไว้targetpwหรือrootpwไม่
muru

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