บริการเริ่มทำงาน ไคลเอนต์เชื่อมต่อ และไม่เคยมีเส้นทางปรากฏบนฝั่งเซิร์ฟเวอร์ หรือเดมอนปฏิเสธที่จะเริ่มและระบุคำสั่งที่มันรันไม่ได้ ทั้งสองผลลัพธ์ตามบรรทัดสามบรรทัดเดียวกัน ซึ่งมักถูกคัดลอกมาพร้อมกันจากคู่มือการเสริมความแข็งแกร่ง: เปลี่ยนไปใช้บัญชีที่ไม่มีสิทธิพิเศษ ปล่อยกลุ่ม และเปลี่ยนรูทของระบบไฟล์ มีเพียงหนึ่งในสามที่ซ่อนไฟล์ และมีเพียงหนึ่งในนั้น ถอดสิทธิ์ในการแก้ไขตารางเส้นทาง การแยกออกจากกันคือวิธีที่คุณจะรู้ว่าจริง ๆ แล้วต้องการบรรทัดไหน

สิ่งที่คุกนำออกไปแต่เดมอนยังต้องการ

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

การเปลี่ยนไปใช้บัญชีที่ไม่มีสิทธิพิเศษเป็นการจำกัดแยกต่างหาก กระบวนการที่สละ root อาจไม่สามารถแก้ไขเส้นทางหรือยกอินเทอร์เฟซขึ้นได้ แม้ไบนารีจะอยู่ตรงนั้น จึงต้องวินิจฉัยความล้มเหลวทั้งสองแยกกัน

สามเงื่อนไขตัดสินว่าต้องการการแก้ไขแบบไหน

เงื่อนไขแรกคือวิธีที่บิลด์ของคุณติดตั้งเส้นทาง เวอร์ชันใหม่ของ OpenVPN กำหนดค่าอินเทอร์เฟซและตารางเส้นทางภายในโปรเซส ขณะที่แพ็กเกจเก่าและการตั้งค่าเฉพาะต้องพึ่งพาเครื่องมือภายนอกหรือสคริปต์ up และ down ถ้าล็อกระบุชื่อคำสั่ง แสดงว่ามีเครื่องมือภายนอกเกี่ยวข้องและคุกกำลังซ่อนมันไว้ ถ้าล็อกแสดงข้อผิดพลาดเรื่องสิทธิ์แทน ปัญหาอยู่ที่บัญชี

ประการที่สองคือการบำรุงรักษา คุกที่มีไบนารีคัดลอกไว้ต้องรีเฟรชทุกครั้งที่แพ็กเกจที่ให้ไบนารีเหล่านั้นได้รับการอัปเกรด ไม่เช่นนั้นการอัปเกรดครั้งแรกจะทิ้งอุโมงค์ที่เสียไว้เบื้องหลัง ประการที่สามคือการควบคุมเฉพาะเจาะจงนั้นต้องการ chroot จริงหรือไม่ หากข้อกำหนดจริง ๆ แล้วเกี่ยวกับการแยกสิทธิ์ การเปลี่ยนบัญชีอาจเพียงพอโดยลำพัง

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate 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 เพียงอย่างเดียว ขั้นตอนที่อุโมงค์ขาดคือจุดที่บ่งชี้ขอบเขต และคุณหลีกเลี่ยงการสร้างคุกใหม่ที่ไม่เคยเป็นสาเหตุ

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

บทความที่เกี่ยวข้อง