คำถามนี้เป็นคำถามทั่วไปและไม่เพียง แต่ใช้กับสถานการณ์ของฉันเท่านั้น แต่ ... ฉันมีเครื่องมือ busybox ขนาดเล็กที่ฉันต้องการให้ผู้ใช้ที่ไม่ใช่รูทสามารถรันสคริปต์เฉพาะกับสิทธิ์พิเศษของรูทได้ ตัวอย่างเช่นบางสิ่งบางอย่างเช่นสคริปต์ขนาดเล็กนี้เพื่อเปิดใช้งาน DHCP โดยที่ตัวแปรเดียว ( $1
) เพื่อส่งเข้าสู่ cmdline (!!) คือชื่อโฮสต์ที่จะส่งออก:
#!/bin/bash
udhcpc -b -i eth0 -h $1
การเรียกใช้ udhcpc เช่นนี้ต้องใช้การเข้าถึงรูทดังนั้นฉันวางแผนที่/etc/sudoers
จะแก้ไขเพื่อให้มีบรรทัดนี้:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
ซึ่งควรเปิดใช้งาน "joe" เพื่อให้เรียกใช้สคริปต์นั้นได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเพียงแค่เรียกใช้:
sudo /path/to/enable_dhcp.sh
และไม่ถูกถามหารหัสผ่าน (ซึ่งเป็นสิ่งที่ฉันต้องการเนื่องจากฉันต้องการให้โจสามารถเขียนสคริปต์นี้ได้)
ตอนนี้ .. ฉันรู้แล้ว (หรืออย่างน้อยฉันก็คิดว่า) การใช้$1
สคริปต์ที่สามารถรันได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเป็นแนวคิดที่น่ากลัวเพราะคุณสามารถฉีดสิ่งที่คุณต้องการได้
ดังนั้น ... วิธีที่ดีที่สุดในการจัดการกับเรื่องนี้คืออะไร? ฉันจะปล่อยให้โจทำสิ่งที่ฉันต้องการด้วยสิทธิ์ของรูทอนุญาตให้เขาส่งผ่านตัวแปร (หรือทำอย่างนั้นได้อย่างมีประสิทธิภาพเหมือนกับตัวแปรสภาพแวดล้อม) ในขณะที่ไม่เปิดกว้างสำหรับการโจมตีแบบฉีด