ด้วยsu
คุณจะกลายเป็นผู้ใช้คนอื่น - โดยค่าเริ่มต้น แต่อาจเป็นผู้ใช้รายอื่น หากคุณพูดว่าsu -
สภาพแวดล้อมของคุณจะถูกแทนที่ด้วยสภาพแวดล้อมการเข้าสู่ระบบของผู้ใช้เช่นกันดังนั้นสิ่งที่คุณเห็นจะไม่สามารถแยกออกจากการเข้าสู่ระบบในฐานะผู้ใช้รายนั้นได้ ไม่มีวิธีที่ระบบสามารถบอกได้ว่าคุณทำอะไรในขณะที่su
ให้ผู้ใช้รายอื่นกระทำโดยผู้ใช้นั้นเมื่อพวกเขาเข้าสู่ระบบ
สิ่งต่าง ๆ กับsudo
:
คำสั่งที่คุณเรียกใช้ผ่านsudo
การดำเนินการในฐานะผู้ใช้เป้าหมาย - รูตตามค่าเริ่มต้น แต่สามารถเปลี่ยนแปลงได้ด้วย-u
- แต่จะบันทึกคำสั่งที่คุณเรียกใช้ผ่านแท็กด้วยชื่อผู้ใช้ของคุณเพื่อให้สามารถกำหนดความผิดได้ภายหลัง :)
sudo
มีความยืดหยุ่นมาก คุณสามารถ จำกัด คำสั่งที่อนุญาตให้ผู้ใช้หรือกลุ่มผู้ใช้เรียกใช้ตัวอย่างเช่น ด้วยsu
มันคือทั้งหมดหรือไม่มีอะไร
โดยทั่วไปคุณสมบัตินี้ใช้เพื่อกำหนดบทบาท ตัวอย่างเช่นคุณสามารถกำหนดกลุ่ม "backups" ที่อนุญาตให้เรียกใช้dump
และtar
แต่ละกลุ่มต้องการการเข้าถึงรูทเพื่อสำรองดิสก์ระบบอย่างถูกต้อง
ฉันพูดถึงเรื่องนี้ที่นี่เพราะมันหมายความว่าคุณสามารถให้sudo
สิทธิพิเศษแก่ใครบางคนโดยไม่ต้องให้sudo -s
หรือsudo bash
ความสามารถ พวกเขามีเพียงสิทธิ์ที่จำเป็นในการทำงานของพวกเขาในขณะที่su
พวกเขาได้ทำงานของระบบทั้งหมด คุณจะต้องระมัดระวังเกี่ยวกับเรื่องนี้ว่า: ถ้าคุณให้คนที่ความสามารถในการพูดsudo vi
เช่นที่พวกเขาสามารถเปลือกออกของและมีประสิทธิภาพการใช้พลังงานเช่นเดียวกับกับvi
sudo -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 foo
sudo -s
คุณอาจพูดว่า "หากพวกเขาสามารถปรับเปลี่ยนPAGER
พวกเขาสามารถแก้ไขPATH
ได้และจากนั้นพวกเขาสามารถทดแทนsudo
โปรแกรมที่ชั่วร้ายได้" แต่บางคนหวาดระแวงอย่างเพียงพอสามารถพูด/usr/bin/sudo /bin/bash
เพื่อหลีกเลี่ยงกับดักนั้นได้ คุณอาจไม่หวาดระแวงจนคุณหลีกเลี่ยงกับดักในตัวแปรสภาพแวดล้อมที่อ่อนไหวอื่น ๆด้วย คุณจำEDITOR
ตัวอย่างเช่นก่อนตรวจสอบคำสั่งVCSหรือไม่? sudo -i
ดังนั้น
เพราะsudo -i
ยังมีการเปลี่ยนแปลงไดเรกทอรีที่ทำงานของคุณไปยังบ้านของผู้ใช้ของคุณคุณอาจยังคงต้องการที่จะใช้sudo -s
สำหรับสถานการณ์เหล่านั้นที่คุณรู้ว่าคุณต้องการที่จะอยู่ในไดเรกทอรีเดียวกันที่คุณ'วันที่ผ่านเข้ามาในเมื่อคุณวิ่งcd
sudo
แต่ก็ยังปลอดภัยsudo -i
และcd
กลับไปที่ที่คุณอยู่
sudo su -
วิธีนี้คุณไม่จำเป็นต้องใช้รหัสผ่านรูทและ-
ทำให้แน่ใจว่าไดเรกทอรีบ้านตั้งค่าไว้ถูกต้อง