จะเลิกใช้ chroot หรือคัดลอก iproute2 เข้าคุกดี?
คุกที่ไม่สมบูรณ์จะล้มเหลวหลังเริ่มทำงาน ไม่ใช่ตอนบูต เลือกระหว่างผ่อนปรนการเสริมความแข็งแกร่งกับการคัดลอกไบนารีและไลบรารีเข้าไปในรูทใหม่
บริการเริ่มทำงาน ไคลเอนต์เชื่อมต่อ และไม่เคยมีเส้นทางปรากฏบนฝั่งเซิร์ฟเวอร์ หรือเดมอนปฏิเสธที่จะเริ่มและระบุคำสั่งที่มันรันไม่ได้ ทั้งสองผลลัพธ์ตามบรรทัดสามบรรทัดเดียวกัน ซึ่งมักถูกคัดลอกมาพร้อมกันจากคู่มือการเสริมความแข็งแกร่ง: เปลี่ยนไปใช้บัญชีที่ไม่มีสิทธิพิเศษ ปล่อยกลุ่ม และเปลี่ยนรูทของระบบไฟล์ มีเพียงหนึ่งในสามที่ซ่อนไฟล์ และมีเพียงหนึ่งในนั้น ถอดสิทธิ์ในการแก้ไขตารางเส้นทาง การแยกออกจากกันคือวิธีที่คุณจะรู้ว่าจริง ๆ แล้วต้องการบรรทัดไหน
สิ่งที่คุกนำออกไปแต่เดมอนยังต้องการ
การเปลี่ยนรูทเกิดขึ้นหลังเริ่มทำงาน เดมอนจึงเก็บทุกสิ่งที่เปิดไว้แล้วและสูญเสียทุกสิ่งที่จะเปิดในภายหลัง ผู้ช่วยใดที่การเชื่อมต่อรันหลังจากจุดนั้นต้องมีอยู่ภายในรูทใหม่ พร้อมกับไลบรารีที่แชร์ซึ่งมันโหลด คุกที่สร้างจากไฟล์กำหนดค่าและใบรับรองไม่มีทั้งสองอย่าง
การเปลี่ยนไปใช้บัญชีที่ไม่มีสิทธิพิเศษเป็นการจำกัดแยกต่างหาก กระบวนการที่สละ root อาจไม่สามารถแก้ไขเส้นทางหรือยกอินเทอร์เฟซขึ้นได้ แม้ไบนารีจะอยู่ตรงนั้น จึงต้องวินิจฉัยความล้มเหลวทั้งสองแยกกัน
สามเงื่อนไขตัดสินว่าต้องการการแก้ไขแบบไหน
เงื่อนไขแรกคือวิธีที่บิลด์ของคุณติดตั้งเส้นทาง เวอร์ชันใหม่ของ OpenVPN กำหนดค่าอินเทอร์เฟซและตารางเส้นทางภายในโปรเซส ขณะที่แพ็กเกจเก่าและการตั้งค่าเฉพาะต้องพึ่งพาเครื่องมือภายนอกหรือสคริปต์ up และ down ถ้าล็อกระบุชื่อคำสั่ง แสดงว่ามีเครื่องมือภายนอกเกี่ยวข้องและคุกกำลังซ่อนมันไว้ ถ้าล็อกแสดงข้อผิดพลาดเรื่องสิทธิ์แทน ปัญหาอยู่ที่บัญชี
ประการที่สองคือการบำรุงรักษา คุกที่มีไบนารีคัดลอกไว้ต้องรีเฟรชทุกครั้งที่แพ็กเกจที่ให้ไบนารีเหล่านั้นได้รับการอัปเกรด ไม่เช่นนั้นการอัปเกรดครั้งแรกจะทิ้งอุโมงค์ที่เสียไว้เบื้องหลัง ประการที่สามคือการควบคุมเฉพาะเจาะจงนั้นต้องการ chroot จริงหรือไม่ หากข้อกำหนดจริง ๆ แล้วเกี่ยวกับการแยกสิทธิ์ การเปลี่ยนบัญชีอาจเพียงพอโดยลำพัง
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
คุกที่ใช้งานได้ต้องมีอะไรบ้าง
คุกที่รันคำสั่งต้องมีไบนารี ทุกไลบรารีที่มันลิงก์ด้วย และโหนดอุปกรณ์ใดที่เดมอนเปิดช้า คัดลอกชิ้นส่วนและทดสอบโดยไม่มี VPN ในภาพ:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
คำสั่งแรกแสดงรายการการพึ่งพา และนั่นคือสิ่งที่ผู้คนข้ามไป ไบนารีที่คัดลอกซึ่งหาไลบรารีไม่พบจะล้มเหลวด้วยข้อความต่างจากไบนารีที่หายไป และทั้งสองดูเหมือนความผิดพลาดของ OpenVPN เมื่ออ่านจากฝั่งไคลเอนต์ การรันคำสั่งด้วยมือในคุกจะจำลองความล้มเหลวโดยไม่ต้องรีสตาร์ตบริการ
คัดลอกการกำหนดค่า ใบรับรอง และ CRL ใด ๆ เข้าไปในคุกด้วย เพราะไฟล์ที่เดมอนคาดว่าจะอ่านซ้ำหลังเริ่มทำงานจะหาไม่พบเมื่อรูทเปลี่ยน บันทึกสิ่งที่คัดลอกไว้ เนื่องจากการอัปเกรดแพ็กเกจเครือข่ายครั้งต่อไปจะแทนที่ต้นฉบับและทิ้งคุกไว้บนสำเนาเก่า
ลดการเสริมความแข็งแกร่งแทน
ถ้าคุกมีอยู่เพียงเพราะคู่มือบอกไว้ การลบบรรทัดนั้นบรรทัดเดียวโดยคงข้อจำกัดของบัญชีไว้เป็นผลลัพธ์ที่ปกป้องได้ เดมอนยังคงมุมมองระบบไฟล์ของตนและหลุดพ้นจากปัญหา และการลดสิทธิ์ยังคงถอด root ออกจากโปรเซสที่อายุยืน
จดบันทึกว่าอะไรยังเหลืออยู่ และเพราะอะไร การกำหนดค่าที่สูญเสียการควบคุมไปอย่างเงียบ ๆ โดยไม่มีบันทึกคือวิธีที่การเสริมความแข็งแกร่งคลาดเคลื่อน และการตรวจสอบครั้งถัดไปจะถามว่าบรรทัดนั้นหายไปไหน
แบ่งสามบรรทัดก่อนเลือก
คัดลอกการกำหนดค่า ปิดใช้งานไดเรกทีฟทั้งสาม และยืนยันว่าไคลเอนต์เชื่อมต่อและเส้นทางที่คาดไว้ปรากฏ จากนั้นเปิดใช้งานเฉพาะบรรทัดบัญชีอีกครั้ง แล้วจึงเปิด chroot เพียงอย่างเดียว ขั้นตอนที่อุโมงค์ขาดคือจุดที่บ่งชี้ขอบเขต และคุณหลีกเลี่ยงการสร้างคุกใหม่ที่ไม่เคยเป็นสาเหตุ
เมื่อมันเปลี่ยนเส้นทางได้อีกครั้ง ให้รันเซสชันไคลเอนต์หนึ่งครั้งด้วยระดับรายละเอียดที่สูงขึ้นและอ่านบรรทัดที่ระบุคำสั่งหรือสิทธิ์ที่ล้มเหลว บรรทัดนั้นมีค่ามากกว่าการหมดเวลาที่ไคลเอนต์รายงานในที่สุด