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

เปรียบเทียบผู้สมัครทั้งสามตามความเป็นเจ้าของ ไม่ใช่ตามความสะดวก

สามวิธีในการออกจากเทอร์มินัล สามเจ้าของที่แตกต่างกัน

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

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

sudo -b ไม่ใช่ตัวจัดการข้อมูลรับรอง

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

หากการเชื่อมต่อต้องมีการโต้ตอบ ทางแก้คือการตั้งค่าการรับรองความถูกต้องแบบไม่โต้ตอบที่รองรับ ไม่ใช่วิธีอื่นในการเปิดคำถามเดิม

--daemon เปลี่ยนโปรแกรม ไม่ใช่การล็อกอิน

--daemon ขอให้ OpenVPN เองแยกตัวออกหลังการเริ่มต้น คู่มือเวอร์ชัน 2.6 ระบุว่าการเปลี่ยนเส้นทาง syslog เกิดขึ้นเมื่อแยกวิเคราะห์ตัวเลือก แม้ว่าการแยกตัวจะเกิดขึ้นภายหลัง ข้อความจึงอาจหยุดปรากฏในเทอร์มินัลเร็วกว่าที่คาด ความเงียบหลังจากจุดนั้นไม่ได้พิสูจน์สิ่งใดเกี่ยวกับอุโมงค์ เพิ่ม --log หรือ --log-append อย่างชัดเจนเพื่อให้ เอาต์พุตไปอยู่ในที่ที่คุณอ่านได้

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

การตรวจสอบของ sudo ให้อะไรและไม่ให้อะไร

sudo -v ตรวจสอบหรือรีเฟรชข้อมูลรับรองภายในที่แคชไว้ และรับรองความถูกต้องหากนโยบายกำหนด ไม่เริ่ม OpenVPN ไม่รับรองความถูกต้องกับเกตเวย์ และไม่รับประกันว่าคำสั่งถัดไปในสคริปต์จะได้รับอนุญาต sudo -n หมายถึงตรงกันข้าม อย่าถาม จงล้มเหลว สิ่งนี้ทำให้ความล้มเหลวในการอนุญาตภายในชัดเจนขึ้น ซึ่งมีประโยชน์ และไม่ได้บอกอะไรเกี่ยวกับสิ่งที่ OpenVPN จะขอในภายหลัง

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

เลือกเจ้าของที่สามารถสังเกตได้

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

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

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