ความแตกต่างระหว่างคำสั่ง“ su -s” และ“ sudo -s” คืออะไร?


23

อะไรคือความแตกต่างระหว่างสองคำสั่งผู้ใช้ขั้นสูงsu -sและsudo -s?

พวกเขาทั้งสองให้เชลล์กับการเข้าถึงบัญชี superuser

คำตอบ:


30

ในทางปฏิบัติพวกเขาทั้งสองจะทำให้คุณเป็น superuser อย่างไรก็ตามพวกเขาทำสิ่งที่แตกต่างกันเล็กน้อยในรูปแบบที่แตกต่างกันเล็กน้อย

ก่อนอื่นให้su -คุณเปลี่ยนไปใช้เชลล์ล็อกอินในขณะที่sudo -sไม่มี ในทางปฏิบัตินี้มักจะหมายความว่าตัวแปรสภาพแวดล้อมของคุณจะไม่สลับไปroot's sudo -sสำหรับ โปรดทราบว่าคุณสามารถเรียกใช้เพียงsuเพื่อไม่ได้เชลล์การเข้าสู่ระบบหรือsudo -iเพื่อรับเชลล์การเข้าสู่ระบบ [ไม่ใช่ในทุกรุ่น]

ประการที่สองsuและsu -เปลี่ยนเป็นผู้ใช้ใหม่โดยขอให้คุณตรวจสอบสิทธิ์ในฐานะผู้ใช้ใหม่ sudo -sและsudo -i(และปกติsudo foo) ให้คุณเรียกใช้คำสั่งที่คุณได้รับอนุญาตล่วงหน้า [ดู/etc/sudoers] อาจเป็นไปได้โดยขอให้คุณยืนยันID ปัจจุบันของคุณ

หากคุณต้องการที่จะน่ารักจริงๆคุณสามารถเรียกใช้sudo su -ซึ่งจะขอให้เข้าสู่ระบบในฐานะ root ( su -) ดำเนินการโดยผู้ใช้รูท ( sudoส่วน)

หากผู้ใช้รูทถูกล็อค (เช่นบน Ubuntu) คุณจะไม่สามารถเข้าสู่ระบบโดยใช้รูทsuได้ ในกรณีนี้คุณจะต้องใช้sudo -sหรือsudo -i


5
นอกจากนี้ยังมีมูลค่าที่จะกล่าวว่าในการแจกแจงจำนวนมากsudoไม่ได้ให้สิทธิ์พิเศษสำหรับผู้ใช้ปกติ ในระบบเหล่านั้นsuเป็นเพียงตัวเลือกเดียว
Telemachus

12
su -s

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

sudo -s

เพียงแค่เรียกใช้เชลล์โดยใช้ sudo ซึ่งจะให้รูทเชลล์แก่คุณ คุณสามารถส่งเชลล์ไปยังมันได้เช่นกัน

su -s เก่ากว่าเก่ากว่ามากแล้วคำสั่ง sudo -s ฉันเดาว่าผู้พัฒนาพยายามทำให้ง่ายที่สุดเท่าที่จะทำได้เพื่อสลับไปใช้ sudo


9

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

sudo เป็นคำสั่งในการดำเนินการคำสั่งอื่น (เป็นทางเลือกเชลล์) ในฐานะผู้ใช้ที่แตกต่างกัน คุณต้องตรวจสอบเป็นผู้ใช้ของคุณเอง สิทธิ์ในการใช้งาน sudo (และสิ่งที่คุณสามารถทำได้) ถูกระบุโดยผู้ดูแลระบบในไฟล์ sudoers

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

sudo ละเอียดยิ่งขึ้น คุณสามารถให้สิทธิพิเศษแก่ผู้ใช้หรือกลุ่ม คุณสามารถอนุญาตให้ผู้ใช้หรือกลุ่ม sudo ภายในกรอบเวลาที่กำหนด (เช่นวันจันทร์ถึงวันศุกร์ 9.00 น. ถึง 17.00 น.) คุณสามารถระบุรายการคำสั่งเฉพาะที่อนุญาตให้เรียกใช้ (เช่นเฉพาะ / usr / local / bin / run_backup) หรือคุณสามารถระบุผู้ใช้เฉพาะที่พวกเขาได้รับอนุญาตให้เรียกใช้คำสั่งเป็น (เช่น www, backup, staff ฯลฯ )

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

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


คำอธิบายที่ดีเกี่ยวกับความแตกต่างระหว่างสองคำสั่ง su และ sudo
John aka hot2use

5
  • suจะถามรหัสผ่านผู้ใช้รูทของคุณ
  • sudoจะถามรหัสผ่านของคุณ (และคุณต้องทำการล้างข้อมูลเพื่อให้ sudo เข้าถึงได้)

2
โดยทั่วไปนี่เป็นพฤติกรรมเริ่มต้นสำหรับ sudo แต่ยังสามารถกำหนดค่าให้คุณถามถึงรูทหรือรหัสผ่านอื่น ๆ ได้
theotherreceive

2

จากWikipedia :

su (ย่อมาจากผู้ใช้สำรองหรือผู้ใช้สวิตช์) เป็นคำสั่ง Unix ที่ใช้เพื่อรันเชลล์ของผู้ใช้รายอื่นโดยไม่ต้องออกจากระบบ

คำสั่งที่เกี่ยวข้องที่เรียกว่าsudo เรียกใช้คำสั่งในฐานะผู้ใช้รายอื่น แต่สังเกตชุดของข้อ จำกัด เกี่ยวกับผู้ใช้ที่สามารถดำเนินการคำสั่งที่ผู้ใช้รายอื่น (โดยทั่วไปในไฟล์กำหนดค่าชื่อ / etc / sudoers ซึ่งแตกต่างจาก su, sudo รับรองความถูกต้องผู้ใช้กับรหัสผ่านของตัวเองมากกว่าของผู้ใช้เป้าหมาย (เพื่อให้การมอบหมายคำสั่งเฉพาะให้กับผู้ใช้เฉพาะในโฮสต์ที่เฉพาะเจาะจงโดยไม่ต้องใช้รหัสผ่านร่วมกันในหมู่พวกเขา


2

สิ่งหนึ่งที่ไม่ได้รับการกล่าวถึงอย่างสมบูรณ์คือสิ่งนี้สิ่งที่คุณสามารถใช้ได้บ่อยขึ้นอยู่กับการกระจายที่คุณใช้และผู้ที่ทำงาน อย่างใดอย่างหนึ่ง ( suหรือsudo) อาจไม่ได้ตั้งค่าสำหรับการใช้งานเต็มรูปแบบโดยค่าเริ่มต้น ตัวอย่างเช่นตามที่บางคนกล่าวถึง OS X และ Ubuntu จะปิดใช้งานบัญชีรูท ( su) ตามค่าเริ่มต้น อย่างเท่าเทียมกัน Debian ไม่ให้ผู้ใช้ปกติสิทธิพิเศษใด ๆ sudoที่จะเริ่มต้น (ในทุกระบบคุณสามารถเปลี่ยนค่าเริ่มต้นเหล่านี้ได้ แต่ถ้าคุณมีสิทธิ์ระดับผู้ดูแลระบบบางอย่างเพื่อเริ่มต้นฉันคิดว่าเรากำลังพูดถึงสถานการณ์ที่ไม่ใช่เซิร์ฟเวอร์และคุณดูแลเครื่องเนื่องจากเราใช้ SU แทน มากกว่า SF แต่ในกรณีนี้)

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


1

ในระบบที่บัญชี superuser ถูกปิดใช้งานเช่น Mac OS X suจะไม่ทำงาน sudo -sจะ.

นอกจากนี้ยังปรากฏว่าไม่มีsu -sอยู่อย่างน้อยในเครื่องของฉัน


การย้อนกลับมักเป็นจริง นั่นคือในการกระจายเหมือนยูนิกซ์ที่เก่ากว่าผู้ใช้ทั่วไปไม่มีสิทธิ์เริ่มต้นภายใต้sudo(ซึ่งไม่ได้ติดตั้งไว้เสมอ)
Telemachus

1

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


1

โดยทั่วไปแล้ว su จะสร้างเชลล์ล็อกอินใหม่พร้อมสิทธิ์ผู้ใช้อื่น (ล็อกอิน) sudo จะอนุญาตให้คุณดำเนินการคำสั่งชั่วคราวโดยใช้ผู้ใช้ที่คุณระบุ ในบาง UNIX เช่น FreeBDS ไม่มีตัวเลือก '-s'

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