วิธีใช้งาน sudo ใน Linux และทำความเข้าใจไฟล์ sudoers อย่างถ่องแท้

  • คำสั่ง sudo ช่วยให้คุณสามารถเรียกใช้คำสั่งในฐานะผู้ใช้อื่น (โดยปกติคือ root) ในลักษณะที่ควบคุมได้และชั่วคราว
  • การตั้งค่าสิทธิ์การเข้าถึงจะถูกกำหนดไว้ในไฟล์ /etc/sudoers และไฟล์ /etc/sudoers.d โดยใช้ visudo
  • กลุ่มคำสั่งอย่าง sudo หรือ wheel และนามแฝงใน sudoers ช่วยให้การให้สิทธิ์เฉพาะเจาะจงแก่ผู้ใช้เฉพาะกลุ่มทำได้ง่ายขึ้น
  • ตัวเลือกต่างๆ เช่น NOPASSWD ช่วยให้คุณปรับระดับความปลอดภัยและความสะดวกสบายเมื่อใช้ sudo ในสถานการณ์ต่างๆ ได้

การใช้ sudo ใน Linux

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

ในบทความนี้ เราจะลงรายละเอียดกัน มันเกี่ยวกับอะไรกันแน่? sudoมันมีความสัมพันธ์กับผู้ใช้อย่างไร? root และด้วยไฟล์ /etc/sudoersการใช้งานแตกต่างกันอย่างไรบ้าง su y sudoและวิธีการปรับแต่งการตั้งค่าเพื่อให้สิทธิ์เฉพาะเจาะจง (แม้จะไม่ต้องใช้รหัสผ่าน) แก่ผู้ใช้หรือกลุ่มบางกลุ่ม แนวคิดก็คือ เมื่อคุณอ่านจบ คุณจะเข้าใจอย่างชัดเจนว่าควรใช้งานเมื่อใด sudoมันทำงานอย่างไรในเบื้องหลัง และจะควบคุมมันได้อย่างไรโดยปราศจากความกลัว

sudo คืออะไร และทำไมจึงมีความสำคัญมากใน Linux?

คำสั่ง sudo มันเป็นหนึ่งในชิ้นส่วนสำคัญ คำสั่ง `superuser do` เป็นคำสั่งที่มีอยู่ในระบบ Linux สมัยใหม่ทุกระบบ โดยปกติแล้วชื่อของคำสั่งนี้จะอธิบายว่า "superuser do" หรือ "substitute user and do" และหน้าที่ของมันนั้นเรียบง่ายแต่ทรงพลัง คือ อนุญาตให้ผู้ใช้ที่ได้รับอนุญาตสามารถเรียกใช้คำสั่งได้ราวกับว่าพวกเขาเป็นผู้ใช้คนอื่นในระบบตามปกติ rootเฉพาะช่วงเวลาจำกัดเท่านั้น

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

การแจกจ่ายส่วนใหญ่ในปัจจุบัน (Debian, Ubuntu, ระบบปฏิบัติการที่พัฒนาต่อยอดจาก Debian หลายระบบ, ระบบประเภท SLE ฯลฯ) นำมาซึ่ง sudo โปรแกรมนี้ถูกติดตั้งไว้ล่วงหน้าแล้ว และไม่แนะนำให้ถอนการติดตั้งหรือแก้ไขโดยพลการ นอกจากนี้ ในหลายระบบ ผู้ใช้ที่สร้างขึ้นระหว่างการติดตั้งจะถูกเพิ่มเข้าไปในกลุ่มผู้ดูแลระบบที่มีสิทธิ์ในการใช้งานโดยอัตโนมัติ sudoโดยกลายเป็นผู้ใช้ที่มีสิทธิ์พิเศษโดยค่าเริ่มต้น

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

กลไกการทำงานภายในของ sudo

การทำงานพื้นฐานของ sudo จากมุมมองของผู้ใช้ มันง่ายมาก: คุณแค่ใส่คำลงไป sudo ก่อนคำสั่งที่เราต้องการเรียกใช้ด้วยสิทธิ์พิเศษ ตัวอย่างเช่น การอัปเดตรายการแพ็กเกจด้วย apt-get ในระบบปฏิบัติการ Debian หรือ Ubuntu ผู้ใช้ทั่วไปจะต้องทำตามขั้นตอนดังนี้:

> sudo apt-get update

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

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

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

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

ไวยากรณ์พื้นฐานและตัวเลือกที่มีประโยชน์ที่สุดของคำสั่ง sudo

ไวยากรณ์ทั่วไปของ sudo มันง่ายมาก:

> คำสั่ง sudo

วิธีใช้งานที่พบได้บ่อยที่สุดก็คือการใช้งานแบบง่ายๆ ในขณะที่ sudo comandoอย่างไรก็ตาม มันมีตัวเลือกที่น่าสนใจอยู่มากมาย ตัวเลือกที่ใช้บ่อยที่สุด (และถูกเน้นในคู่มือทางการหลายฉบับ) มีดังต่อไปนี้:

  • -hแสดงข้อความช่วยเหลือพร้อมไวยากรณ์และตัวเลือกทั้งหมดที่มีในโปรแกรม sudo.
  • -V: แสดงเวอร์ชันปัจจุบันของ sudo และรายละเอียดการรวบรวมบางส่วน
  • -v: ต่ออายุ "ระยะเวลาผ่อนผัน" ในการตรวจสอบสิทธิ์ กล่าวคือ รีเฟรชตัวนับเพื่อให้สิทธิ์ของคุณไม่หมดอายุและคุณไม่ต้องป้อนรหัสผ่านอีกครั้งในเร็วๆ นี้
  • -k: ยกเลิกข้อมูลประจำตัวที่บันทึกไว้ทันที เหมือนกับการบอกว่า sudo ซึ่งจะ "ลืม" ว่าคุณได้ยืนยันตัวตนไปแล้ว ทำให้คุณต้องป้อนรหัสผ่านอีกครั้งในครั้งต่อไป
  • -l: แสดงคำสั่งที่คุณได้รับอนุญาตให้เรียกใช้ sudo ตามการกำหนดค่าปัจจุบันของ sudoers.

นอกจากนี้ยังมีตัวเลือกที่มีประโยชน์มากสำหรับการเรียกใช้คำสั่งเหมือนกับผู้ใช้รายอื่น ๆ อีกด้วย แตกต่างจาก root. ตัวอย่างเช่นด้วย -u คุณสามารถระบุผู้ใช้เป้าหมายสำหรับคำสั่งเฉพาะได้:

> sudo -u pedro whoami

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

sudo เทียบกับ su และผู้ใช้ root

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

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

คำสั่ง su (ผู้ใช้ทดแทน) ฟังก์ชันนี้ช่วยให้คุณสลับไปใช้ผู้ใช้รายอื่นภายในเทอร์มินัลเดียวกันได้ เซสชันเดิมจะยังคงอยู่ในพื้นหลังและ "ห่อหุ้ม" เซสชันใหม่ไว้ หากคุณเรียกใช้คำสั่งนี้ su pedroระบบจะขอให้คุณป้อนรหัสผ่าน pedro และเมื่อเข้าไปข้างในแล้ว หากคุณพิมพ์ exit คุณจะกลับไปใช้บัญชีผู้ใช้คนก่อนหน้า หากคุณไม่ได้ระบุชื่อผู้ใช้ su โดยค่าเริ่มต้น ระบบจะพยายามสลับไปใช้ root.

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

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

สำหรับการใช้งานแบบโต้ตอบ “ในฐานะผู้ใช้รายอื่น” โดยใช้คำสั่ง sudoนอกจากนี้ยังมีรูปแบบที่นำไปใช้ได้จริงอีกหลายประการ:

  • sudo -s: เปิดเชลล์ในฐานะผู้ใช้เป้าหมาย โดยรับช่วงสภาพแวดล้อมของผู้ใช้ปัจจุบัน
  • sudo -i: เริ่มใช้งานเชลล์ล็อกอินแบบเต็มรูปแบบสำหรับผู้ใช้เป้าหมาย โดยที่สภาพแวดล้อมและไดเร็กทอรีของผู้ใช้จะถูกล้างข้อมูล $HOMEการโหลดไฟล์ เช่น .profile o .bash_profile.

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

ไฟล์ /etc/sudoers และไดเร็กทอรี /etc/sudoers.d

หัวใจสำคัญของการตั้งค่า sudo มันอยู่ในคลังเก็บข้อมูล /etc/sudoersตรงนั้นแหละที่จะกำหนดว่าใครสามารถใช้งานได้ sudoจากที่ใด เช่น ผู้ใช้คนใด และคำสั่งเฉพาะใดที่สามารถเรียกใช้งานได้ นอกจากนี้ ระบบปฏิบัติการหลายตัวยังมีคำสั่งที่โหลดไฟล์การกำหนดค่าเพิ่มเติมทั้งหมดที่อยู่ในนั้นโดยอัตโนมัติ /etc/sudoers.d/.

เป็นสิ่งสำคัญที่จะต้องเข้าใจว่า /etc/sudoers คุณไม่ควรแก้ไข "โดยปราศจากการแก้ไขที่เหมาะสม" สามารถใช้กับโปรแกรมแก้ไขข้อความใดก็ได้ แต่ต้องแก้ไขโดยใช้คำสั่งเสมอ visudoซึ่งจะเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ (โดยค่าเริ่มต้น) vi o nano(ขึ้นอยู่กับการตั้งค่า) แต่จะเพิ่มระดับความปลอดภัยอีกชั้นหนึ่ง โดยจะตรวจสอบไวยากรณ์ก่อนบันทึกและป้องกันไม่ให้คนสองคนแก้ไขพร้อมกันได้

การใช้งานทั่วไปสำหรับการแก้ไข sudoers มันเป็น:

> sudo visudo -f /etc/sudoers

คุณสามารถสร้างไฟล์เฉพาะในได้เช่นกัน /etc/sudoers.d/ เพื่อแยกการตั้งค่าตามกลุ่มผู้ใช้ บริการ ฯลฯ ตัวอย่างเช่น คุณสามารถมีไฟล์ได้ /etc/sudoers.d/networking โดยมีกฎเฉพาะสำหรับการบริหารจัดการเครือข่าย โดยไม่นำไปรวมกับการตั้งค่าทั่วไปส่วนอื่นๆ

เมื่อเปิดไฟล์ /etc/sudoers บนระบบทั่วไปคุณจะเห็นข้อความลักษณะนี้ (ไม่รวมความคิดเห็น):

  • รากที่ ALL = (ALL:ALL) ALLผู้ใช้ root คุณสามารถเรียกใช้คำสั่งใดก็ได้บนโฮสต์ใดก็ได้ ในฐานะผู้ใช้และกลุ่มใดก็ได้
  • %admin ทั้งหมด=(ทั้งหมด) ทั้งหมด: ทุกคนในกลุ่ม admin มีสิทธิ์ใช้งานอย่างเต็มที่ sudo.
  • %sudo ทั้งหมด=(ทั้งหมด:ทั้งหมด) ทั้งหมดหลักการเดียวกันนี้ใช้ได้กับกลุ่มด้วยเช่นกัน sudoซึ่งใน Ubuntu และระบบปฏิบัติการที่พัฒนาต่อยอดจาก Ubuntu นั้น มักจะเป็นกลุ่มคีย์หลัก
  • # รวม /etc/sudoers.d: ระบุว่าไฟล์ในไดเร็กทอรีนั้นควรถูกอ่านด้วย (แม้ว่า #(นี่ไม่ใช่ความคิดเห็นในบริบทนี้โดยเฉพาะ)

นอกเหนือจากกฎของผู้ใช้และกลุ่มแล้ว, sudoers ช่วยให้สามารถกำหนดนามแฝงเพื่อลดความซับซ้อนของการตั้งค่าที่ซับซ้อนได้: นามแฝงผู้ใช้ (User_Alias) ของคำสั่ง (Cmnd_Aliasของกลุ่มการดำเนินการ (Runas_Alias) หรือของโฮสต์ (Host_Alias).

จัดการผู้ใช้และกลุ่มด้วยคำสั่ง sudoers

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

เพื่อตรวจสอบว่าผู้ใช้รายใดอยู่ในกลุ่มใด กำหนด (ตัวอย่างเช่น sudo) คุณสามารถใช้:

> grep 'sudo' /etc/group

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

> sudo adduser bill sudo

เมื่อคุณต้องการเพิกถอนสิทธิ์เหล่านั้นเพียงแค่ลบออกจากกลุ่ม:

> sudo deluser bill sudo

อีกหนึ่งความเป็นไปได้ที่ดียิ่งกว่า วิธีการนี้เกี่ยวข้องกับการให้สิทธิ์เฉพาะคำสั่งบางอย่างเท่านั้น โดยไม่ปล่อยให้ใช้งานได้อย่างอิสระ โดยปกติแล้วจะต้องสร้างไฟล์เฉพาะขึ้นมาเพื่อทำเช่นนี้ /etc/sudoers.d/ตัวอย่างเช่น คุณสามารถกำหนดไฟล์ได้ /etc/sudoers.d/networking ด้วยอะไรบางอย่างเช่น:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = CAPTURE, SERVERS
%netadmin ALL = NETALL

ด้วยการตั้งค่านี้ ผู้ใช้ทุกคนในกลุ่มจะสามารถใช้งานได้ netadmin คุณจะสามารถเรียกใช้คำสั่งที่กำหนดไว้ภายใต้นามแฝงได้ NETALL (ซึ่งเป็นการจัดกลุ่มชื่อเรียกแทน) CAPTURE y SERVERSโดยที่ไม่สามารถเข้าถึงทุกอย่างได้อย่างเต็มที่ sudoสิ่งเดียวที่จำเป็นคือการเพิ่มเติมเข้าไป bill ไปยังกลุ่ม netadmin เพื่อให้คุณสามารถใช้ tcpdump และเครื่องมือเซิร์ฟเวอร์ที่กำหนดไว้

คำสั่งทั่วไปที่ต้องใช้ sudo

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

การจัดการแพ็คเกจ: ในการแจกจ่ายตาม zypper, apt หรือโปรแกรมจัดการแพ็กเกจอื่นๆ การดำเนินการใดๆ ที่ติดตั้ง ลบ หรืออัปเดตซอฟต์แวร์ จำเป็นต้องมีสิทธิ์พิเศษ ตัวอย่างเช่น:

> sudo zypper install package
> sudo apt-get install docker-ce

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

การจัดการบริการด้วย systemd โดยปกติจะทำผ่านทาง systemctlการดำเนินการต่างๆ เช่น การเริ่มต้น การหยุด หรือการรีสตาร์ทบริการ โดยทั่วไปแล้วจำเป็นต้องใช้ sudo:

> sudo systemctl restart apache2

ในทางตรงกันข้าม คำสั่งที่ไม่เป็นอันตรายมากนัก เช่น การตรวจสอบสถานะของบริการ กลับมีอันตรายมากกว่า พวกเขาสามารถทำงานได้โดยไม่ต้องมีสิทธิ์พิเศษบนระบบหลายระบบ:

> systemctl status NetworkManager

การจัดการบัญชีผู้ใช้ก็ต้องใช้ความระมัดระวังเช่นกัน. คำสั่งเช่น usermod, useradd o deluser พวกเขาควรเลือกใช้เกือบทุกครั้ง sudoเนื่องจากเป็นการแก้ไขฐานข้อมูลผู้ใช้ของระบบ:

> sudo usermod -L -f 30 tux

สุดท้ายนี้ คือการจัดการสิทธิ์การเข้าถึงไฟล์และการเป็นเจ้าของไฟล์ กับ chown และโดยปกติแล้วบริษัทมักต้องการสิทธิ์พิเศษเมื่อมีการเปลี่ยนแปลงที่ส่งผลกระทบต่อเส้นทางระบบหรือผู้ใช้รายอื่น ตัวอย่างเช่น เพื่อให้ไฟล์และโฟลเดอร์ย่อยทั้งหมดของระบบสามารถเข้าถึงได้ /home/test/tux-files กลายเป็นทรัพย์สินของผู้ใช้ tux คุณสามารถใช้:

> sudo chown -R tux:tux /home/test/tux-files

ตัวอย่างการใช้งาน sudo ในทางปฏิบัติ

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

การอัปเดตดัชนีแพ็กเกจใน Debian/Ubuntu หากไม่มีสิทธิ์ ระบบจะแสดงข้อผิดพลาดเนื่องจากไม่สามารถแก้ไขไฟล์ได้ /var/lib/apt/listsคำสั่ง:

> apt-get update

สุดท้ายจะแสดงข้อความ "ไม่ได้รับอนุญาต"ทันทีที่คุณพูดซ้ำแบบนั้น ทุกอย่างก็จะเปลี่ยนไป:

> sudo apt-get update

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

อีกตัวอย่างหนึ่งที่พบได้บ่อยมากคือการคัดลอกไฟล์ไปยังพาธของระบบในขณะที่ /usr/local/binหากคุณลองคัดลอกสคริปต์ไปที่นั่นโดยใช้คำสั่งง่ายๆ ดังนี้:

> cp script.sh /usr/local/bin/

เป็นเรื่องปกติที่เทอร์มินัลจะแสดงข้อความแจ้งเตือน แสดงว่าคุณไม่มีสิทธิ์ในการเขียนลงในไดเร็กทอรีนั้น หากคุณทำซ้ำขั้นตอนโดยการเพิ่ม sudo:

> sudo cp script.sh /usr/local/bin/

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

คุณสามารถใช้ sudo ร่วมกับตัวเลือกได้เช่นกัน -u เพื่อเรียกใช้คำสั่งเฉพาะในฐานะผู้ใช้อื่น โดยไม่ต้องเปลี่ยนเซสชันหรือใช้ su. ตัวอย่างเช่น

> วูอามี
> sudo -u pedro whoami

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

การให้สิทธิ์โดยไม่ต้องใช้รหัสผ่านและตัวเลือกขั้นสูงอื่นๆ

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

สิ่งนี้ทำได้ด้วยฉลาก NOPASSWD ในกฎของ sudoersตัวอย่างเช่น ถ้าคุณต้องการ miusuario สามารถดำเนินการได้ /bin/cat กับ sudo โดยไม่ต้องใส่รหัสผ่าน คุณสามารถเพิ่มบรรทัดต่อไปนี้ได้:

myuser ALL = NOPASSWD: /bin/cat

ในทำนองเดียวกัน คุณสามารถอนุญาตให้ระบบจัดการการปิดอุปกรณ์ได้ โดยไม่ต้องยืนยันตัวตนซ้ำ ให้เพิ่มข้อความประมาณนี้:

myuser ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

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

User_Alias ​​​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-data, apache

ด้วยคำจำกัดความเหล่านี้ คุณก็สามารถเขียนได้ กฎระเบียบที่อ่านง่ายกว่ามาก เช่น:

ทุกกลุ่ม = พลัง

ดังนั้น ผู้ใช้ทุกคนที่อยู่ในนามแฝงนั้น GRUPO คุณจะสามารถปิดหรือรีสตาร์ทคอมพิวเตอร์ได้ด้วย sudoและคุณสามารถปรับเปลี่ยนได้ว่าต้องการให้ใส่รหัสผ่านหรือไม่ โดยใช้ NOPASSWD o PASSWDนอกจากนี้ คุณยังสามารถจำกัดการใช้งานให้เฉพาะโฮสต์ที่ระบุได้ด้วย Host_Alias เพื่อให้ใช้งานได้เฉพาะจากเครือข่ายที่กำหนดเท่านั้น

เกิน NOPASSWDมีป้ายกำกับอื่นๆ อีก ในขณะที่ NOEXEC (เพื่อป้องกันไม่ให้คำสั่งเรียกใช้โปรแกรมอื่นด้วยสิทธิ์ระดับสูง) หรือสิ่งแปลก ๆ เล็ก ๆ น้อย ๆ เช่น การเพิ่ม insults ถึงเส้น Defaults, ดังนั้น sudo ฉันจะพูดตลกเป็นภาษาอังกฤษทุกครั้งที่คุณใส่รหัสผ่านผิด

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

มีเครื่องมือเช่น sudoเข้าใจอย่างถูกต้องและกำหนดค่าอย่างถูกต้องแทบจะเป็นสิ่งที่จำเป็นอย่างยิ่งในระบบ Linux สมัยใหม่ทุกระบบที่มีผู้ใช้งานหลายคน หรือในกรณีที่คุณต้องการลดความเสี่ยง แม้ว่าคุณจะเป็นผู้ใช้งานเพียงคนเดียวก็ตาม การใช้ประโยชน์จากการผสมผสานของ sudo, /etc/sudoers, กลุ่มที่เป็น sudo o wheel และแท็กขั้นสูง เช่น NOPASSWDคุณสามารถสร้างสมดุลที่เหมาะสมระหว่างความสะดวกสบาย การควบคุมที่แม่นยำ และความปลอดภัย โดยไม่ต้องจดจ่ออยู่กับการใช้งานตลอดเวลา root และไม่ควรพึ่งพาแต่โชคดีเพียงอย่างเดียว

ผู้ใช้ root ใน Linux
บทความที่เกี่ยวข้อง:
ผู้ใช้ระดับรูทในลินุกซ์: สิทธิ์การใช้งาน ความเสี่ยง และแนวทางปฏิบัติที่ดีที่สุด