เมานต์ SSHFS เป็นของผู้ใช้ ไม่ใช่ฮุก VPN
สิทธิ์ในการยกอินเทอร์เฟซไม่ใช่สิทธิ์ในการเมานต์แชร์ พิสูจน์การเมานต์ของเซสชันผู้ใช้ด้วยมือ แล้วให้ทริกเกอร์ขอบริบทเดียวกัน
สมมติฐานนี้ง่ายที่จะรับมาและยากที่จะสังเกต: ฮุกเชื่อมต่อ VPN ทำงานเป็น root ดังนั้นเมานต์ที่มันเริ่มก็ควรจัดเป็น root ด้วย การให้เหตุผลนั้นสร้างไดเรกทอรีทีมที่ผู้ใช้เดสก์ท็อปเปิดไม่ได้ เมานต์ที่หายไปเมื่อบริการทริกเกอร์รีสตาร์ท และพรอมต์ยืนยันตัวตนในบริบทที่ไม่มีใครตอบได้ ฮุกกับการเมานต์เป็นงานสองอย่างที่ต่างกัน และมีเพียงอย่างเดียวที่ต้องใช้สิทธิ์พิเศษ
ตำนาน: สิทธิ์เครือข่ายหมายถึงสิทธิ์เมานต์
การยกอินเทอร์เฟซกับการยืนยันตัวตนกับเซิร์ฟเวอร์ไฟล์เป็นความสามารถที่ไม่เกี่ยวข้องกัน และโดยปกติเป็นของบัญชีที่ต่างกัน องค์ประกอบ VPN ต้องมีสิทธิ์เพียงพอที่จะเปลี่ยนเส้นทางและอินเทอร์เฟซ บัญชีเซิร์ฟเวอร์ไฟล์ต้องมีคีย์หรือรหัสผ่าน การตัดสินใจเรื่องคีย์โฮสต์ และไดเรกทอรีบ้านให้เมานต์ การมอบข้อมูลรับรองของงานที่สองให้ตัวตนแรกคือวิธีที่บริการเครือข่ายลงเอยด้วยการถือกุญแจของผู้ใช้
บนแล็ปท็อปผู้ใช้คนเดียวอาจเป็นบัญชีเดียวกัน และความบังเอิญนั้นไม่ใช่การออกแบบ
เมื่อฮุกที่มีสิทธิ์พิเศษทำการเมานต์แล้ว สามสิ่งจะผิดพลาดอย่างเงียบ ๆ เมานต์เป็นของ root เอเจนต์ของผู้ใช้ไม่มีอยู่ในสภาพแวดล้อมนั้น และความล้มเหลวปรากฏในบันทึกของบริการเครือข่ายแทนที่จะเป็นเซสชันที่ใส่ใจ ไม่มีสิ่งใดได้รับการซ่อมแซมด้วยการเพิ่มตัวเลือกในคำสั่งเมานต์ ทั้งหมดได้รับการซ่อมแซมด้วยการมอบงานให้เซสชันที่เป็นเจ้าของตัวตน
ทำไมเมานต์จึงเป็นของผู้ใช้ที่เข้าสู่ระบบ
เมานต์ SSHFS คือเมานต์ FUSE ที่เป็นของโพรเซสที่สร้างมันขึ้นมา และการเข้าถึงเป็นไปตามความเป็นเจ้าของนั้น ไม่ใช่โหมดของไดเรกทอรีหลัก เอกสารอ้างอิงแนะนำผู้ใช้ทั่วไปและจุดเมานต์ที่ผู้ใช้นั้นเป็นเจ้าของ ซึ่งเป็นเหตุผลว่าทำไมเมานต์ที่สร้างโดยโพรเซส root จึงไม่สะดวกสำหรับคนอื่น การเปลี่ยนสิทธิ์ที่จุดเมานต์ไม่ได้แก้ไข เพราะอุปสรรคคือเจ้าของเมานต์เอง
เริ่มจากเส้นฐานด้วยมือภายในเซสชันผู้ใช้: จุดเมานต์ว่างที่มีอยู่ใต้ไดเรกทอรีบ้าน บัญชีที่ได้รับอนุญาตบนเซิร์ฟเวอร์ และคีย์โฮสต์ที่ตรวจสอบแล้วผ่านกระบวนการที่ได้รับอนุมัติของคุณ เมานต์ด้วยมือหนึ่งครั้งและใช้งาน เพราะนั่นพิสูจน์ว่าเส้นทางตัวตนทำงานก่อนที่ระบบอัตโนมัติใด ๆ จะมีอยู่ บันทึกว่าคำสั่งต้องใช้อะไร: ชื่อบัญชี เส้นทางส่งออก และชื่อโฮสต์ส่วนตัว เก็บบริบทนั้นไว้สำหรับเวอร์ชันอัตโนมัติ เพราะเมานต์ด้วยมือที่ใช้งานได้คือข้อกำหนดที่ทริกเกอร์ต้องทำซ้ำ
sshfs [email protected]:/exports/team "$HOME/mnt/team"ถือว่าทุกชื่อและทุกเส้นทางในบรรทัดนั้นเป็นตัวแทน รวมถึงบัญชีและการส่งออก รหัสผ่านบัญชี VPN ไม่ได้เป็นข้อมูลรับรองของบัญชีจัดเก็บโดยอัตโนมัติ
ทริกเกอร์ควรขอให้เซสชันทำอะไร
การจัดวางที่รองรับคือ คำขอจากเหตุการณ์เครือข่ายไปยังเซสชันผู้ใช้ ไม่ใช่ข้อมูลรับรองที่ยืมมา จำกัดทริกเกอร์ให้อยู่ที่การเชื่อมต่อที่คุณหมายถึง ตามชื่อหรือ UUID ไม่ใช่ทุกอินเทอร์เฟซที่บังเอิญชื่อ tun0 การเปลี่ยนแปลงเพียงอย่างเดียวนั้นหยุดโปรไฟล์ที่สอง อุโมงค์ทดสอบ หรือเซสชันดีบักของเพื่อนร่วมงานไม่ให้เริ่มเมานต์
การดำเนินการฝั่งเซสชันควรค้นหาเมานต์ที่มีอยู่ตามที่ตั้งใจ แล้วพยายามหนึ่งครั้งอย่างจำกัด
อย่าลองใหม่ทุกการโพล และอย่าขอข้อมูลรับรองต่อไปขณะที่เซิร์ฟเวอร์เข้าถึงไม่ได้ เพราะทั้งสองอย่างเปลี่ยนการหยุดชะงักชั่วคราวให้เป็นการล็อกบัญชี บริการที่ไม่มีการดูแลเป็นการออกแบบแยกต่างหากซึ่งมีข้อมูลรับรองที่ได้รับอนุมัติและการตรวจสอบโฮสต์ของตัวเองในบริบทการทำงานของตัวเอง และไม่สามารถพึ่งพาว่ามีคนปลดล็อกเอเจนต์แบบกราฟิก ตัดสินใจว่าคุณกำลังสร้างอย่างไหนในสองอย่างก่อนเลือกว่าซอร์สโค้ดจะอยู่ที่ใด ความสับสนส่วนใหญ่ที่นี่มาจากการสร้างอย่างหนึ่งและคาดหวังอีกอย่างหนึ่ง
การตัดการเชื่อมต่อเป็นเหตุการณ์ของระบบไฟล์ ไม่ใช่เหตุการณ์ของฮุก
การตัดการเชื่อมต่อที่วางแผนไว้ควรทำงานกับไฟล์ให้เสร็จและถอดเมานต์จากเซสชันของผู้ใช้ที่เมานต์ด้วยคำสั่งที่รองรับสำหรับระบบไฟล์ประเภทนั้น การบังคับแยกออกเพื่อให้ฮุกกลับมาเร็วคือวิธีที่แอปพลิเคชันสูญเสียไดเรกทอรีทำงานและผู้ใช้สูญเสียความมั่นใจในระบบอัตโนมัติ เมานต์ที่ใช้งานอยู่ต้องมีการตัดสินใจระดับแอปพลิเคชัน เช่น ปิดไฟล์หรือหยุดการเขียน ไม่ใช่สัญญาณที่แรงกว่า สถานะการออกของฮุกไม่ใช่สิ่งที่ถูกปรับให้เหมาะสม
fusermount3 -u "$HOME/mnt/team"การสูญเสียที่ไม่คาดคิดเป็นอีกกรณีหนึ่ง และ SSHFS บันทึกว่าการดำเนินการที่ถูกขัดจังหวะอาจบล็อกได้ในขณะที่การขนส่งเชื่อมต่อใหม่
ตัวเลือกการเชื่อมต่อใหม่คืนค่าการขนส่ง และไฟล์ที่เปิดก่อนการเชื่อมต่อใหม่นั้นยังสามารถส่งคืนข้อผิดพลาดและต้องเปิดใหม่ VPN ที่กลับมาไม่ได้พิสูจน์อะไรเกี่ยวกับแฮนเดิลก่อนหน้าหรืองานที่ยังไม่ได้บันทึก เลือกพฤติกรรมที่คุณต้องการเมื่อเกิดการหยุดชะงัก ไม่ว่าจะเป็นการหยุดชั่วคราว การแสดงข้อผิดพลาด หรือการเมานต์ใหม่โดยเจตนา และทดสอบกับไฟล์ที่ทิ้งได้ก่อนที่สิ่งใดจะพึ่งพามัน