วิธีควบคุมการเข้าถึง sudo บน Linux
เผยแพร่แล้ว: 2022-01-29 คำสั่ง 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 ที่โหลดอยู่
การเพิ่มผู้ใช้ไปยัง sudo Group
ใช้ visudo
เพื่อเปิดไฟล์ sudoers ใช้คำสั่งนี้หรือคำสั่งที่อธิบายข้างต้นเพื่อระบุตัวแก้ไขที่คุณเลือก:
sudo visudo
เลื่อนดูไฟล์ 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
เลื่อนลงไปตามไฟล์จนกว่าคุณจะผ่านคำจำกัดความของกลุ่ม เราจะเพิ่มบรรทัดให้แฮร์รี่ เนื่องจากนี่เป็นข้อกำหนดของ ผู้ใช้ และไม่ใช่คำจำกัดความของกลุ่ม เราจึงไม่จำเป็นต้องเริ่มบรรทัดด้วยเครื่องหมายเปอร์เซ็นต์
รายการสำหรับบัญชีผู้ใช้แฮร์รี่คือ:
แฮร์รี่ 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
ในฐานะผู้ใช้ "รูท"
ด้วยพลังอันยิ่งใหญ่…
…มีความสามารถในการมอบหมายส่วนต่างๆ ให้กับผู้อื่น ตอนนี้คุณรู้วิธีเพิ่มพลังให้ผู้ใช้รายอื่นในการคัดเลือกแล้ว