ตามที่คุณระบุไว้ในคำถามความแตกต่างที่สำคัญคือสภาพแวดล้อม
sudo su -
เมื่อเทียบกับ sudo -i
ในกรณีที่sudo su -
มันเป็นเปลือกเข้าสู่ระบบเพื่อให้/etc/profile
, .profile
และ.bashrc
จะดำเนินการและคุณจะพบว่าตัวเองในไดเรกทอรีบ้านรากกับสภาพแวดล้อมของราก
sudo -i
เกือบจะเป็นเช่นเดียวกับ(จำลองการเข้าสู่ระบบเริ่มต้น) ตัวเลือกที่ทำงานเปลือกที่ระบุโดยรายการฐานข้อมูลรหัสผ่านของผู้ใช้เป้าหมายเป็นเปลือกเข้าสู่ระบบ ซึ่งหมายความว่าการเข้าสู่ระบบเฉพาะไฟล์ทรัพยากรเช่น, หรือจะอ่านและดำเนินการโดยเปลือกsudo su -
-i
.profile
.bashrc
.login
sudo su
เมื่อเทียบกับ sudo -s
sudo su
เรียกด้วยคำสั่งsudo
su
Bash ถูกเรียกว่าเป็นเชลล์ที่ไม่ได้ล็อกอินแบบโต้ตอบ ดังนั้นรันเท่านั้นbash
.bashrc
คุณจะเห็นว่าหลังจากเปลี่ยนเป็นรูทแล้วคุณยังอยู่ในไดเรกทอรีเดิม:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
อ่าน$SHELL
ตัวแปรและดำเนินการกับเนื้อหา หาก$SHELL
มี/bin/bash
มันเรียกใช้sudo /bin/bash
ซึ่งหมายความว่า/bin/bash
จะเริ่มต้นเป็นเปลือกที่ไม่ได้เข้าสู่ระบบดังนั้นจุดไฟล์ทั้งหมดจะไม่ถูกดำเนินการ แต่bash
ตัวเองอ่าน bashrc
ของผู้ใช้ที่โทร สภาพแวดล้อมของคุณยังคงเหมือนเดิม บ้านของคุณจะไม่เป็นบ้านของคนรูท ดังนั้นคุณจะรูต แต่ในสภาพแวดล้อมของผู้ใช้ที่โทรมา
ข้อสรุป
การ-i
ตั้งค่าสถานะถูกเพิ่มลงsudo
ในปี 2004เพื่อจัดเตรียมฟังก์ชันที่คล้ายกันsudo su -
ดังนั้นsudo su -
เทมเพลตสำหรับsudo -i
และตั้งใจทำงานเช่นนั้น ฉันคิดว่ามันไม่สำคัญว่าคุณจะใช้เรื่องใดเว้นแต่ว่าสภาพแวดล้อมนั้นไม่สำคัญ
ส่วนที่เพิ่มเข้าไป
จุดพื้นฐานที่ต้องกล่าวถึงในที่นี้sudo
คือออกแบบมาเพื่อรันคำสั่งเดียวเพียงคำสั่งเดียวที่มีสิทธิ์สูงกว่า มันไม่ได้ตั้งใจจะเปลี่ยนผู้ใช้จริงๆและปล่อยให้รูทเชลล์เปิดทิ้งไว้ เมื่อเวลาผ่านsudo
ไปมีการขยายด้วยกลไกดังกล่าวเพราะผู้คนรู้สึกรำคาญว่าทำไมต้องใช้sudo
ต่อหน้าทุกคำสั่ง
ดังนั้นความหมายของการsudo
ถูกทำร้าย sudo
มีวัตถุประสงค์เพื่อส่งเสริมให้ผู้ใช้ลดการใช้สิทธิ์รูทให้น้อยที่สุด
สิ่งที่เรามีตอนนี้กำลังsudo
เป็นที่นิยมมากขึ้นเรื่อย ๆ มันรวมอยู่ในการกระจาย linux เกือบทุกที่รู้จักกันดี su
เครื่องมือเดิมเพื่อสลับไปยังบัญชีผู้ใช้อื่น สำหรับโรงเรียนเก่า * ระวังเก๋าสิ่งดังกล่าวเช่นsudo
อาจดูเหมือนไม่มีความจำเป็น มันเพิ่มความซับซ้อนและพฤติกรรมที่เป็นไปได้มากขึ้นกับกลไกที่เรารู้จักจากระบบปฏิบัติการตระกูล Microsoft และขัดกับปรัชญาของความเรียบง่ายของระบบ * nix
ฉันไม่ได้เป็นทหารผ่านศึกจริงๆ แต่ในความเห็นของฉันsudo
ก็มักจะเป็นหนามอยู่ข้างฉันเสมอจากเวลาได้รับการแนะนำและฉันก็พยายามหลีกเลี่ยงการใช้งานsudo
ถ้ามันเป็นไปได้ ฉันลังเลที่จะใช้sudo
มากที่สุด ในทุกระบบของฉันบัญชีรูทเปิดใช้งาน แต่สิ่งต่าง ๆ อาจมีการเปลี่ยนแปลงเวลาอาจจะมาถึงเมื่อsu
จะถูกคัดค้านและsudo
แทนที่su
อย่างสมบูรณ์
ดังนั้นผมคิดว่ามันจะเป็นสิ่งที่ดีที่สุดที่จะใช้sudo
ของกลไกภายใน ( -s
, -i
) แทนที่จะอาศัยเป็นเครื่องมือเก่า ๆ su
เช่น
ubuntu
su -
พวกเขาสร้างปัญหาและตอนนี้มีการอภิปรายกันอย่างไม่รู้จบเกี่ยวกับวิธีแก้ปัญหา