chroot“ คุก” - มันคืออะไรและฉันจะใช้มันได้อย่างไร?


99

ฉันเคยได้ยิน / อ่านมากเกี่ยวกับคุก chroot ภายใต้ linux แต่ไม่เคยใช้มัน (ฉันใช้ Fedora วันต่อวัน) ดังนั้น chroot "คุก" คืออะไร? ฉันควรใช้เมื่อไหร่และทำไม / ไม่ใช้และมีอะไรอีกบ้างที่ฉันควรรู้ ฉันจะสร้างได้อย่างไร

chroot 

คำตอบที่นี่ดูเหมือนจะสั้นใน "ฉันจะใช้หมวดหมู่ได้อย่างไร" :(
Alexander Mills

คำตอบ:


87

คุก chroot เป็นวิธีการแยกกระบวนการและลูกของมันออกจากส่วนที่เหลือของระบบ ควรใช้สำหรับกระบวนการที่ไม่ได้ทำงานในฐานะรูทเท่านั้นเนื่องจากผู้ใช้รูทสามารถแตกออกจากคุกได้ง่ายมาก

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

บน Linux การใช้ bind mounts เป็นวิธีที่ยอดเยี่ยมในการเติมต้นไม้ chroot คุณสามารถใช้โฟลเดอร์ที่ต้องการ/libและ/usr/libไม่ดึงได้/usrเช่นกัน เพียงผูกแผนผังไดเรกทอรีที่คุณต้องการกับไดเรกทอรีที่คุณสร้างในไดเรกทอรีคุก


10
คำตอบของคุณยอดเยี่ยม สิ่งหนึ่งที่ต้องพูดถึงแม้ว่า chroot ไม่ใช่กลไกที่ปลอดภัย (กระบวนการสามารถแยกออกจากคุกได้ถ้ามันกลายเป็นรูตและบางครั้งก็ไม่ได้) คุกจริงสามารถบังคับใช้กับ Freebsd คุกและไม่ชอบ ดูen.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b

3
Gentoo กระบวนการติดตั้งใช้ chroot เพื่อให้คุณสามารถติดตั้งระบบปฏิบัติการใหม่ของคุณก่อนที่คุณได้ติดตั้งด้วงและลินุกซ์เคอร์เนล ฯลฯ
คริส Huang-Leaver

3
ดูfirejailสำหรับเชลล์ที่ถูกจำคุกโดยใช้เนมสเปซ Linux ทั้งหมด มีแพ็คเกจ deb และ rpm โดยทั่วไปฉันแนะนำให้ใช้เคอร์เนล 3.18 หรือใหม่กว่าเนื่องจากมีปัญหาที่ทราบแล้วว่าไม่สามารถติดตั้งซอฟต์แวร์ใหม่หรือจัดการผู้ใช้เมื่อfirejailทำงาน
CivFan

คำตอบที่ดีเยี่ยม! - แม้ว่าตัวอย่างพื้นฐานบางอย่างน่ายินดีที่ได้เห็น
Gabriel Staples

ผู้ใช้ที่อยู่ในคุก chroot สามารถโทรหาไฟล์ไบนารีที่อยู่ภายใต้/binที่ติดตั้งโดยผู้ใช้รูทได้หรือไม่? @Ben Combee
alper

50

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

-- foo
    -- bar
    -- baz
-- bazz

ถ้าคุณchroot fooทำls /คุณจะเห็น:

-- bar
-- baz

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


16
มันจะมีประโยชน์หากมีตัวอย่างของวิธีการหลบหนีchroot"คุก" กรณีที่ผมเคยเห็นต้องเพิ่มขึ้นเพื่อใช้สิทธิ์ root เป็นการยากที่จะป้องกันไม่ให้กระบวนการเพิ่มระดับตัวเองไปสู่สิทธิ์ของรูท?
CivFan

4
มันยัง "จำกัด " ดังนั้น "คุก" จึงเป็นชวเลขที่ดี "ฟิลด์บรรจุระดับ 3" จะดีกว่าหรือไม่!
MikeW

4
คำนี้มาจากคุก FreeBSD คุกถูกสร้างขึ้นบน chroot คุกมีวัตถุประสงค์เพื่อแก้ไขปัญหาความปลอดภัยchrootไม่ได้ ด้วยเหตุนี้ผู้คนมักจะปะปนกันchrootและjailsหมายถึงสิ่งเดียวกัน พวกเขาทำไม่ได้ คำว่า "คุก" ได้รับการกล่าวขาน
BugHunterUK

แล้วคุณล่ะใช้chroot jailความคิดที่ดีในกรณีของฉันไม่ได้เหรอ?
Shafizadeh

10

โดยทั่วไปคุณเพียงแค่เปลี่ยนไดเรกทอรีรูทของสภาพแวดล้อมของคุณ ดังนั้น

/

กลายเป็น

/some-jail/ (or whatever directory you want)

เมื่อแอปพลิเคชันเข้าถึง / พวกเขาจะได้รับ / เข้าคุก / แอพพลิเคชั่นไม่สามารถแยกออกจาก / คุกได้ดังนั้นคุณจึงรู้ว่ามันจะไม่สามารถเข้าถึงสิ่งอื่นใดในเครื่องของคุณ มันเป็นวิธีที่ง่ายมากในการพูดว่า 'เฮ้คุณสามารถเข้าถึงสิ่งเหล่านี้ที่ฉันให้คุณเท่านั้นและคุณไม่สามารถเข้าถึงสิ่งอื่นใดในระบบ


6

"ฉันควรใช้เมื่อไรและเพราะเหตุใด"

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

ตัวอย่างเช่นฉันมีอุปกรณ์ฝังตัวที่ใช้ Linux ฉันต้องการตรวจสอบการทำงานของ bash โดยไม่ต้อง a) เรียกใช้บนอุปกรณ์จริง (เนื่องจากฉันมีเครื่องมือที่ดีกว่าบนเดสก์ท็อปของฉันและไม่ต้องการหยุดทำงานอุปกรณ์) b) มันเป็นเรื่องจริงบนเดสก์ท็อปของฉัน (เนื่องจากฉันไม่ต้องการให้ระบบเดสก์ท็อปของฉันเลอะ)

นอกจากนี้คุณสามารถค้นพบคำสั่งหรือไฟล์สคริปต์อื่นที่ใช้เนื่องจากการรันจะออกโดยมีข้อผิดพลาดทุกครั้งที่มันพยายามเรียกใช้คำสั่งหรือเชลล์สคริปต์ที่ไม่มีอยู่ใน "chroot jail"

(แน่นอนว่าหากต้องการไปทั้งตัวคุณสามารถทำงานใน QEMU หรือ Docker หรือ VM แต่นั่นจะเกี่ยวข้องกับการสร้างอิมเมจ VM ฯลฯ - ทำงานได้มากกว่า)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.