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

ลายเซ็นรับรองไฟล์เก็บถาวร ไม่ได้รับรองโค้ดข้างใน

APT ตรวจสอบเมทาดาทาของรีโพซิทอรีที่ลงลายเซ็น แล้วเชื่อถือเช็กซัมที่อยู่ในเมทาดาทานั้นสำหรับแพ็กเกจที่ดาวน์โหลดมา สิ่งที่พิสูจน์คือไฟล์เก็บถาวรตรงกับสิ่งที่ผู้ถือคีย์เผยแพร่ และไม่ได้บอกอะไรเกี่ยวกับโค้ดข้างใน แพ็กเกจที่ลงลายเซ็นถูกต้องยังอาจมีสคริปต์ของผู้ดูแลที่ไม่ปลอดภัย และสคริปต์เหล่านั้นทำงานในฐานะ root ขณะติดตั้งแพ็กเกจ คู่มือ apt-secure ลากเส้นแบ่งระหว่างการรับรองไฟล์เก็บถาวรกับการตรวจทานซอฟต์แวร์ไว้ตรงนี้พอดี

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

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

จำกัดคีย์ให้อยู่กับแหล่ง ไม่ใช่กับระบบ

APT สมัยใหม่รับการอ้างอิง Signed-By ที่เฉพาะเจาะจงแหล่ง คีย์ที่ผู้ดูแลจัดการสามารถอยู่ใต้ /etc/apt/keyrings/ และรายการแหล่งระบุชื่อคีย์ที่ได้รับอนุญาตให้รับรองไฟล์เก็บถาวรนั้น นั่นแคบกว่าการโยนคีย์เดียวกันลงในชุดที่เชื่อถือทั้งระบบ ซึ่งอาจรับประกันแหล่งที่คุณไม่เคยตั้งใจอนุญาต ปฏิบัติตามเวอร์ชัน APT ที่ติดตั้งและคำแนะนำปัจจุบันของผู้ขาย แทนการผสมเศษจากคู่มือต่างรุ่นเข้าด้วยกัน

curl -fsSL https://repo.example.com/vpn-key.gpg -o /etc/apt/keyrings/vpn.gpg
echo "deb [signed-by=/etc/apt/keyrings/vpn.gpg] https://repo.example.com/debian stable main" > /etc/apt/sources.list.d/vpn.list

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

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

การปักหมุดแหล่งไม่ใช่รายการอนุญาตแพ็กเกจ

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

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

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

บันทึกอำนาจและวิธีถอนอำนาจนั้น

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

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

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

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