วิธีควบคุมการเข้าถึง sudo บน Linux

เผยแพร่แล้ว: 2022-01-29
หน้าต่างเทอร์มินัล Linux บนเดสก์ท็อปสไตล์ Ubuntu
Fatmawati Achmad Zaenuri/Shutterstock

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

sudo และสิทธิ์รูท

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

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

ทุกคนที่ไม่ใช่ superuser ที่รู้จักกันในชื่อ root บัญชี root ทเป็นบัญชีที่มีสิทธิพิเศษ ไม่ถูกผูกมัดด้วยการอนุญาตบนวัตถุใด ๆ ในระบบปฏิบัติการ ผู้ใช้รูทสามารถทำอะไรก็ได้และแทบทุกเมื่อ

โฆษณา

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

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

ที่เกี่ยวข้อง: "ทุกอย่างเป็นไฟล์" หมายถึงอะไรใน Linux?

รายการ sudoers

sudo ได้รับการติดตั้งแล้วในคอมพิวเตอร์ Ubuntu 18.04.3, Manjaro 18.1.0 และ Fedora 31 ที่ใช้ในการค้นคว้าบทความนี้ นี้ไม่แปลกใจ sudo มีมาตั้งแต่ต้นทศวรรษ 1980 และได้กลายเป็นวิธีการมาตรฐานของการดำเนินการ superuser สำหรับการแจกแจงเกือบทั้งหมด

เมื่อคุณติดตั้ง distro ที่ทันสมัย ​​ผู้ใช้ที่คุณสร้างระหว่างการติดตั้งจะถูกเพิ่มไปยังรายชื่อผู้ใช้ที่เรียกว่า sudoers นี่คือผู้ใช้ที่สามารถใช้คำสั่ง sudo ได้ เนื่องจากคุณมีพลัง sudo คุณสามารถใช้มันเพื่อเพิ่มผู้ใช้รายอื่นในรายการ sudoers ได้

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

เรียกใช้คำสั่งในฐานะผู้ใช้รายอื่น

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

ในการใช้ sudo เพื่อรันคำสั่งในฐานะผู้ใช้รายอื่น เราจำเป็นต้องใช้ตัวเลือก -u (ผู้ใช้) ที่นี่ เราจะเรียกใช้คำสั่ง whoami ในฐานะผู้ใช้ mary หากคุณใช้คำสั่ง sudo โดยไม่มีตัวเลือก -u คุณจะเรียกใช้คำสั่งในฐานะ root

โฆษณา

และแน่นอน เนื่องจากคุณกำลังใช้ sudo คุณจะได้รับแจ้งให้ป้อนรหัสผ่าน

 sudo -u แมรี่ whoami 

การตอบสนองจาก whoami บอกเราว่าบัญชีผู้ใช้ที่เรียกใช้คำสั่งคือ mary

คุณสามารถใช้คำสั่ง sudo เพื่อเข้าสู่ระบบในฐานะผู้ใช้รายอื่นโดยไม่ต้องรู้รหัสผ่าน คุณจะได้รับแจ้งให้ป้อนรหัสผ่านของคุณเอง เราจำเป็นต้องใช้ตัวเลือก -i (เข้าสู่ระบบ)

 sudo -i -u mary
 pwd
 ฉันเป็นใคร
 ls -hl
 ทางออก 

คุณเข้าสู่ระบบในฐานะ mary ไฟล์ ".bashrc", ".bash_aliases" และ ".profile" สำหรับบัญชีผู้ใช้ mary จะได้รับการประมวลผลเหมือนกับว่าเจ้าของบัญชีผู้ใช้ mary ได้เข้าสู่ระบบด้วยตนเอง

  • พรอมต์คำสั่งเปลี่ยนแปลงเพื่อแสดงว่าเป็นเซสชันสำหรับบัญชีผู้ใช้ mary
  • คำสั่ง pwd จำลองว่าคุณอยู่ในโฮมไดเร็กทอรี mary's
  • whoami บอกเราว่าคุณกำลังใช้บัญชีผู้ใช้ mary
  • ไฟล์ในไดเร็กทอรีเป็นของบัญชีผู้ใช้ mary
  • คำสั่ง exit จะนำคุณกลับสู่เซสชันบัญชีผู้ใช้ปกติของคุณ

การแก้ไขไฟล์ sudoers

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

โฆษณา

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

แม้ว่าคุณจะเริ่มกระบวนการแก้ไขโดยใช้คำสั่ง visudo แต่ visudo ไม่ใช่ตัวแก้ไข มันเรียกหนึ่งในผู้แก้ไขที่มีอยู่ของคุณเพื่อดำเนินการแก้ไขไฟล์ บน Manjaro และ Ubuntu คำสั่ง visudo เปิดตัวตัวแก้ไขอย่างง่าย nano . บน Fedora visudo ได้เปิดตัว vim ที่มีความสามารถมากกว่า—แต่ใช้งานง่ายน้อยกว่า—

ที่เกี่ยวข้อง: วิธีออกจาก Vi หรือ Vim Editor

หากคุณต้องการใช้ nano บน Fedora คุณสามารถทำได้ง่ายๆ ขั้นแรก ติดตั้ง nano :

sudo dnf ติดตั้ง nano

แล้วต้องเรียกใช้ visudo ด้วยคำสั่งนี้:

 sudo EDITOR=นาโน visudo 

ดูเหมือนผู้สมัครที่ดีสำหรับนามแฝง โปรแกรมแก้ไข nano เปิดขึ้นพร้อมกับไฟล์ sudoers ที่โหลดอยู่

ตัวแก้ไขนาโนพร้อมไฟล์ sudoers ที่โหลดอยู่ในนั้น

การเพิ่มผู้ใช้ไปยัง sudo Group

ใช้ visudo เพื่อเปิดไฟล์ sudoers ใช้คำสั่งนี้หรือคำสั่งที่อธิบายข้างต้นเพื่อระบุตัวแก้ไขที่คุณเลือก:

 sudo visudo 

เลื่อนดูไฟล์ sudoers จนกว่าคุณจะเห็นคำจำกัดความของรายการ %sudo

ไฟล์ sudoers โดยเน้นที่บรรทัด %sudo

โฆษณา

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

บรรทัด %sudo แบ่งออกดังนี้:

  • %sudo : ชื่อกลุ่ม
  • ALL= : กฎนี้ใช้กับโฮสต์ทั้งหมดในเครือข่ายนี้
  • (ALL:ALL) : สมาชิกของกลุ่มนี้สามารถเรียกใช้คำสั่งในฐานะผู้ใช้ทั้งหมดและทุกกลุ่ม
  • ทั้งหมด : สมาชิกของกลุ่มนี้สามารถเรียกใช้คำสั่งทั้งหมดได้

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

เรามีผู้ใช้สองคนคือ Tom และ Mary โดยมีบัญชีผู้ใช้ tom และ mary ตามลำดับ เราจะเพิ่มบัญชีผู้ใช้ tom ในกลุ่ม sudo ด้วยคำสั่ง usermod ตัวเลือก -G (กลุ่ม) ระบุกลุ่มที่เราจะเพิ่มบัญชี tom ตัวเลือก -a (ต่อท้าย) เพิ่ม กลุ่มนี้ลงในรายการกลุ่มที่บัญชีผู้ใช้ tom มีอยู่แล้ว หากไม่มีตัวเลือกนี้ บัญชีผู้ใช้ tom จะถูกวางไว้ในกลุ่มใหม่แต่ถูกลบออกจากกลุ่มอื่น

 sudo usermod -a -G sudo tom 

มาดูกันว่าแมรี่อยู่ในกลุ่มใด:

 กลุ่ม 

บัญชีผู้ใช้ mary รี่อยู่ในกลุ่ม mary รี่เท่านั้น

ตรวจสอบกับทอม:

 กลุ่ม 

บัญชีผู้ใช้ tom และด้วยเหตุนี้ Tom จึงอยู่ในกลุ่ม tom และ sudo

ลองให้แมรี่ทำสิ่งที่ต้องใช้สิทธิ์ sudo

 sudo น้อย /etc/shadow 

โฆษณา

แมรี่ไม่สามารถมองเข้าไปในไฟล์ที่ถูกจำกัด “/etc/shadow” เธอได้รับการบอกเลิกเล็กน้อยสำหรับการพยายามใช้ sudo โดยไม่ได้รับอนุญาต มาดูกันว่าทอมคิดอย่างไร:

 sudo น้อย /etc/shadow 

ทันทีที่ทอมป้อนรหัสผ่าน เขาจะแสดงไฟล์ /etc/shadow

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

ให้สิทธิ์ sudo ที่ จำกัด แก่ผู้ใช้

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

มาพบกับแฮร์รี่ เจ้าของบัญชีผู้ใช้ harry กันเถอะ เขาไม่ได้อยู่ในกลุ่ม sudo และเขาไม่มีสิทธิ์ของ sudo

 กลุ่ม 

มีประโยชน์สำหรับ Harry ในการติดตั้งซอฟต์แวร์ แต่เราไม่ต้องการให้เขามีสิทธิ์ sudo เต็มรูปแบบ ได้ไม่มีปัญหา. มาจุดไฟกันเถอะ visudo :

 sudo visudo 

โฆษณา

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

รายการไฟล์ sudoer สำหรับ harry

รายการสำหรับบัญชีผู้ใช้แฮร์รี่คือ:

 แฮร์รี่ ALL=/usr/bin/apt-get

โปรดทราบว่ามีแท็บระหว่าง "แฮร์รี่" และ "ALL="

อ่านว่า harry บัญชีผู้ใช้สามารถใช้คำสั่งที่ระบุไว้ในโฮสต์ทั้งหมดที่เชื่อมต่อกับเครือข่ายนี้ มีคำสั่งหนึ่งรายการซึ่งก็คือ “/usr/bin/apt-get” เราสามารถให้สิทธิ์ Harry เข้าถึงคำสั่งได้มากกว่าหนึ่งคำสั่งโดยเพิ่มลงในรายการคำสั่ง โดยคั่นด้วยเครื่องหมายจุลภาค

เพิ่มบรรทัดในไฟล์ sudoers และบันทึกไฟล์ หากคุณต้องการตรวจสอบอีกครั้งว่าบรรทัดนั้นถูกต้องตามหลักไวยากรณ์ เราสามารถขอให้ visudo สแกนไฟล์และตรวจสอบไวยากรณ์ให้เราได้โดยใช้ตัวเลือก -c (ตรวจสอบเท่านั้น):

 sudo visudo -c 

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

 sudo apt-get ติดตั้งนิ้ว 

แฮร์รี่ได้รับสิทธิ์ sudo ที่เหมาะสม และเขาสามารถติดตั้งซอฟต์แวร์ได้

โฆษณา

จะเกิดอะไรขึ้นถ้า Harry พยายามใช้คำสั่งอื่นที่ต้องใช้ sudo ?

 sudo ปิดตอนนี้ 

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

การใช้นามแฝงผู้ใช้ sudoers

หากเราต้องการให้สิทธิ์แก่ Mary แบบเดียวกัน เราอาจเพิ่มบรรทัดในไฟล์ sudoers สำหรับบัญชีผู้ใช้ mary ในลักษณะเดียวกับที่เราทำกับ Harry อีกวิธีหนึ่งที่เรียบร้อยกว่าในการบรรลุสิ่งเดียวกันคือการใช้ User_Alias

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

มาสร้าง User_Alias และใช้ในไฟล์ sudoers ของเรา

 sudo visudo 

 เลื่อนลงมาในไฟล์จนกว่าคุณจะมาที่บรรทัดข้อกำหนด User_Alias

เพิ่ม User_Alias โดยพิมพ์:

 User_Alias ​​INSTALLERS = แฮร์รี่ แมรี่

แต่ละองค์ประกอบถูกคั่นด้วยช่องว่าง ไม่ใช่แท็บ ตรรกะแบ่งออกเป็น:

  • User_Alias : สิ่งนี้บอก visudo ว่านี่จะเป็น User_Alias
  • ผู้ ติดตั้ง : นี่คือชื่อตามอำเภอใจสำหรับนามแฝงนี้
  • = harry, mary : รายชื่อผู้ใช้ที่จะรวมไว้ในนามแฝงนี้
โฆษณา

ตอนนี้เราจะแก้ไขบรรทัดที่เราเพิ่มไว้ก่อนหน้านี้สำหรับบัญชีผู้ใช้ harry :

 แฮร์รี่ ALL=/usr/bin/apt-get

เปลี่ยนให้เขียนว่า

 ผู้ติดตั้งทั้งหมด=/usr/bin/apt-get

สิ่งนี้บอกว่าบัญชีผู้ใช้ทั้งหมดที่มีอยู่ในคำจำกัดความของ "INSTALLERS" User_Alias สามารถเรียกใช้คำสั่ง apt-get เราสามารถทดสอบสิ่งนี้กับ Mary ซึ่งตอนนี้น่าจะสามารถติดตั้งซอฟต์แวร์ได้แล้ว

 sudo apt-get ติดตั้ง colordiff 

แมรี่สามารถติดตั้งซอฟต์แวร์ได้เพราะเธออยู่ใน “INSTALLERS” User_Alias และ User_Alias นั้นได้รับสิทธิ์เหล่านั้น

สามเคล็ดลับ sudo ด่วน

เมื่อคุณลืมเพิ่ม sudo ในคำสั่ง ให้พิมพ์

 ซูโดะ !!

และคำสั่งสุดท้ายจะถูกทำซ้ำโดยเพิ่ม sudo ที่จุดเริ่มต้นของบรรทัด

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

 sudo -k
โฆษณา

เคยสงสัยหรือไม่ว่าคุณสามารถดูความพยายามของคำสั่ง sudo ที่ล้มเหลวได้ที่ไหน? พวกเขาไปที่ไฟล์ “/var/log/auth.log” คุณสามารถดูได้ด้วย:

 น้อย /var/log/auth.log 

เราสามารถเห็นรายการสำหรับบัญชีผู้ใช้แมรี่ที่เข้าสู่ระบบที่ TTY pts/1 เมื่อเธอพยายามเรียกใช้คำสั่ง shutdown ในฐานะผู้ใช้ "รูท"

ด้วยพลังอันยิ่งใหญ่…

…มีความสามารถในการมอบหมายส่วนต่างๆ ให้กับผู้อื่น ตอนนี้คุณรู้วิธีเพิ่มพลังให้ผู้ใช้รายอื่นในการคัดเลือกแล้ว