อ่าน 5 นาที
ชรูท
chroot chroot เป็น คำสั่ง เชลล์ และ ระบบเรียกใช้งาน บน ระบบปฏิบัติการ Unix และ ระบบปฏิบัติการ ที่คล้าย Unix ซึ่งจะเปลี่ยน ไดเร็กทอรีราก ที่ปรากฏ...
ชรูท
| ชรูท | |
|---|---|
ตัวอย่างการใช้งาน chrootในRaspberry Pi OSโดยการเรียกใช้เชลล์แบบโต้ตอบภายในไดเร็กทอรีรูทพิเศษ | |
| ผู้เขียนต้นฉบับ | บิล จอย , เอทีแอนด์ที เบลล์ แล็บโบราทอรีส์ |
| นักพัฒนา | นักพัฒนาซอฟต์แวร์โอเพนซอร์สและเชิงพาณิชย์หลายราย |
| ปล่อย | พ.ศ. 2522 |
| ระบบปฏิบัติการ | ยูนิก , ระบบปฏิบัติการคล้ายยูนิก , Plan 9 , อินเฟอร์โน |
| แพลตฟอร์ม | ข้ามแพลตฟอร์ม |
| พิมพ์ | สั่งการ |
chrootchroot เป็นคำสั่งเชลล์ และระบบเรียกใช้งานบน ระบบปฏิบัติการ Unixและระบบปฏิบัติการที่คล้าย Unixซึ่งจะเปลี่ยนไดเร็กทอรีราก ที่ปรากฏ สำหรับกระบวนการที่กำลังทำงานอยู่ในปัจจุบันและกระบวนการลูกโปรแกรมที่ทำงานในสภาพแวดล้อมที่แก้ไขแล้วจะไม่สามารถตั้งชื่อ (และโดยปกติจึงไม่สามารถเข้าถึง) ไฟล์ที่อยู่นอกโครงสร้างไดเร็กทอรีที่กำหนดได้ คำว่าchrootอาจหมายถึงระบบเรียกใช้งานchroot(2)หรือ ยูทิลิตี้ บรรทัดคำสั่งchroot(8)สภาพแวดล้อมที่แก้ไขแล้วเรียกว่าchroot jail
ประวัติศาสตร์
ระบบ เรียก chrootถูกนำมาใช้ระหว่างการพัฒนาUnix เวอร์ชัน 7ในปี 1979 แหล่งข้อมูลหนึ่งระบุว่าBill Joyเพิ่มระบบนี้เมื่อวันที่ 18 มีนาคม 1982 – 17 เดือนก่อนที่4.2BSDจะวางจำหน่าย – เพื่อทดสอบระบบการติดตั้งและการสร้าง[ 1 ] BSD ทุกเวอร์ชันที่มีเคอร์เนลมีchroot (2) [ 2 ] [ 3 ]การใช้คำว่า "คุก" ในยุคแรกๆ ที่นำมาใช้กับchrootมาจากBill Cheswickที่สร้างhoneypotเพื่อตรวจสอบแฮกเกอร์ในปี 1991 [ 4 ]
บทความแรกเกี่ยวกับเจลเบรกได้รับการกล่าวถึงในคอลัมน์ความปลอดภัยของSunWorld Onlineซึ่งเขียนโดย Carole Fennelly; ฉบับเดือนสิงหาคม 1999 และมกราคม 1999 ครอบคลุมหัวข้อchroot() ส่วนใหญ่ [ 5 ]
เพื่อให้มีประโยชน์สำหรับการจำลองเสมือน FreeBSD ได้ขยายแนวคิดและในเวอร์ชัน 4.0 ในปี 2000 ได้นำคำสั่งjail มาใช้ [ 6 ]
ในปี พ.ศ. 2545 บทความภาษาฝรั่งเศสโดย Nicolas Boiteux ได้อธิบายวิธีการสร้าง jails บน Linux [ 7 ]
ภายในปี 2546 ผู้ให้บริการ ไมโครเซอร์วิส อินเทอร์เน็ตรายแรก ที่มี Linux jail ให้บริการSaaS / PaaS (เช่น คอนเทนเนอร์เชลล์ พร็อกซี ircd บอท ฯลฯ) โดยคิดค่าบริการตามการใช้งานภายใน jail [ 8 ]
ในปี พ.ศ. 2548 Sunได้ปล่อยSolaris Containers (หรือที่รู้จักกันในชื่อ Solaris Zones) ซึ่งได้รับการอธิบายว่าเป็น "chroot เวอร์ชันอัพเกรด" [ 9 ]
ภายในปี 2008 LXC (ซึ่งต่อมาDockerถูกสร้างขึ้นบนพื้นฐานนี้) ได้นำเอาคำศัพท์ " คอนเทนเนอร์ " มาใช้ [ 10 ]และได้รับความนิยมในปี 2013 เนื่องจากการรวม เนมสเปซ ของผู้ใช้ เข้าไปใน เคอร์เนล Linux 3.8 [ 11 ]
การใช้งาน
สภาพแวดล้อม chroot สามารถใช้เพื่อสร้างและโฮสต์ สำเนา เสมือน แยกต่างหาก ของระบบซอฟต์แวร์ ซึ่งอาจมีประโยชน์สำหรับ:
- การทดสอบและการพัฒนา
- สามารถตั้งค่าสภาพแวดล้อมทดสอบใน chroot สำหรับซอฟต์แวร์ที่อาจมีความเสี่ยงมากเกินไปที่จะนำไปใช้งานบนระบบใช้งานจริงได้
- การควบคุมการพึ่งพา
- ซอฟต์แวร์สามารถพัฒนา สร้าง และทดสอบได้ในสภาพแวดล้อม chroot ที่มีเฉพาะไลบรารีที่จำเป็นเท่านั้น ซึ่งสามารถป้องกันปัญหาการเชื่อมโยงที่ไม่สมดุลบางประเภทที่อาจเกิดขึ้นจากการที่นักพัฒนาสร้างโปรเจกต์โดยติดตั้งไลบรารีโปรแกรมที่แตกต่างกัน
- ความเข้ากันได้
- ซอฟต์แวร์รุ่นเก่าหรือซอฟต์แวร์ที่ใช้ABI แตกต่างกัน บางครั้งจำเป็นต้องทำงานในสภาพแวดล้อม chroot เนื่องจากไลบรารีหรือไฟล์ข้อมูลที่รองรับอาจมีชื่อหรือการเชื่อมโยงที่ขัดแย้งกับไฟล์ของระบบโฮสต์ได้
- การกู้คืน
- หากระบบไม่สามารถบูตได้ สามารถใช้ chroot เพื่อย้ายกลับเข้าไปในสภาพแวดล้อมที่เสียหายได้หลังจากบูตจากระบบไฟล์รูททางเลือก (เช่น จากสื่อการติดตั้ง หรือLive CD )
- การแยกสิทธิพิเศษ
- โปรแกรมต่างๆ สามารถนำตัวระบุไฟล์ ที่เปิดอยู่ (สำหรับไฟล์ไปป์ไลน์และการเชื่อมต่อเครือข่าย) เข้าไปใน chroot ได้ ซึ่งจะช่วยลดความซับซ้อนในการออกแบบ jail โดยไม่จำเป็นต้องทิ้งไฟล์ที่กำลังทำงานไว้ภายในไดเร็กทอรี chroot นอกจากนี้ยังช่วยลดความซับซ้อนของการจัดเรียงทั่วไปในการเรียกใช้ส่วนที่อาจมีความเสี่ยงของโปรแกรมที่มีสิทธิ์พิเศษในแซนด์บ็อกซ์ เพื่อป้องกันการละเมิดความปลอดภัยล่วงหน้า โปรดทราบว่า chroot อาจไม่เพียงพอที่จะจำกัดกระบวนการที่มีสิทธิ์ระดับ root ได้เสมอไป
ข้อจำกัด
กลไก chroot ไม่ได้มีจุดประสงค์เพื่อป้องกันการดัดแปลงโดยเจตนาโดยผู้ใช้ที่มีสิทธิ์พิเศษ (root) ข้อยกเว้นที่สำคัญคือNetBSDซึ่งถือว่า chroot เป็นกลไกด้านความปลอดภัยและไม่มีการหลบหนีใดๆ ที่เป็นที่รู้จัก ในระบบส่วนใหญ่ บริบท chroot จะไม่เรียงซ้อนกันอย่างถูกต้อง และโปรแกรมที่ถูก chroot ด้วยสิทธิ์ที่เพียงพออาจทำการ chroot ครั้งที่สอง[ 12 ]เพื่อหลุดพ้น เพื่อลดความเสี่ยงจากจุดอ่อนด้านความปลอดภัยนี้ โปรแกรมที่ถูก chroot ควรสละสิทธิ์ root โดยเร็วที่สุดหลังจากทำการ chroot หรือควรใช้กลไกอื่นๆ เช่นFreeBSD jailsแทน โปรดทราบว่าบางระบบ เช่นFreeBSDใช้มาตรการป้องกันการโจมตี chroot ครั้งที่สอง[ 13 ]
ในระบบที่รองรับโหนดอุปกรณ์บนระบบไฟล์ทั่วไปผู้ใช้ root ที่ถูกจำกัดสิทธิ์ด้วย chroot ยังคงสามารถสร้างโหนดอุปกรณ์และเมานต์ระบบไฟล์บนโหนดเหล่านั้นได้ ดังนั้น กลไก chroot จึงไม่ได้มีจุดประสงค์เพื่อปิดกั้นการเข้าถึงอุปกรณ์ระบบระดับต่ำโดยผู้ใช้ที่มีสิทธิ์พิเศษ และไม่ได้มีจุดประสงค์เพื่อจำกัดการใช้ทรัพยากร เช่นการอ่าน/เขียนข้อมูล แบนด์วิดท์ พื้นที่ดิสก์ หรือเวลา CPU ระบบ Unix ส่วนใหญ่ไม่ได้เน้นระบบไฟล์โดยสมบูรณ์ และยังคงมีฟังก์ชันการทำงานที่อาจก่อให้เกิดปัญหา เช่น การเชื่อมต่อเครือข่ายและการควบคุมกระบวนการทำงาน ผ่านทางอินเทอร์เฟซการเรียกใช้ระบบสำหรับโปรแกรมที่ถูกจำกัดสิทธิ์ด้วย chroot
เมื่อเริ่มต้นโปรแกรม คาดว่าจะพบพื้นที่ชั่วคราวไฟล์การกำหนดค่า โหนดอุปกรณ์และไลบรารีที่ใช้ร่วมกันในตำแหน่งที่กำหนดไว้ล่วงหน้า สำหรับโปรแกรม chrooted ที่จะเริ่มต้นได้อย่างสำเร็จ ไดเร็กทอรี chroot จะต้องมีไฟล์เหล่านี้อย่างน้อยหนึ่งชุด ซึ่งอาจทำให้การใช้ chroot เป็นกลไกแซนด์บ็อกซ์ทั่วไปทำได้ยาก เครื่องมือเช่น Jailkit [ 14 ]สามารถช่วยลดความยุ่งยากและทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ
มีเพียงผู้ใช้ root เท่านั้น ที่สามารถทำการ chroot ได้ จุดประสงค์ก็เพื่อป้องกันไม่ให้ผู้ใช้ติดตั้ง โปรแกรม setuid ไว้ ภายใน chroot jail ที่สร้างขึ้นเป็นพิเศษ (เช่น ด้วย ไฟล์ /etc/passwdและ/etc/shadow ปลอม ) ซึ่งจะหลอกให้โปรแกรมนั้นสามารถยกระดับสิทธิ์ได้
ระบบปฏิบัติการ Unix บางระบบมีส่วนขยายของกลไก chroot เพื่อแก้ไขข้อจำกัดเหล่านี้อย่างน้อยบางส่วน (ดูการใช้งานเทคโนโลยีการจำลองเสมือนระดับระบบปฏิบัติการ )
แอปพลิเคชันกราฟิกบน chroot
สามารถเรียกใช้แอปพลิเคชันกราฟิกในสภาพแวดล้อม chrooted ได้โดยใช้วิธีการต่างๆ เช่น: [ 15 ] [ 16 ]
- ใช้xhost (หรือคัดลอกรหัสลับจาก .Xauthority)
- เซิร์ฟเวอร์ X แบบซ้อนกัน เช่นXnest หรือ Xephyrรุ่นใหม่กว่า(หรือเริ่มเซิร์ฟเวอร์ X จริงๆ จากภายใน jail ก็ได้)
- การเข้าถึง chroot ผ่านSSH โดย ใช้คุณสมบัติการส่งต่อ X11 ( ssh -X )
- xchrootเป็นเวอร์ชันเพิ่มเติมของ chroot สำหรับผู้ใช้และการส่งต่อ Xorg/X11 (socat/mount)
- เซิร์ฟเวอร์ VNC X11 และการเชื่อมต่อ ไคลเอ็นต์ VNCจากภายนอกสภาพแวดล้อม
- Atoms เป็นเครื่องมือจัดการ chroot ของ Linux ที่มี GUI ที่ใช้งานง่าย[ 17 ]
แอปพลิเคชันที่โดดเด่น
ตัวแทน การถ่ายโอนอีเมล ของ Postfixอาจทำงานเป็นไปป์ไลน์ของโปรแกรมช่วยเหลือที่แยกกัน[ 18 ]
เช่นเดียวกับ 4.2BSD ก่อนหน้านี้ ระบบสร้างแพ็กเกจภายในของ Debian และ Ubuntu ใช้ chroot อย่างกว้างขวางเพื่อตรวจจับการพึ่งพาการสร้างแพ็กเกจโดยไม่ตั้งใจSUSEก็ใช้วิธีที่คล้ายกันกับโปรแกรม สร้าง แพ็กเกจของตน Fedora , Red Hatและดิสทริบิวชันที่ใช้ RPM อื่นๆ อีกมากมาย สร้างRPM ทั้งหมดโดยใช้เครื่องมือ chroot เช่นmock
เซิร์ฟเวอร์ FTPจำนวนมากสำหรับระบบ POSIX ใช้กลไก chroot เพื่อจำกัดการเข้าถึงของไคลเอนต์ FTP ที่ไม่น่าเชื่อถือ โดยอาจทำได้โดยการสร้างกระบวนการลูกเพื่อจัดการกับการเชื่อมต่อที่เข้ามา จากนั้นจึงใช้ chroot กับกระบวนการลูก (เพื่อหลีกเลี่ยงการต้องใส่ไลบรารีที่จำเป็นสำหรับการเริ่มต้นโปรแกรมลงใน chroot)
หากเปิดใช้งานการแยกสิทธิ์แล้ว ดีมอน OpenSSHจะ chroot กระบวนการช่วยเหลือที่ไม่มีสิทธิ์เข้าไปในไดเร็กทอรีว่างเพื่อจัดการการรับส่งข้อมูลเครือข่ายก่อนการตรวจสอบสิทธิ์สำหรับไคลเอ็นต์แต่ละราย ดีมอนยังสามารถแซนด์บ็อกซ์เซสชัน SFTP และเชลล์ใน chroot ได้อีกด้วย (ตั้งแต่เวอร์ชัน 4.9p1 เป็นต้นไป) [ 19 ]
ChromeOSสามารถใช้ chroot เพื่อเรียกใช้อินสแตนซ์ Linux โดยใช้Crouton [ 20 ]ซึ่งทำให้ระบบปฏิบัติการที่มีขนาดเล็กสามารถเข้าถึงทรัพยากรฮาร์ดแวร์ได้ ผลกระทบด้านความปลอดภัยที่เกี่ยวข้องในบทความนี้ใช้ได้กับกรณี นี้
ระบบไฟล์เสมือนและไฟล์การกำหนดค่าของเคอร์เนลโฮสต์ Linux
เพื่อให้สภาพแวดล้อม chroot ใน Linux สามารถใช้งานได้ ระบบไฟล์เสมือนของเคอร์เนลและไฟล์การกำหนดค่าต่างๆ จะต้องถูกเมานต์/คัดลอกจากโฮสต์ไปยัง chroot ด้วยเช่นกัน
# ติดตั้งระบบไฟล์เสมือนเคอร์เนลTARGETDIR = "/mnt/chroot" mount -t proc proc $TARGETDIR /proc mount -t sysfs sysfs $TARGETDIR /sys mount -t devtmpfs devtmpfs $TARGETDIR /dev mount -t tmpfs tmpfs $TARGETDIR /dev/shm mount -t devpts devpts $TARGETDIR /dev/pts# คัดลอก /etc/hosts /bin/cp -f /etc/hosts $TARGETDIR /etc/# คัดลอก /etc/resolv.conf /bin/cp -f /etc/resolv.conf $TARGETDIR /etc/resolv.conf# เชื่อมโยง /etc/mtab chroot $TARGETDIR rm /etc/mtab 2 > /dev/null chroot $TARGETDIR ln -s /proc/mounts /etc/mtab ดูเพิ่มเติม
ลิงก์ภายนอก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ชรูท
chroot chroot เป็น คำสั่ง เชลล์ และ ระบบเรียกใช้งาน บน ระบบปฏิบัติการ Unix และ ระบบปฏิบัติการ ที่คล้าย Unix ซึ่งจะเปลี่ยน ไดเร็กทอรีราก ที่ปรากฏ...
ประวัติศาสตร์
ระบบ เรียก chroot ถูกนำมาใช้ระหว่างการพัฒนา Unix เวอร์ชัน 7 ในปี 1979 แหล่งข้อมูลหนึ่งระบุว่า Bill Joy เพิ่มระบบนี้เมื่อวันที่ 18 มีนาคม 1982 – 17 เดือนก่อนที่ 4.
การใช้งาน
สภาพแวดล้อม chroot สามารถใช้เพื่อสร้างและโฮสต์ สำเนา เสมือน แยกต่างหาก ของระบบซอฟต์แวร์ ซึ่งอาจมีประโยชน์สำหรับ:
ข้อจำกัด
กลไก chroot ไม่ได้มีจุดประสงค์เพื่อป้องกันการดัดแปลงโดยเจตนาโดยผู้ใช้ที่มีสิทธิ์พิเศษ (root) ข้อยกเว้นที่สำคัญคือ NetBSD ซึ่งถือว่า chroot เป็นกลไกด้านความปลอดภัยและไม่มีการหลบหนีใดๆ ที่เป็นที่รู้จัก ในระบบส่วนใหญ่ บริบท chroot จะไม่เรียงซ้อนกันอย่างถูกต้อง...