Access Server ไม่สนใจสคริปต์ post_auth ที่คุณแก้ไขบนดิสก์
การแก้ไฟล์ post_auth บนดิสก์ไม่เกิดผล: Access Server รันสำเนาในฐานข้อมูลการกำหนดค่า ตามเส้นทางการตัดสินใจและคำสั่ง sacli
mac.py ที่แก้แล้วแต่ไม่เปลี่ยนอะไรคืออาการแรกที่พบบ่อย ไฟล์บนดิสก์ไม่ใช่สิ่งที่ Access Server รัน บริการยืนยันตัวตนโหลดสคริปต์จากฐานข้อมูลการกำหนดค่าของเซิร์ฟเวอร์ และสำเนาที่เก็บไว้นั้นคือสิ่งที่ตัดสินการเข้าสู่ระบบ จนกว่าค่าที่เก็บไว้จะถูกแทนที่ ทุกการทดสอบพิสูจน์เพียงว่าสคริปต์เก่ายังทำงานอยู่
สามเงื่อนไขกำหนดงาน: ค่านั้นเคยถูกใส่ในฐานข้อมูลการกำหนดค่าหรือไม่ บริการได้รับคำสั่งให้โหลดใหม่หรือไม่ และโค้ดที่คุณแก้ทำงานจริงในทุกการเชื่อมต่อหรือไม่ แต่ละอย่างมีอาการต่างกัน และการแก้ผิดจุดก็ทำให้เสียเวลาช่วงบำรุงรักษา
ไฟล์เป็นต้นทาง ไม่ใช่สำเนาที่ทำงาน
Access Server เก็บสคริปต์ post-auth ไว้ใต้คีย์ auth.module.post_auth_script การแก้ไฟล์อัปเดตเพียงสำเนาทำงานของคุณเท่านั้น เดมอนอ่านค่าที่เก็บไว้ การแก้จึงมองไม่เห็นจนกว่าคุณจะลบรายการเก่าและวางไฟล์ใหม่แทนที่ ค่าที่เก็บไว้นั้นคือสำเนาเดียวที่บริการยืนยันตัวตนตรวจสอบ
อ่านค่าก่อนแก้ หากตรงกับไฟล์ที่คุณแก้แล้ว ปัญหาไม่ใช่การจัดเก็บและให้ข้ามไปที่คำถามเรื่องขอบเขต หากแสดงเวอร์ชันเก่ากว่า การแก้ไม่เคยไปถึงบริการ
./sacli -k auth.module.post_auth_script ConfigGetแทนที่สำเนาที่เก็บไว้ แล้วจึงนำไปใช้
การลบก่อนเขียนไม่ใช่การตกแต่ง ConfigPut กับ --value_file แทนที่ค่าในขั้นตอนเดียว และการ ConfigDel ก่อนทำให้เป็นไปไม่ได้ที่จะเหลือรายการเก่าหรือเสียหาย เก็บสำเนาสคริปต์ที่ใช้งานได้ไว้นอกโฟลเดอร์สคริปต์ก่อนเริ่ม
./sacli -k auth.module.post_auth_script ConfigDel
# store the file, then apply it
./sacli -k auth.module.post_auth_script --value_file=/root/post_auth.py ConfigPut
./sacli startsacli start นำการกำหนดค่าที่เปลี่ยนแปลงไปใช้กับบริการภายใน และนั่นคือสิ่งที่ทำให้สคริปต์ใหม่มีผล ไม่เหมือนกับการรีสตาร์ตเครื่องทั้งหมดหรือเดมอน และไม่ควรแทนที่ด้วยสิ่งนั้น เว้นแต่การเปลี่ยนแปลงของคุณต้องการ
ใช้เส้นทางแบบเต็มสำหรับไฟล์ค่าและยืนยันว่า root อ่านได้ เส้นทางที่แก้ได้จากเชลล์ของคุณแต่ไม่ได้จากบัญชีบริการจะให้ค่าที่เก็บไว้ซึ่งดูเหมือนถูกต้องใน ConfigGet และล้มเหลวในการเข้าสู่ระบบครั้งแรก ตรวจผลลัพธ์ที่เก็บไว้อีกครั้งหลัง sacli start ไม่ใช่ก่อนหน้า
ขอบเขตโมดูลหรือต่อการเชื่อมต่อ: คำสั่งค้นหาควรอยู่ที่ใด
Python รันคำสั่งระดับโมดูลเพียงครั้งเดียวเมื่อโหลดสคริปต์ ดังนั้นคำสั่งค้นหาฐานข้อมูลที่เขียนไว้บนสุดของไฟล์จะอ่านตารางตอนโหลดและเก็บคำตอบนั้นไว้สำหรับทุกการเชื่อมต่อถัดไป นี่คือเหตุผลที่สองที่ทำให้การแก้ดูเหมือนไม่ทำอะไร: โค้ดทำงาน แต่ไม่ใช่เวลาที่คุณคาดหวัง
วางคำสั่งค้นหาไว้ในตัวจัดการ post_auth เพื่อให้ทำงานทุกครั้งที่ยืนยันตัวตน คงลายเซ็นที่บันทึกไว้ ปรับผลการยืนยันตัวตนที่ตัวจัดการได้รับ และคืนวัตถุเดิมแทนตัวเลขเปล่า
เก็บการจัดการการเชื่อมต่อไว้ในตัวจัดการด้วย การเชื่อมต่อที่เปิดตอนนำเข้าอาจถูกเซิร์ฟเวอร์ปิดก่อนผู้ใช้คนแรกเข้าสู่ระบบ และข้อผิดพลาดที่เกิดขึ้นดูเหมือนข้อมูลรับรองที่ถูกปฏิเสธมากกว่าสคริปต์ที่เสีย
สองเส้นทางปฏิเสธ เจ้าของหนึ่งราย
หากการตัดสินใจเป็นการค้นหาภายใน เครื่องจัดการ Python เป็นเจ้าของผลลัพธ์ หากเป็นการตรวจ HTTP ภายนอก ให้สถานะออกของคำสั่งเป็นตัวนำคำตอบ: ตัวห่อที่ออกด้วยรหัสไม่เป็นศูนย์จะปฏิเสธการเข้าสู่ระบบ และสถานะของคำสั่งสุดท้ายกลายเป็นสถานะของสคริปต์โดยไม่ต้องมี exit ชัดเจน
เก็บความลับไว้นอกรายการโปรเซส ไฟล์ที่ root อ่านได้หรือค่าสภาพแวดล้อมที่บริการส่งต่อปลอดภัยกว่าอาร์กิวเมนต์ที่ผู้ใช้ภายในเครื่องใดก็อ่านได้จาก ps ปักหมุดปลายทางไว้ในตัวแปรก่อนเรียก เพื่อให้พิมพ์ผิดล้มเหลวตอนกำหนดค่า ไม่ใช่ตอนมีคนเข้าสู่ระบบ หมุนเวียนความลับนั้นเหมือนข้อมูลรับรองอื่น ๆ
เลือกเจ้าของหนึ่งรายต่อการตรวจสอบ สคริปต์ที่ทั้งสอบถามฐานข้อมูลและเรียกบริการ HTTP ต้องมีกฎลำดับความสำคัญที่ประกาศไว้สำหรับกรณีที่ทั้งสองขัดกัน มิฉะนั้นเหตุผลการปฏิเสธในบันทึกจะไม่ตรงกับสิ่งที่บอกผู้ใช้
นำไปใช้โดยไม่ล็อกผู้ดูแลออก
มาตรการสองอย่างทำให้การเปลี่ยนแปลงย้อนกลับได้: บัญชีผู้ดูแลที่สองซึ่งไม่ขึ้นกับสคริปต์ และสำเนาที่ดีที่รู้จักซึ่งเก็บไว้นอกโฟลเดอร์สคริปต์ นำการเปลี่ยนแปลงไปใช้ในช่วงบำรุงรักษา แล้วดูกาารเข้าสู่ระบบทดสอบหนึ่งครั้งและการปฏิเสธโดยเจตนาหนึ่งครั้งก่อนตัดการเชื่อมต่อ หากบันทึกแสดงข้อผิดพลาดทางไวยากรณ์แทนการตัดสินยืนยันตัวตน สคริปต์ที่เก็บไว้เสียและทุกการเข้าสู่ระบบจะล้มเหลว
สองเงื่อนไขบอกให้รอ: คุณอ่านไฟล์ค่าในฐานะ root ไม่ได้ หรือไม่มีทางที่สองเข้าสู่หน้าจอผู้ดูแล ทั้งสองทำให้การเปลี่ยนแปลงเล็ก ๆ กลายเป็นการล็อกออก และไม่มีอย่างใดคุ้มค่าที่จะทดสอบบนเซิร์ฟเวอร์ผลิตจริงตอนสิ้นวัน เอกสาร Access Server ครอบคลุมอินเทอร์เฟซ post-auth และฟิลด์ที่รองรับ