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

มองทั้งหมดเป็นธุรกรรมเดียวที่มีห้าจุดตรวจสอบ และทำให้แต่ละจุดตรวจสอบปฏิเสธที่จะดำเนินการต่อด้วยตัวเอง

แก้ไขอินพุตก่อนแตะระบบไฟล์

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

ปฏิเสธตัวแปรว่างตั้งแต่เนิ่น ๆ $DEVICE ที่ไม่ได้ตั้งค่าและขยายเป็นความว่างเปล่าจะเปลี่ยน install -m 400 $KEY /etc/openvpn/client/ ให้เป็นสำเนาที่มุ่งไปยังไดเรกทอรี และความล้มเหลวจะมาถึงภายหลังในรูปของบริการที่อ่านคีย์ของตัวเองไม่ได้

ประกอบชุดโปรไฟล์ในไดเรกทอรีเตรียมการ

สร้างชุดที่สมบูรณ์ในที่ส่วนตัวก่อน: โปรไฟล์, CA, ใบรับรองไคลเอนต์, คีย์ และตัวช่วยใด ๆ ที่โปรไฟล์เรียกใช้ คัดลอกด้วย install -m 400 -o root -g root เพื่อให้สิทธิ์ถูกตั้งตั้งแต่สร้าง ไม่ใช่ทีหลัง จากนั้นตรวจสอบการอ้างอิงภายในโปรไฟล์ เพราะบรรทัด ca หรือ key แบบสัมพัทธ์จะถูกแก้เทียบกับไดเรกทอรีทำงานของยูนิตเมื่อบริการเริ่ม ไม่ควรเขียนสิ่งใดลงไดเรกทอรีที่ใช้งานจริงจนกว่าชุดทั้งหมดจะผ่านการตรวจสอบ

บันทึกลายนิ้วมือที่ไม่เป็นความลับของสิ่งที่การรันนี้สร้างขึ้น เช่น sha256sum office.conf ที่เก็บไว้ข้างเครื่องหมายเวอร์ชัน ค่าเดียวนี้เองที่ทำให้การรันซ้ำแยกแยะการอัปเดตจากการไม่ทำอะไรเลยได้

สลับแบบอะตอมและเก็บชุดก่อนหน้าไว้

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

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

เปิดใช้งานเจ้าของรายเดียวและพิสูจน์

เลือกเส้นทางการเปิดใช้งานหนึ่งเส้นทาง ไม่ว่าจะเป็นอินสแตนซ์ systemd หรือ NetworkManager และใช้อย่างสม่ำเสมอ การเริ่มกระบวนการ openvpn ที่ไม่ได้จัดการข้างยูนิตที่เปิดใช้งานอยู่จะให้อุโมงค์สองเส้น การอัปเดต DNS ที่แข่งขันกัน และไม่มีคำตอบชัดเจนว่าคำสั่งหยุดเล็งไปที่เส้นใด หลังการเปิดใช้งาน ให้ตรวจ systemctl is-active openvpn-client@office จากนั้นเส้นทางไปยังคำนำหน้าปลายทาง จากนั้น resolvectl status สำหรับตัวแก้ไขชื่อที่อุโมงค์ติดตั้งไว้ จบด้วยการเข้าถึงทรัพยากรหนึ่งอย่างที่อุโมงค์มีไว้เพื่อมัน

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

การรันซ้ำและการเลิกใช้เป็นเวิร์กโฟลว์ที่แยกจากกัน

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

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

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

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