ความแตกต่างในการทำงานระหว่าง sudo su และ sudo -i คืออะไร?


19

เหตุใดสิ่งหนึ่งจึงเป็นที่ต้องการเหนือสิ่งอื่นในตัวอย่างนี้

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

โปรดระบุลิงก์ไปยังเอกสารของ Ubuntu


โปรดพิจารณาคำตอบ "ยอมรับ" ที่คุณเลือกอีกครั้ง อันที่ถูกโหวตต่ำที่สุดคืออันที่ถูกต้องเท่านั้น
Kyle Strand

คำตอบ:


15

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

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

ที่มา: ManPage


1
"การใช้ su สร้างปัญหาด้านความปลอดภัยและเป็นอันตรายอย่างยิ่ง" อะไร?
หยุดทำร้ายโมนิก้า

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

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

3
และการลบความคิดเห็นของคุณเพียงเพิ่มความสับสน
หยุดทำร้ายโมนิก้า

1
คุณไม่ได้ทำให้ดีขึ้นมาก sudo -iจะไม่ถามรหัสผ่านของรูทด้วยดังนั้นจึงไม่เกี่ยวข้องกับคำถาม
หยุดทำร้ายโมนิก้า

14

sudo suเปลี่ยนผู้ใช้ปัจจุบันเป็นรูทเท่านั้น การตั้งค่าสภาพแวดล้อม (เช่น PATH) ยังคงเหมือนเดิม

sudo -i สร้างสภาพแวดล้อมใหม่ราวกับว่ารูทเพิ่งเข้าสู่ระบบ

ความแตกต่างนั้นชัดเจนมากขึ้นหากคุณใช้ผู้ใช้รายอื่น หลังจากsudo su bobคุณจะบ๊อบ แต่อยู่ในสถานที่เดียวกัน หลังจากsudo -i -u bobคุณจะเป็นคนบ็อบในไดเรกทอรีบ้านของบ๊อบด้วยเปลือกเริ่มต้นของบ๊อบและกับบ๊อบ.profileและสคริปต์การเข้าสู่ระบบอื่น ๆ ที่ถูกเรียกใช้

ดูman sudoรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่-iทำ โชคไม่ดีman suที่รายละเอียดอ่อน


พบรุ่นman su(จากการเข้าสู่ระบบ -1: 4.1.4.2 + svn3283-3ubuntu5.1) ที่มีดังต่อไปนี้จะพูดว่า:

$ PATH รีเซ็ตตามตัวเลือก /etc/login.defs ENV_PATH หรือ ENV_SUPATH (ดูด้านล่าง);

$ IFS รีเซ็ตเป็น“ <space> <tab> <newline>” หากตั้งไว้

โปรดทราบว่าพฤติกรรมเริ่มต้นสำหรับสภาพแวดล้อมดังต่อไปนี้:

ตัวแปรสภาวะแวดล้อม $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH และ $ IFS จะถูกรีเซ็ต

ถ้า --login ไม่ได้ใช้สภาพแวดล้อมจะถูกคัดลอกยกเว้นตัวแปรข้างต้น

หาก --login ถูกใช้ตัวแปรสภาพแวดล้อม $ TERM, $ COLORTERM, $ DISPLAY และ $ XAUTHORITY จะถูกคัดลอกหากตั้งค่าไว้

สภาพแวดล้อมอื่นอาจถูกตั้งค่าโดยโมดูล PAM

ดังนั้นsudo suการเปลี่ยนแปลงสภาพแวดล้อมจะขึ้นอยู่กับการกระจายและการตั้งค่าของคุณ ดังนั้นในsudo -iทางทฤษฎีแล้วพกพาได้มากกว่าในทางทฤษฎี


su ไม่ตั้งค่าสภาพแวดล้อมที่เปลี่ยนแปลงและสามารถนำมาใช้ในการจำลองการเข้าสู่ระบบโดยใช้หรือ- -lแม้จะไม่ได้-l, $PATH มีการเปลี่ยนแปลง ทดสอบการอ้างสิทธิ์เหล่านี้ก่อนตัดสินใจ! (คุณหมายความว่าPWDยังคงเหมือนเดิมหรือไม่)
Kyle Strand

คำถามจริงคือมีความแตกต่างระหว่างsudo su -และsudo -i?
Kyle Strand

1
คุณกำลังใส่ความคิดบางอย่างไว้ในนี้และทำการทดสอบในเปลือกดังนั้นฉันขอโทษสำหรับความคิดเห็น "ทดสอบการอ้างสิทธิ์เหล่านี้" ของฉัน ที่กล่าวว่าในระบบของฉันฉันจะสังเกตเห็นว่า$PATHมีการเปลี่ยนแปลงเมื่อฉันใช้suโดยไม่ต้องsudo(ใช้รหัสผ่านรูท) ตามที่info su(ซึ่งอาจเป็นสิ่งที่ดีกว่าในการเชื่อมโยงไปยังคำตอบของคุณ) suไม่แน่นอนอ่านรายการรหัสผ่านสำหรับผู้ใช้ที่คุณกำลังจะกลายเป็น อาจเป็นไปได้ว่า$PATHการเปลี่ยนแปลงที่ฉันสังเกตเห็นนั้นขึ้นอยู่กับระบบ (ฉันใช้ Debian 7)
Kyle Strand

1
อืมม ของฉันman su(ซึ่งเป็นเวลานานกว่าคนที่คุณเชื่อมโยงกับ) shadow-utils 4.1.5.1บอกว่ามันเป็นส่วนหนึ่งของ manหน้าของฉันยังบอกว่า$PATHตั้งไว้แม้ว่า--preserve-environmentจะใช้ suดังนั้นผมคิดว่าจริงๆมันเป็นเพียงความแตกต่างระหว่างรุ่นที่แตกต่างกันของ
Kyle Strand

1
พฤติกรรมนี้ยังได้รับผลกระทบจากการกำหนดค่า PAM ของคุณ /etc/pam.d/sudoและ/etc/pam.d/suอาจถูกตั้งค่าให้ทำสิ่งที่แตกต่างอย่างสิ้นเชิงหรือเหมือนกันทุกประการ
หยุดทำร้ายโมนิก้า

7

ปัญหาหลักคือการตั้งค่าสภาพแวดล้อมที่มีเหตุผลอย่างใดอย่างหนึ่ง

การใช้sudo suเชลล์ใหม่รับสภาพแวดล้อมจากผู้ใช้ที่ออกคำสั่ง - ซึ่งอาจเป็นปัญหา

ด้วยsudo -iคุณจะได้รับเปลือกรูตที่สะอาด

ดูหมายเหตุพิเศษเกี่ยวกับ sudo และ shells

ยังคงต้องสังเกตว่าแทบไม่จำเป็นเลยในการสร้างรูตเชลล์


"บันทึกย่อพิเศษ" ที่คุณเชื่อมโยงเพื่อบอกว่าsudo -iคล้ายกับsudo su -ที่จริงไม่ได้รับสภาพแวดล้อมจากผู้ใช้ที่ออกคำสั่ง
Kyle Strand

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