
หากคุณทำงานกับ 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การโหลดไฟล์ เช่น.profileo.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 และไม่ควรพึ่งพาแต่โชคดีเพียงอย่างเดียว
