ด้วยsuคุณจะกลายเป็นผู้ใช้คนอื่น - โดยค่าเริ่มต้น แต่อาจเป็นผู้ใช้รายอื่น หากคุณพูดว่าsu -สภาพแวดล้อมของคุณจะถูกแทนที่ด้วยสภาพแวดล้อมการเข้าสู่ระบบของผู้ใช้เช่นกันดังนั้นสิ่งที่คุณเห็นจะไม่สามารถแยกออกจากการเข้าสู่ระบบในฐานะผู้ใช้รายนั้นได้ ไม่มีวิธีที่ระบบสามารถบอกได้ว่าคุณทำอะไรในขณะที่suให้ผู้ใช้รายอื่นกระทำโดยผู้ใช้นั้นเมื่อพวกเขาเข้าสู่ระบบ
สิ่งต่าง ๆ กับsudo:
คำสั่งที่คุณเรียกใช้ผ่านsudo การดำเนินการในฐานะผู้ใช้เป้าหมาย - รูตตามค่าเริ่มต้น แต่สามารถเปลี่ยนแปลงได้ด้วย-u- แต่จะบันทึกคำสั่งที่คุณเรียกใช้ผ่านแท็กด้วยชื่อผู้ใช้ของคุณเพื่อให้สามารถกำหนดความผิดได้ภายหลัง :)
sudoมีความยืดหยุ่นมาก คุณสามารถ จำกัด คำสั่งที่อนุญาตให้ผู้ใช้หรือกลุ่มผู้ใช้เรียกใช้ตัวอย่างเช่น ด้วยsuมันคือทั้งหมดหรือไม่มีอะไร
โดยทั่วไปคุณสมบัตินี้ใช้เพื่อกำหนดบทบาท ตัวอย่างเช่นคุณสามารถกำหนดกลุ่ม "backups" ที่อนุญาตให้เรียกใช้dumpและtarแต่ละกลุ่มต้องการการเข้าถึงรูทเพื่อสำรองดิสก์ระบบอย่างถูกต้อง
ฉันพูดถึงเรื่องนี้ที่นี่เพราะมันหมายความว่าคุณสามารถให้sudoสิทธิพิเศษแก่ใครบางคนโดยไม่ต้องให้sudo -sหรือsudo bashความสามารถ พวกเขามีเพียงสิทธิ์ที่จำเป็นในการทำงานของพวกเขาในขณะที่suพวกเขาได้ทำงานของระบบทั้งหมด คุณจะต้องระมัดระวังเกี่ยวกับเรื่องนี้ว่า: ถ้าคุณให้คนที่ความสามารถในการพูดsudo viเช่นที่พวกเขาสามารถเปลือกออกของและมีประสิทธิภาพการใช้พลังงานเช่นเดียวกับกับvisudo -s
เนื่องจากใช้รหัสผ่านของ sudoer แทนรหัสผ่าน root ให้sudoแยกสิทธิ์ระหว่าง sudoers หลายรายการ
นี้แก้ปัญหาการบริหารด้วยsuซึ่งก็คือว่าเมื่อมีการเปลี่ยนแปลงรหัสผ่าน root ทุกคนที่จะต้องรู้ว่ามันจะใช้suจะต้องมีการบอกว่า sudoอนุญาตให้รหัสผ่านของ sudoers เปลี่ยนได้อย่างอิสระ ในความเป็นจริงมันเป็นเรื่องธรรมดาที่จะมีรหัสผ่านล็อคบัญชีผู้ใช้รากบนระบบที่มีการบังคับให้งานดูแลระบบทั้งหมดจะทำผ่านทางsudo sudoในองค์กรขนาดใหญ่ที่มี sudoers ที่เชื่อถือได้จำนวนมากซึ่งหมายความว่าเมื่อ sysadmins ใบใดใบหนึ่งหายไปคุณไม่จำเป็นต้องเปลี่ยนรหัสผ่านรูทและแจกจ่ายให้ผู้ดูแลระบบที่เหลืออยู่
ความแตกต่างที่สำคัญระหว่างsudo bashและsudo -sที่-sสั้นกว่าและช่วยให้คุณส่งคำสั่งเพื่อดำเนินการในเชลล์เริ่มต้นของผู้ใช้ในสองวิธี:
คุณสามารถบอกได้ว่าsudo -s some-commandอันsome-commandไหนที่ทำงานภายใต้เปลือกของคุณ sudo $SHELL -c some-commandมันเป็นพื้นสำหรับการจดชวเลข
คุณสามารถส่งคำสั่งไปยังอินพุตมาตรฐานของเชลล์ได้เช่นsudo -s < my-shell-scriptกัน คุณสามารถใช้สิ่งนี้กับheredocเพื่อส่งคำสั่งหลายคำสั่งไปยังการsudoโทรครั้งเดียวโดยไม่จำเป็นต้องพิมพ์sudoซ้ำ ๆ
พฤติกรรมทั้งสองนั้นเป็นทางเลือก โดยทั่วไปคุณให้-sเพียงอย่างเดียวดังนั้นมันจึงรันเชลล์ผู้ใช้ของคุณแบบโต้ตอบ ในโหมดนั้นมันแตกต่างจากsudo bashที่มันอาจใช้เชลล์ที่แตกต่างกว่าbashเนื่องจากมันดูเป็นครั้งแรกในSHELLตัวแปรสภาพแวดล้อมและจากนั้นหากไม่ได้ตั้งค่าไว้ที่การตั้งค่าเชลล์ล็อกอินของผู้ใช้ของ/etc/passwdคุณ
เชลล์รันโดยsudo -sสืบทอดสภาวะแวดล้อมผู้ใช้ปัจจุบันของคุณ หากสิ่งที่คุณต้องการจริง ๆ คือสภาพแวดล้อมที่สะอาดเช่นคุณจะได้รับหลังจากเข้าสู่ระบบสิ่งที่คุณต้องการคือแทนที่จะเป็นนอกจากนี้ล่าสุดค่อนข้างจะsudo -i sudoพูดประมาณsudo -iคือการsudo -sเป็นsu -คือsuมันรีเซ็ตทั้งหมด แต่ตัวแปรสภาพแวดล้อมที่สำคัญไม่กี่และส่งคุณกลับไปยังบ้านของผู้ใช้ของคุณ หากคุณไม่ให้คำสั่งเพื่อรันภายใต้เชลล์นั้นผ่านอินพุตมาตรฐานหรือsudo -i some-commandมันจะรันเชลล์นั้นเป็นเชลล์ล็อกอินแบบโต้ตอบดังนั้นสคริปต์การเริ่มต้นเชลล์ของผู้ใช้ของคุณ (เช่น.bash_profile) จะทำงานอีกครั้ง
ทั้งหมดนี้ทำให้มากมีความปลอดภัยมากกว่าsudo -i sudo -sทำไม? เพราะหากใครบางคนสามารถปรับเปลี่ยนสภาพแวดล้อมของคุณมาก่อนsudo -sพวกเขาอาจทำให้คำสั่งที่ไม่ตั้งใจดำเนินการ กรณีที่เห็นได้ชัดที่สุดคือการปรับเปลี่ยนSHELLแต่ก็ยังสามารถเกิดขึ้นได้น้อยโดยตรงเช่นผ่านPAGERถ้าคุณบอกว่าขณะที่ภายใต้man foosudo -s
คุณอาจพูดว่า "หากพวกเขาสามารถปรับเปลี่ยนPAGERพวกเขาสามารถแก้ไขPATHได้และจากนั้นพวกเขาสามารถทดแทนsudoโปรแกรมที่ชั่วร้ายได้" แต่บางคนหวาดระแวงอย่างเพียงพอสามารถพูด/usr/bin/sudo /bin/bashเพื่อหลีกเลี่ยงกับดักนั้นได้ คุณอาจไม่หวาดระแวงจนคุณหลีกเลี่ยงกับดักในตัวแปรสภาพแวดล้อมที่อ่อนไหวอื่น ๆด้วย คุณจำEDITORตัวอย่างเช่นก่อนตรวจสอบคำสั่งVCSหรือไม่? sudo -iดังนั้น
เพราะsudo -iยังมีการเปลี่ยนแปลงไดเรกทอรีที่ทำงานของคุณไปยังบ้านของผู้ใช้ของคุณคุณอาจยังคงต้องการที่จะใช้sudo -sสำหรับสถานการณ์เหล่านั้นที่คุณรู้ว่าคุณต้องการที่จะอยู่ในไดเรกทอรีเดียวกันที่คุณ'วันที่ผ่านเข้ามาในเมื่อคุณวิ่งcd sudoแต่ก็ยังปลอดภัยsudo -iและcdกลับไปที่ที่คุณอยู่
sudo su -วิธีนี้คุณไม่จำเป็นต้องใช้รหัสผ่านรูทและ-ทำให้แน่ใจว่าไดเรกทอรีบ้านตั้งค่าไว้ถูกต้อง