จำลอง chroot ด้วย unshare


13

ฉันพยายามเขียน bootstrapper เพื่อแจกจ่ายลินุกซ์จากแหล่งที่น้อยที่สุด

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

นี่คือเหตุผลที่ fakechroot (1) fakeroot (1) chroot (1) ไม่ใช่สิ่งที่ฉันกำลังมองหา

เป็นไปได้หรือไม่ที่จะปลอม / ใช้ unshare (1) และ / bin / sh?


AFAICS unshare(1)เป็นเสื้อคลุมบาง ๆ รอบคอลเลกชันของการเรียกใช้ระบบแบบรูทเท่านั้นและ (อย่างน้อยใน Fedora 18) ไม่ใช่ SUID ดังนั้นฉันสงสัยอย่างมากว่ามันจะทำงานกับผู้ใช้ที่ไม่ใช่รูท
vonbrand

โอ้นั่นเป็นความอัปยศ ฉันอยู่ภายใต้ความประทับใจ unshare คือ setuid ฉันเดาว่าฉันสบายดีกับการเป็นคนรูต
Rooties

4
ด้วยการเปิดตัวเคอร์เนล Linux 3.8 ใหม่คุณสามารถใช้คุณลักษณะเนมสเปซเป็นแบบไม่ใช้ราก แต่นี่คือสิ่งใหม่ที่มันวาว: คุณต้องมี namespace uid ก่อนและ unshare ยังไม่รองรับ และการกระทำของคุณจะถูก จำกัด
BatchyX

คำตอบ:


5

ใช่. หากเคอร์เนลของคุณรองรับ user_namespaces (และเปิดใช้งาน)คุณสามารถ "จำลองราก" ผู้ใช้ก่อนซึ่งจะได้รับสิทธิ์ในการเรียกใช้chroot(ในฐานะผู้ใช้รูทจริง) (ซึ่งก่อนหน้านี้จำเป็นต้องถูก จำกัด เฉพาะกับผู้ใช้รูทเนื่องจากมีความเป็นไปได้ในการเพิ่มสิทธิ์โดยผู้ใช้ปกติ (พูดผ่าน set-UID-root ไบนารีและไลบรารีที่กำหนดเองในไดเรกทอรี chroot))

คุณสามารถลองในเปลือกของคุณ:

unshare --user --map-root-user --mount-proc --pid --fork
/sbin/chroot ......
su - user1

ตัวเลือกที่ไม่รู้จัก '--map-root-user'
Zibri

1
@ Zibri มันใช้ได้กับฉันแล้วด้วยunshareจากutil-linux-2.30.2-alt1
imz - Ivan Zakharyaschev

1

เพียงแค่รวมหรือติดตั้ง fakeroot / fakechroot เนื่องจากมันเหมาะสมอย่างยิ่งสำหรับเรื่องนี้ ดู cdebootstrap เพื่อหาแรงบันดาลใจ

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