ทำไมบริการ VPN ที่เริ่มตอนบูตจึงอ่านคีย์ริงของคุณไม่ได้
VPN ตอนบูตไม่มีเอเจนต์ความลับที่ปลดล็อกไว้ให้ยืม อ่านแฟล็กความลับของการเชื่อมต่อก่อนรีเซ็ตรหัสผ่านที่เซิร์ฟเวอร์ไม่เคยปฏิเสธ
การเชื่อมต่อที่ทำงานได้หลังล็อกอินแต่ล้มเหลวก่อนหน้านั้นมักหมายความว่าความพยายามตอนบูตไม่สามารถรับความลับได้ ไม่ใช่เซิร์ฟเวอร์ปฏิเสธความลับนั้น ข้อมูลรับรองมีอยู่ แต่บริบทที่ขอไม่มี การแยกแยะเพียงข้อนี้ช่วยประหยัดการรีเซ็ตรหัสผ่านที่ไม่จำเป็น
ตามคำขอ: มีบางอย่างเริ่มการเชื่อมต่อก่อนที่เซสชันเดสก์ท็อปจะมีอยู่ และที่เก็บความลับที่ปกติตอบกลับยังไม่ได้ปลดล็อก ทั้งสองบริบทไม่ตรงกันว่าใครเป็นเจ้าของความลับ และโปรไฟล์บันทึกว่าคาดว่าใครจะเป็นผู้จัดหา
เส้นทางบูตขออะไรจริง ๆ
ตอนบูต NetworkManager เริ่มเป็นบริการระบบโดยไม่มีเซสชันผู้ใช้ ไม่มี D-Bus ของเซสชัน และไม่มีคีย์ริงที่ปลดล็อก โปรไฟล์การเชื่อมต่อยังยกขึ้นได้ แต่ใช้ได้เฉพาะความลับที่บริการเข้าถึงได้เอง สิ่งใดที่เอเจนต์ความลับเป็นเจ้าของจะรอจนมีคนล็อกอินและเอเจนต์ปรากฏ บริการทำตามที่การกำหนดค่าบอก สิ่งที่ต้องเปลี่ยนคือโปรไฟล์
ความล้มเหลวถูกเขียนไว้ในการเชื่อมต่อ ไม่ได้ซ่อนอยู่ในคีย์ริง
การอ่านแฟล็กความลับบนการเชื่อมต่อ
ถามการเชื่อมต่อว่าคาดอะไร ไม่ใช่ถามว่าเดสก์ท็อปจำอะไร คอลัมน์แฟล็กตอบคำถามโดยตรง และอยู่รอดหลังรีบูตในไฟล์โปรไฟล์บนดิสก์
เริ่มจากรายการโปรไฟล์ แล้วยืนยันว่าการเชื่อมต่อใดตั้งให้ยกขึ้นเอง จากนั้นดัมป์การเชื่อมต่อหนึ่งรายการและอ่านแฟล็กที่เกี่ยวกับรหัสผ่าน:
nmcli -f NAME,UUID,TYPE,AUTOCONNECT connection show nmcli connection show "Work VPN" | grep -i -E "password|secret|key" journalctl -b -u NetworkManager --grep "secret"
คำสั่งแรกยืนยันว่ามีโปรไฟล์ใดบ้างและมีตัวใดตั้งเป็นการเชื่อมต่ออัตโนมัติ ซึ่งเป็นวิธีที่ความพยายามแบบไม่มีคนดูแลเริ่มขึ้น คำสั่งที่สองเปิดเผยค่าแฟล็ก และคำสั่งที่สามแสดงบริการที่บ่นว่าไม่มีเอเจนต์ตอบกลับสำหรับความลับที่ระบุ บรรทัดล็อกที่ระบุว่าความลับเป็นของเอเจนต์คือการวินิจฉัยทั้งหมดในประโยคเดียว
| Flag value | Where the secret lives | Behaviour before login |
|---|---|---|
| 0 | Stored in the connection profile | Available to the system service |
| 1 | Owned by a secret agent | Blocks until the agent is unlocked |
| 2 | Never stored | Prompts on every activation |
| 4 | Not required | Never requested at all |
ทำไมการย้ายการเชื่อมต่อไปยังขอบเขตระบบจึงเปลี่ยนคำตอบ
การเชื่อมต่อที่ผู้ใช้เป็นเจ้าของจะถูกเปิดใช้งานภายใต้เอเจนต์ของผู้ใช้นั้น จึงทำงานได้อย่างสมบูรณ์เมื่อเดสก์ท็อปขึ้น การย้ายไปยังขอบเขตระบบจะเอาเอเจนต์ออกจากเส้นทาง โปรไฟล์เดิมจึงทำงานต่างออกไปโดยไม่มีการเปลี่ยนแปลงแม้แต่บรรทัดเดียวของการกำหนดค่า VPN
การย้ายนั้นเป็นการออกแบบที่ชอบด้วยกฎหมาย และมีข้อกำหนดหนึ่ง: ความลับต้องเข้าถึงได้โดยบริการระบบ การเก็บไว้ในโปรไฟล์ การจัดหาผ่านข้อมูลรับรองระดับระบบ หรือการยอมรับพรอมต์แบบโต้ตอบในจังหวะที่เหมาะสมล้วนเป็นคำตอบที่ใช้ได้ การปล่อยแฟล็ก 1 ไว้แล้วหวังนั้นไม่ใช่
คีย์ส่วนตัวที่มีวลีรหัสผ่านของตัวเองเพิ่มอีกชั้น แม้รหัสผ่านบัญชีที่เก็บไว้ก็ไม่ปลดล็อกคีย์ที่ต้องการวลีรหัสผ่าน ดังนั้นตรวจสอบว่าขั้นตอนที่ล้มเหลวขอความลับใดจริง ๆ ก่อนเปลี่ยนแปลงสิ่งใด
สิ่งที่ไม่ควรทำ และสิ่งที่ควรทำแทน
การทำให้ไฟล์ข้อมูลรับรองทุกไฟล์อ่านได้โดยทุกคน หรือปิดการพิสูจน์ตัวตนเพื่อไม่ต้องมีพรอมต์ แลกความไม่สะดวกตอนเริ่มต้นกับความเสี่ยงถาวร ทั้งสองยังซ่อนการพึ่งพาแทนที่จะแก้ไข และการอัปเดตอิมเมจครั้งถัดไปจะนำความล้มเหลวเดิมกลับมา
ในขั้นตอนนั้นใช้ กลไกที่ดิสทริบิวชันของคุณจัดทำเอกสารไว้สำหรับการเปิดใช้งานโดยไม่มีคนดูแล แล้วยืนยันว่าแฟล็กของโปรไฟล์ตรงกับกลไกนั้น ตรวจสอบผลลัพธ์จากการบูตที่สะอาด ไม่ใช่จากเชลล์ที่มีเอเจนต์อยู่แล้ว จดบันทึกเจ้าของการเชื่อมต่อ แหล่งที่มาของความลับ และขั้นตอนที่ต้องทำงาน เพื่อให้การเปลี่ยนแปลงการเริ่มอัตโนมัติในภายหลังไม่สามารถนำการพึ่งพาให้ใครบางคนปลดล็อกเดสก์ท็อปก่อนกลับมาโดยไม่รู้ตัว เอกสารคือความแตกต่างระหว่างบริการที่แก้ไขแล้วกับบริการที่จะพังอีกในไตรมาสหน้า
ทดสอบจากการบูตที่สะอาดซึ่งควบคุมได้ ไม่ใช่จากการลองใหม่ด้วยมือหลังล็อกอิน การลองใหม่สำเร็จด้วยเหตุผลเดียวกับที่ความพยายามตอนบูตล้มเหลว และนั่นคือหลักฐานที่การทดสอบเร็วทำลาย