จำกัดการเข้าสู่ระบบ OpenVPN ให้เหลือกลุ่มเดียวด้วยนโยบาย PAM
บริการ PAM เฉพาะสามารถรับเฉพาะสมาชิกของกลุ่ม VPN โดยไม่แตะต้องกฎการเข้าสู่ระบบทั้งระบบ ชี้ปลั๊กอิน auth-pam ไปที่บริการนั้นและทดสอบผลลัพธ์
ให้ทุกบัญชีสามารถเข้าสู่ระบบได้ตามปกติ แต่ให้ใช้ VPN ได้เพียงกลุ่มเดียว PAM สามารถแสดงความแตกต่างนั้นได้โดยไม่ต้องมีที่เก็บรหัสผ่านที่สอง และปลั๊กอิน OpenVPN สามารถชี้ไปยังบริการที่มีเฉพาะการตรวจสอบที่คุณตั้งใจไว้ กลอุบายคือการสร้างบริการนั้นโดยไม่สืบทอดสแตกทั้งระบบโดยไม่ตั้งใจ
แนวทางนี้อธิบายทีละขั้น เริ่มจากชื่อบริการของปลั๊กอิน สร้างนโยบาย แล้วทดสอบผลลัพธ์สามอย่างที่สำคัญ ได้แก่ สมาชิก คนนอกที่มีรหัสผ่านถูกต้อง และข้อมูลรับรองที่ไม่ดี
ทำไมต้องมีบริการ PAM แยก
ปลั๊กอิน auth-pam รับชื่อบริการเป็นอาร์กิวเมนต์ ชื่อนั้นเลือกไฟล์ภายใต้ /etc/pam.d และสแตกในไฟล์นั้นคือสิ่งที่ทำงานระหว่างการเข้าสู่ระบบ VPN หากคุณส่งชื่อเดียวกับการเข้าสู่ระบบทั้งระบบ คุณจะสืบทอดทุกการตัดสินใจในสแตกนั้น รวมถึงสิ่งที่เพิ่มเข้ามาทีหลังด้วยเหตุผลที่ไม่เกี่ยวข้อง
ให้สร้างบริการเฉพาะแทน เริ่มจากสแตกที่ใช้งานได้ซึ่งตรวจสอบสิทธิ์กับ backend ที่ต้องการอยู่แล้ว เช่น ไฟล์รหัสผ่านภายในเครื่อง SSSD หรือบริการไดเรกทอรี แล้วเพิ่มกฎความเหมาะสม การคัดลอกสองบรรทัดลงในไฟล์ว่างเป็นข้อผิดพลาดที่พบบ่อย: การหมดอายุรหัสผ่าน การล็อกบัญชี และการตรวจสอบอื่นอาจอยู่ในสแตกที่คุณไม่ได้คัดลอก
การแยกบริการยังจำกัดขอบเขตความเสียหาย กฎเฉพาะ VPN ในสแตกที่ใช้ร่วมกันอาจปฏิเสธการเข้าถึง SSH หรือคอนโซลสำหรับทุกคน ซึ่งเปลี่ยนการเปลี่ยนแปลงการเข้าถึงให้กลายเป็นความขัดข้อง
การเขียนกฎของกลุ่ม
การตรวจสอบความเหมาะสมอยู่ในขั้นบัญชี หลังจากตรวจสอบข้อมูลรับรองแล้ว กฎเช่น account required pam_succeed_if.so user ingroup vpnusers อนุญาตให้ประมวลผลต่อไปได้เฉพาะเมื่อผู้ใช้ที่ผ่านการตรวจสอบเป็นสมาชิกของกลุ่มนั้น
บรรทัดนั้นเป็นเพียงส่วนย่อย ไม่ใช่บริการที่สมบูรณ์ ให้รวมไว้ในตำแหน่งที่ทุกเส้นทางที่ยอมรับไปถึง และตรวจสอบแฟล็กควบคุมรอบๆ การควบคุม sufficient หรือการกระโดดก่อนหน้าในสแตกอาจสิ้นสุดการประมวลผลก่อนที่กฎของคุณจะทำงาน ซึ่งเปลี่ยนข้อจำกัดให้กลายเป็นเพียงข้อเสนอ
อย่าเพิ่ม use_uid ตามนิสัย หากไม่มี โมดูลจะประเมินผู้ใช้ที่กำลังตรวจสอบสิทธิ์ หากมี โมดูลจะประเมินบัญชีที่กระบวนการ OpenVPN ทำงานอยู่ ซึ่งโดยปกติคือ root หรือบัญชีบริการ จึงไม่ใช่บุคคลที่เข้าสู่ระบบ
การเป็นสมาชิกกลุ่มมาจากการแก้ไขข้อมูลระบุตัวตนของระบบ ไม่ใช่ชื่อที่คุณรู้จัก สำหรับผู้ใช้ไดเรกทอรี ให้ยืนยันว่า backend เดียวกันตอบคำถามกลุ่มสำหรับผู้ใช้รายนั้น เพราะกลุ่มภายในเครื่องที่มีชื่อคุ้นเคยเป็นวัตถุที่แตกต่างจากกลุ่มไดเรกทอรีชื่อเดียวกัน
กับดักของลำดับและตัวตน
วางกฎของกลุ่มไว้หลังสแตกการตรวจสอบสิทธิ์และหลังการตรวจสอบที่ยังต้องใช้บังคับ แต่ก่อนหรือข้างการตรวจสอบบัญชีที่คุณเก็บไว้ PAM ประเมินโมดูลตามลำดับไฟล์ และค่าควบคุมในแต่ละบรรทัดเป็นตัวตัดสินว่าความล้มเหลวเป็นที่สิ้นสุดหรือไม่
ระวังสแตกซ้ำ รูปแบบที่พบบ่อยคือ include ที่มีกฎบัญชีอยู่แล้ว ตามด้วยกฎกลุ่มของคุณเอง ซึ่งสร้างการตัดสินใจสองอย่างในจุดที่คุณคาดว่าจะมีเพียงหนึ่ง อ่านไฟล์ที่ถูกรวม ไม่ใช่เฉพาะไฟล์ที่คุณแก้ไข วิธีดูลำดับที่มีผลจริงอย่างรวดเร็วคืออ่านไฟล์จากบนลงล่างและจดค่าควบคุมแต่ละค่า
เก็บข้อกำหนดการรับเข้าอื่นๆ ไว้เหมือนเดิม รหัสผ่านที่สำเร็จไม่แทนที่การตรวจสอบใบรับรอง ปัจจัยที่สอง หรือการอนุญาตหลังการเชื่อมต่อ และนโยบายนี้ไม่ใช่สิ่งทดแทนใดๆ เหล่านั้น มันเพียงตัดสินว่าบัญชีมีสิทธิ์ได้รับการพิจารณาสำหรับการเข้าถึง VPN หรือไม่
การทดสอบสมาชิก คนนอก และรหัสผ่านผิด
ทดสอบสามกรณีก่อนถือว่านโยบายเสร็จสมบูรณ์ สมาชิกเชื่อมต่อได้สำเร็จ บัญชีที่ถูกต้องนอกกลุ่มตรวจสอบรหัสผ่านได้แต่ถูกปฏิเสธการเข้าถึง VPN รหัสผ่านผิดสำหรับบัญชีใดก็ตามจะถูกปฏิเสธในขั้นตรวจสอบสิทธิ์ ไม่ใช่โดยกฎของกลุ่ม
ดูข้อผิดพลาดที่ไคลเอนต์มองเห็นและบันทึกของเซิร์ฟเวอร์ร่วมกัน เพราะความล้มเหลวทั้งสองอาจดูคล้ายกันสำหรับผู้ที่เชื่อมต่อ ความแตกต่างนี้สำคัญต่อการสนับสนุน: คนนอกที่มีรหัสผ่านถูกต้องต้องการเปลี่ยนกลุ่ม ในขณะที่รหัสผ่านผิดต้องรีเซ็ตข้อมูลรับรอง
เปิดเซสชันที่สองค้างไว้ขณะแก้ไข PAM และตรวจสอบการเข้าสู่ระบบ SSH ปกติหลังการเปลี่ยนแปลงด้วย จุดมุ่งหมายของบริการเฉพาะคือการเข้าสู่ระบบของระบบควรไม่ได้รับผลกระทบ และวิธีเดียวที่จะรู้ได้คือทดสอบ
หากมีบางอย่างเสีย ให้คืนไฟล์บริการก่อนหน้าจากสำเนา กฎที่คุณต้องการพูดได้ง่ายๆ: การเป็นสมาชิกทำให้บัญชีมีสิทธิ์เข้าถึง VPN และการตรวจสอบที่จำเป็นอื่นๆ ทั้งหมดยังคงใช้บังคับ