ฉันเคยได้ยิน / อ่านมากเกี่ยวกับคุก chroot ภายใต้ linux แต่ไม่เคยใช้มัน (ฉันใช้ Fedora วันต่อวัน) ดังนั้น chroot "คุก" คืออะไร? ฉันควรใช้เมื่อไหร่และทำไม / ไม่ใช้และมีอะไรอีกบ้างที่ฉันควรรู้ ฉันจะสร้างได้อย่างไร
ฉันเคยได้ยิน / อ่านมากเกี่ยวกับคุก chroot ภายใต้ linux แต่ไม่เคยใช้มัน (ฉันใช้ Fedora วันต่อวัน) ดังนั้น chroot "คุก" คืออะไร? ฉันควรใช้เมื่อไหร่และทำไม / ไม่ใช้และมีอะไรอีกบ้างที่ฉันควรรู้ ฉันจะสร้างได้อย่างไร
คำตอบ:
คุก chroot เป็นวิธีการแยกกระบวนการและลูกของมันออกจากส่วนที่เหลือของระบบ ควรใช้สำหรับกระบวนการที่ไม่ได้ทำงานในฐานะรูทเท่านั้นเนื่องจากผู้ใช้รูทสามารถแตกออกจากคุกได้ง่ายมาก
แนวคิดคือคุณสร้างแผนผังไดเร็กทอรีที่คุณคัดลอกหรือลิงก์ในไฟล์ระบบทั้งหมดที่จำเป็นสำหรับกระบวนการที่จะเรียกใช้ จากนั้นคุณใช้การchroot()
เรียกระบบเพื่อเปลี่ยนไดเรกทอรีรากให้อยู่ที่ฐานของต้นไม้ใหม่นี้และเริ่มกระบวนการที่ทำงานในสภาพแวดล้อม chroot เนื่องจากไม่สามารถอ้างถึงเส้นทางที่อยู่นอกรูทที่ถูกแก้ไขได้จึงไม่สามารถทำการดำเนินการ (อ่าน / เขียนเป็นต้น) โดยไม่ประสงค์ดีในสถานที่เหล่านั้น
บน Linux การใช้ bind mounts เป็นวิธีที่ยอดเยี่ยมในการเติมต้นไม้ chroot คุณสามารถใช้โฟลเดอร์ที่ต้องการ/lib
และ/usr/lib
ไม่ดึงได้/usr
เช่นกัน เพียงผูกแผนผังไดเรกทอรีที่คุณต้องการกับไดเรกทอรีที่คุณสร้างในไดเรกทอรีคุก
firejail
ทำงาน
/bin
ที่ติดตั้งโดยผู้ใช้รูทได้หรือไม่? @Ben Combee
"chroot คุก" เป็นผู้เรียกชื่อผิดที่ควรตายไปจริง ๆ แต่ผู้คนยังคงใช้มันต่อไป chroot
เป็นเครื่องมือที่ช่วยให้คุณจำลองไดเรกทอรีบนระบบไฟล์ของคุณเป็นรากของระบบไฟล์ นั่นหมายความว่าคุณสามารถมีโครงสร้างโฟลเดอร์เช่น:
-- foo
-- bar
-- baz
-- bazz
ถ้าคุณchroot foo
ทำls /
คุณจะเห็น:
-- bar
-- baz
เท่าที่ls
(และเครื่องมืออื่น ๆ ที่คุณเรียกใช้) มีความเกี่ยวข้องนี่เป็นไดเรกทอรีเดียวในระบบไฟล์ เหตุผล "คุก" เป็นชื่อเรียกผิดchroot
ไม่ได้มีวัตถุประสงค์เพื่อบังคับให้โปรแกรมอยู่ในระบบแฟ้มจำลองนั้น โปรแกรมที่รู้ว่าอยู่ใน "คุก" chroot สามารถหลบหนีได้อย่างง่ายดายคุณจึงไม่ควรใช้chroot
เป็นมาตรการรักษาความปลอดภัยเพื่อป้องกันไม่ให้โปรแกรมแก้ไขไฟล์นอกระบบจำลองของคุณ
chroot
"คุก" กรณีที่ผมเคยเห็นต้องเพิ่มขึ้นเพื่อใช้สิทธิ์ root เป็นการยากที่จะป้องกันไม่ให้กระบวนการเพิ่มระดับตัวเองไปสู่สิทธิ์ของรูท?
chroot
ไม่ได้ ด้วยเหตุนี้ผู้คนมักจะปะปนกันchroot
และjails
หมายถึงสิ่งเดียวกัน พวกเขาทำไม่ได้ คำว่า "คุก" ได้รับการกล่าวขาน
chroot jail
ความคิดที่ดีในกรณีของฉันไม่ได้เหรอ?
โดยทั่วไปคุณเพียงแค่เปลี่ยนไดเรกทอรีรูทของสภาพแวดล้อมของคุณ ดังนั้น
/
กลายเป็น
/some-jail/ (or whatever directory you want)
เมื่อแอปพลิเคชันเข้าถึง / พวกเขาจะได้รับ / เข้าคุก / แอพพลิเคชั่นไม่สามารถแยกออกจาก / คุกได้ดังนั้นคุณจึงรู้ว่ามันจะไม่สามารถเข้าถึงสิ่งอื่นใดในเครื่องของคุณ มันเป็นวิธีที่ง่ายมากในการพูดว่า 'เฮ้คุณสามารถเข้าถึงสิ่งเหล่านี้ที่ฉันให้คุณเท่านั้นและคุณไม่สามารถเข้าถึงสิ่งอื่นใดในระบบ
"ฉันควรใช้เมื่อไรและเพราะเหตุใด"
การใช้งานครั้งเดียวคือในการทดสอบสคริปต์ (เวลาบูตและอื่น ๆ ) ที่ทำการอ้างอิงเส้นทางแบบสัมบูรณ์หรือเรียกใช้คำสั่งที่คุณอาจต้องการที่จะสกัดกั้นและบันทึก (และอาจไม่มีการคัดลอก) ในสภาพแวดล้อมที่คุณไม่ต้องการ ทำงานจริงในสภาพแวดล้อมการทำงานของคุณ
ตัวอย่างเช่นฉันมีอุปกรณ์ฝังตัวที่ใช้ Linux ฉันต้องการตรวจสอบการทำงานของ bash โดยไม่ต้อง a) เรียกใช้บนอุปกรณ์จริง (เนื่องจากฉันมีเครื่องมือที่ดีกว่าบนเดสก์ท็อปของฉันและไม่ต้องการหยุดทำงานอุปกรณ์) b) มันเป็นเรื่องจริงบนเดสก์ท็อปของฉัน (เนื่องจากฉันไม่ต้องการให้ระบบเดสก์ท็อปของฉันเลอะ)
นอกจากนี้คุณสามารถค้นพบคำสั่งหรือไฟล์สคริปต์อื่นที่ใช้เนื่องจากการรันจะออกโดยมีข้อผิดพลาดทุกครั้งที่มันพยายามเรียกใช้คำสั่งหรือเชลล์สคริปต์ที่ไม่มีอยู่ใน "chroot jail"
(แน่นอนว่าหากต้องการไปทั้งตัวคุณสามารถทำงานใน QEMU หรือ Docker หรือ VM แต่นั่นจะเกี่ยวข้องกับการสร้างอิมเมจ VM ฯลฯ - ทำงานได้มากกว่า)