เป็นไปได้หรือไม่ที่จะรันสคริปต์ทุบตีในประเภทของ sandbox?


13

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

ตัวอย่างเช่นเราต้องการรันสคริปต์และอนุญาตคำสั่งต่อไปนี้: echo cat awk

แต่ไม่อนุญาตคำสั่งอื่น ๆ (เราไม่ต้องการให้รายการที่เฉพาะเจาะจงที่นี่)

นอกจากนี้หากสคริปต์มีคำสั่ง cp เราต้องการรวบรวมและเปลี่ยนเส้นทางไปยังคำสั่งอื่น (ซึ่งสามารถทำได้โดยใช้นามแฝง)

มีความคิดอย่างไรที่จะทำเช่นนี้?

คำตอบ:


9

วิธีที่ง่ายที่สุดคือใช้คุก chrootที่มีเฉพาะคำสั่งที่คุณต้องการให้สคริปต์สามารถรันได้ จากนั้นคุณเรียกใช้สคริปต์ผ่านตัวตัดคำที่เรียกchrootเข้าไปในไดเรกทอรีจากนั้นเรียกใช้งานสคริปต์


17

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

  • คุณสามารถเรียกใช้เปลือก จำกัดbash -rโดยเรียกทุบตีเป็น ฉันแนะนำคุณให้รู้จักกับคู่มือทุบตีสำหรับคำอธิบายโดยละเอียด; แนวคิดพื้นฐานคือสคริปต์ไม่สามารถเรียกใช้คำสั่งที่ไม่ได้อยู่ใน$PATHไม่สามารถเปลี่ยนแปลง$PATHไม่สามารถเปลี่ยนเส้นทางไปยังหรือจากไฟล์และข้อ จำกัด เพิ่มเติมเล็กน้อย การตั้งค่านี้ค่อนข้างง่าย แต่ถ้าสคริปต์ที่ไม่รู้จักนั้นซับซ้อนเกินกว่าที่คุณจะตรวจทานได้มีโอกาสที่จะใช้หลายสิ่งหลายอย่างที่ถูกห้ามในเชลล์ที่ จำกัด

  • คุณสามารถตั้งค่าคุกchroot แนวคิดคือการตั้งค่าแผนผังไดเรกทอรี/some/rootและเรียกใช้สคริปต์ในสภาพแวดล้อมที่เชื่อว่า/some/rootเป็นระบบไฟล์ทั้งหมด ( chrootย่อมาจากรูทการเปลี่ยนแปลง) เมื่อต้นไม้ไดเรกทอรีมีการตั้งค่าเรียกใช้สคริปต์ (คัดลอกไป/some/root/myscript) chroot /some/root /bin/bash /myscriptเช่น ตัวอย่างเช่นคุณจะตั้งค่าไดเรกทอรี/some/root/binที่มีคำสั่งที่คุณต้องการอนุญาตและโปรแกรม chrooted /binจะได้เห็นไดเรกทอรีนี้เป็น คุณจะต้องคัดลอกทุกอย่างที่จำเป็นสำหรับการทำงานของโปรแกรมภายใน chroot: ไลบรารีไฟล์ข้อมูลbashสคริปต์เอง ฯลฯ สคริปต์อาจต้อง/procติดตั้งภายใน chroot; mount -t proc proc /procคุณสามารถทำเช่นนี้กับคำสั่งเช่น

    หากคุณต้องการทำให้ทรีไดเรกทอรีทั้งหมดพร้อมใช้งานกับสคริปต์ให้พูดว่า/var/exampleคุณมีหลายทางเลือก /some/rootคุณสามารถทำสำเนาภายใต้ คุณสามารถสร้างฮาร์ดลิงก์ (ถ้ามันทำงานกับแอปพลิเคชันของคุณและ chroot อยู่ในระบบไฟล์เดียวกัน) บน Linux คุณสามารถทำได้mount --bind /var/example /some/root/var/exampleเพื่อ "รับสินบน" /var/exampleภายใน chroot โปรดทราบว่าลิงก์สัญลักษณ์ไม่สามารถใช้งานได้เนื่องจากเป้าหมายของลิงก์นั้นถูกกำหนดไว้ภายใน chroot

    โปรดทราบว่า chroot ไม่ได้ให้การรักษาความปลอดภัยที่สมบูรณ์โดยเฉพาะอย่างยิ่งกับกระบวนการที่ทำงานในฐานะรูท ตัวอย่างเช่นกระบวนการรูทสามารถสร้างไฟล์อุปกรณ์ภายใน chroot และเข้าถึงดิสก์ทั้งหมดผ่านมัน กระบวนการ chrooted ยังคงสามารถทำการเชื่อมต่อเครือข่าย (คุณสามารถห้ามได้โดยไม่รวมโปรแกรมเครือข่ายใด ๆ ภายใน chroot และตรวจสอบให้แน่ใจว่าโปรแกรมที่ไม่น่าเชื่อถือไม่สามารถสร้างไฟล์และทำให้ปฏิบัติการหรือเขียนทับไฟล์ปฏิบัติการที่มีอยู่)


คุณจะต้องคัดลอกทุกสิ่งที่จำเป็นฉันสามารถสร้างลิงก์เชิงสัญลักษณ์หรือฮาร์ดไดรฟ์แทนการคัดลอกได้หรือไม่
kyb

1
@kyb ฮาร์ดลิงก์: ใช่ ลิงก์สัญลักษณ์: ไม่ลิงก์สัญลักษณ์สามารถชี้ไปที่ไฟล์ที่คุณเห็นเท่านั้น แต่จะไม่ยอมให้คุณรอดจาก chroot ได้ ลิงก์ยากใช้งานได้ยากและยุ่งเหยิง: มันพังถ้าคุณแทนที่ไฟล์พวกเขาจะเปิดเผยสำเนาต้นฉบับในกรณีที่มันสามารถเขียนได้ภายใน chroot หากคุณต้องการทำให้ทั้งต้นไม้พร้อมใช้งานให้คัดลอกหรือทำการเมานต์แบบอ่านอย่างเดียว
Gilles 'หยุดชั่วร้าย'

ฉันต้องการที่จะทำให้คำสั่งทั่วไปสามารถใช้ได้เช่นgrep, awk, unitsฯลฯ ฉันจะต้องคัดลอกทุกไฟล์ bin และ dependancies ทั้งหมดด้วยตนเองหรือมีบางสับที่มีประโยชน์ที่จะบอกอย่างชัดเจนสิ่งที่ utils ควรจะทำงานใน chroot?
kyb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.