แม้ว่าคุณจะ จำกัด อาร์กิวเมนต์ commandline แต่ก็ไม่มีสิ่งใดที่ป้องกันไม่ให้ผู้ใช้ใช้ vim เพื่อเปิดแก้ไขและเขียนทับไฟล์สุ่มใด ๆเมื่อมันทำงานเหมือนรูท
ผู้ใช้สามารถเรียกใช้sudo vim /etc/httpd/conf/httpd.conf
แล้ว
- ล้างข้อความทั้งหมดจากบัฟเฟอร์การแก้ไข
- จากนั้นสำหรับแหล่งความสะดวกสบายไฟล์ที่มีอยู่ (แม้ว่าจะไม่จำเป็นต้องใช้): ตัวอย่างเช่นการกำหนดค่า sudo
:r /etc/sudoers
หมายเหตุ: ยกเว้นว่า SELinux จะถูก จำกัด โดย SELinux ผู้ใช้สามารถอ่านไฟล์ใด ๆด้วยวิธีนี้!
- ให้สิทธิ์ตัวเองมากขึ้น sudo
user ALL=(ALL) NOPASSWD: ALL
- เขียนทับการกำหนดค่าเก่า
:w /etc/sudoers
ฉันสามารถจินตนาการวิธีที่คล้ายกันหลายสิบวิธีที่ผู้ใช้ของคุณสามารถเข้าถึงแก้ไขหรือทำลายระบบของคุณ
คุณจะไม่มีแม้กระทั่งหลักฐานการตรวจสอบที่ไฟล์ถูกเปลี่ยนแปลงในแบบนี้เพราะคุณจะเห็นเขาแก้ไขการกำหนดค่า Apache ของคุณในข้อความบันทึก sudo เท่านั้น นี่เป็นความเสี่ยงด้านความปลอดภัยในการให้sudo
สิทธิ์กับตัวแก้ไขใด ๆ
นี่คือเหตุผลเดียวกันว่าทำไมการให้สิทธิ์ในระดับรูต sudo กับคำสั่งเช่นtar
และunzip
มักจะไม่ปลอดภัยไม่มีอะไรป้องกันคุณจากการรวมการแทนที่ไบนารีระบบหรือไฟล์การกำหนดค่าระบบในไฟล์เก็บถาวร
ความเสี่ยงที่สองเช่นการแสดงความเห็นอื่น ๆ อีกมากมายมีออกมาชี้ว่าvim
ช่วยให้หนีเปลือกที่คุณสามารถเริ่มต้นการย่อยเปลือกจากภายในเป็นกลุ่มที่ช่วยให้คุณดำเนินการคำสั่งใด ๆ โดยพล จากภายในเซสชัน sudo vim ของคุณสิ่งเหล่านี้จะทำงานเป็นรูทตัวอย่างเช่น shell escape:
:!/bin/bash
จะให้รูตเชลล์แบบโต้ตอบ
:!/bin/rm -rf /
จะทำให้เรื่องดีในผับ
จะทำอย่างไรแทน
คุณยังสามารถใช้sudo
เพื่ออนุญาตให้ผู้ใช้แก้ไขไฟล์ที่พวกเขาไม่ได้เป็นเจ้าของได้อย่างปลอดภัย
ในการกำหนดค่า sudoers ของคุณคุณสามารถตั้งค่าคำสั่งพิเศษที่สงวนไว้sudoedit
แล้วตามด้วยชื่อพา ธ แบบเต็ม (wildcard) ไปยังไฟล์ที่ผู้ใช้สามารถแก้ไขได้:
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
ผู้ใช้อาจใช้-e
สวิตช์ในบรรทัดคำสั่ง sudo หรือใช้sudoedit
คำสั่ง:
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
ตามที่อธิบายไว้ในman page :
-e (edit)
ตัวเลือกที่แสดงให้เห็นว่าแทนการใช้คำสั่งที่ผู้ใช้ต้องการที่จะแก้ไขอย่างใดอย่างหนึ่งหรือไฟล์อื่น ๆ อีกมากมาย แทนคำสั่งสตริง "sudoedit" จะใช้เมื่อปรึกษานโยบายความปลอดภัย
หากผู้ใช้ได้รับอนุญาตจากนโยบายจะมีการดำเนินการตามขั้นตอนต่อไปนี้:
- สำเนาชั่วคราวทำจากไฟล์ที่จะแก้ไขโดยเจ้าของถูกตั้งค่าเป็นผู้ใช้ที่เรียกใช้
- ตัวแก้ไขที่ระบุโดยนโยบายจะถูกเรียกใช้เพื่อแก้ไขไฟล์ชั่วคราว นโยบาย sudoers ใช้ตัวแปรสภาพแวดล้อม SUDO_EDITOR, VISUAL และ EDITOR (ตามลำดับ) หากไม่มีการตั้งค่า SUDO_EDITOR, VISUAL หรือ EDITOR จะมีการใช้โปรแกรมแรกในรายการตัวแก้ไข
sudoers
(5)
- หากมีการแก้ไขไฟล์ชั่วคราวจะถูกคัดลอกกลับไปยังตำแหน่งเดิมและเวอร์ชันชั่วคราวจะถูกลบออก
หากไฟล์ที่ระบุไม่มีอยู่ไฟล์นั้นจะถูกสร้างขึ้น
โปรดทราบว่าไม่เหมือนกับคำสั่งส่วนใหญ่ที่ดำเนินการโดย sudo ตัวแก้ไขจะถูกเรียกใช้โดยไม่มีการแก้ไขสภาพแวดล้อมของผู้ใช้ หากด้วยเหตุผลบางอย่าง sudo ไม่สามารถอัปเดตไฟล์ด้วยเวอร์ชันที่แก้ไขได้ผู้ใช้จะได้รับคำเตือนและสำเนาที่แก้ไขจะยังคงอยู่ในไฟล์ชั่วคราว
sudoers
คู่มือนอกจากนี้ยังมีส่วนทั้งวิธีการที่จะสามารถนำเสนอ จำกัดการป้องกันการหลบหนีเปลือกด้วยRESRICT
และNOEXEC
ตัวเลือก
restrict
หลีกเลี่ยงการให้ผู้ใช้เข้าถึงคำสั่งที่อนุญาตให้ผู้ใช้เรียกใช้คำสั่งโดยพลการ ผู้แก้ไขหลายคนมีโหมด จำกัด ที่เปลือกหนีถูกปิดใช้งานแม้ว่า sudoedit จะเป็นทางออกที่ดีกว่าสำหรับการเรียกใช้โปรแกรมแก้ไขผ่าน sudo เนื่องจากมีโปรแกรมจำนวนมากที่เสนอการยกเว้นของเชลล์การ จำกัด ผู้ใช้กับชุดของโปรแกรมที่มักไม่สามารถใช้งานได้
และ
noexec
ระบบจำนวนมากที่สนับสนุนไลบรารีที่แบ่งใช้มีความสามารถในการแทนที่ฟังก์ชันไลบรารีเริ่มต้นด้วยการชี้ตัวแปรสภาพแวดล้อม (โดยปกติคือ LD_PRELOAD) ไปยังไลบรารีที่ใช้ร่วมกันสำรอง ในระบบดังกล่าวสามารถใช้ฟังก์ชั่น noexec ของ sudo เพื่อป้องกันโปรแกรมที่เรียกใช้โดย sudo จากการเรียกใช้งานโปรแกรมอื่น ๆ หมายเหตุ... ...
หากต้องการเปิดใช้งาน noexec สำหรับคำสั่งให้ใช้NOEXEC
แท็กตามที่ระบุไว้ในส่วนข้อมูลจำเพาะผู้ใช้ด้านบน นี่คือตัวอย่างอีกครั้ง:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
สิ่งนี้อนุญาตให้แอรอนผู้ใช้รัน/usr/bin/more
และ/usr/bin/vi
เปิดใช้งาน noexec สิ่งนี้จะป้องกันไม่ให้ทั้งสองคำสั่งดำเนินการคำสั่งอื่น ๆ (เช่นเชลล์)
vim
ที่ผู้ใช้มีอิสระที่จะเปิดและเขียนไปยังไฟล์ใด ๆ ที่เขาพอใจ