ปุ่ม VPN ต้องใช้ sudo: จำกัดขอบเขตกฎ ตรวจสอบนโยบาย
ปุ่มบนเดสก์ท็อปไม่ใช่เหตุผลที่จะให้ root โดยไม่มีรหัสผ่าน ตรวจสอบว่าตัวจัดการเครือข่ายทำได้เองหรือไม่ จำกัดคำสั่งเดียว แล้วตรวจสอบนโยบาย sudo ทั้งหมด
ปุ่ม VPN ทำงานได้สำหรับผู้ดูแลระบบและล้มเหลวสำหรับคนอื่น ๆ จึงมีคนเพิ่มบรรทัดหนึ่งลงใน sudoers บรรทัดนั้นมักมีอายุยืนกว่าปัญหาที่มันถูกสร้างมาเพื่อแก้ และมักให้สิทธิ์มากกว่าที่ปุ่มต้องการ ก่อนแก้ไขนโยบาย ให้ตรวจสอบว่าเจ้าของการเชื่อมต่อที่รองรับสามารถทำงานนี้ได้อยู่แล้วหรือไม่ เงื่อนไขสามข้อด้านล่างเป็นตัวตัดสินว่า sudo เกี่ยวข้องหรือไม่
เงื่อนไข 1: เจ้าของที่รองรับทำได้โดยไม่ต้องใช้ sudo
บนเดสก์ท็อป Linux ส่วนใหญ่ ตัวจัดการเครือข่ายเป็นเจ้าของการเชื่อมต่อ VPN อยู่แล้ว และการอนุญาตของมันผ่าน polkit ไม่ใช่ sudo ผู้ใช้ที่ได้รับอนุญาตให้เปิดการเชื่อมต่อสามารถทำได้จากบรรทัดคำสั่งโดยไม่ต้องมีกฎ root ใด ๆ ตรวจสอบว่าตัวจัดการอนุญาตอะไรก่อนจะถือว่าปุ่มต้องการสิทธิ์พิเศษ หากคำตอบคือใช่ การแก้ไข sudoers ก็กำลังแก้ปัญหาที่ไม่มีอยู่จริง
nmcli connection show
nmcli connection up "Work VPN"
หากตัวจัดการปฏิเสธ ให้อ่านเหตุผล: กฎ polkit ที่หายไป การเชื่อมต่อที่เป็นของผู้อื่น หรือโปรไฟล์ที่เก็บไว้ในที่ที่ผู้ใช้อ่านไม่ได้ แต่ละกรณีมีวิธีแก้ที่รองรับและแคบกว่ากฎ sudo การยกระดับสิทธิ์เป็นทางเลือกสุดท้าย ไม่ใช่ทางแรก
เงื่อนไข 2: กฎระบุไฟล์ปฏิบัติการหนึ่งไฟล์และอาร์กิวเมนต์ของมัน
หากจำเป็นต้องใช้ sudo จริง ๆ กฎควรระบุคำสั่งที่แน่นอนและอาร์กิวเมนต์ที่อนุญาตให้ใช้เมื่อทำได้ กฎที่ให้ผู้ใช้รันสคริปต์ห่อจะปลอดภัยเท่ากับสิทธิ์ของสคริปต์นั้น เพราะผู้ใช้แก้ไขสิ่งที่ root จะรันได้ กฎที่มีไวลด์การ์ดหลังคำสั่งก็เป็นปัญหาเดียวกันในรูปแบบที่สั้นกว่า
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
ตรวจสอบทุกเส้นทางในห่วงโซ่คำสั่ง: ไบนารี สคริปต์ที่มันเรียก ไฟล์กำหนดค่าที่มันอ่าน และไดเรกทอรีใด ๆ ระหว่างนั้น หากผู้ใช้เขียนไฟล์ใด ๆ เหล่านั้นได้ กฎที่จำกัดก็เท่ากับ root ที่ไม่มีขีดจำกัดในทางปฏิบัติ อาร์กิวเมนต์ก็สำคัญ เพราะคำสั่งที่รับเส้นทางกำหนดค่าสามารถชี้ไปยังไฟล์ที่ผู้ใช้ควบคุมได้ เขียนกฎสำหรับการดำเนินการ ไม่ใช่สำหรับปุ่ม
หยุดหากคำสั่งต้องใช้ไฟล์ที่ผู้ใช้ควบคุมจึงจะทำงานได้ แสดงว่าการออกแบบผิด และไม่มีไวยากรณ์ sudoers ใดทำให้ปลอดภัยได้
เงื่อนไข 3: นโยบายทั้งหมดถูกแยกวิเคราะห์ ไม่ใช่แค่บรรทัดของคุณ
ตรวจสอบด้วยตัวแก้ไขที่ล็อกไฟล์และตรวจไวยากรณ์ และตรวจสอบนโยบายที่ประกอบเสร็จแล้วไม่ใช่แค่ส่วนย่อย ไฟล์ที่แยกวิเคราะห์ได้ด้วยตัวเองยังอาจทำให้ลำดับการรวมเสียหรือทำกฎซ้ำในแบบที่เปลี่ยนพฤติกรรมคู่มือ visudo อธิบายทั้งตัวแก้ไขที่ล็อกไฟล์และโหมดตรวจสอบอย่างเดียวที่ใช้ที่นี่
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
การตรวจสอบจะรายงานไฟล์และบรรทัดเมื่อล้มเหลว และรายงานนั้นคือส่วนที่มีประโยชน์ แก้ไขการเปลี่ยนแปลงที่ตั้งใจผ่านตัวแก้ไขแทนการบังคับบันทึกข้อผิดพลาดที่รู้อยู่แล้ว เพราะนโยบายที่เสียสามารถล็อกผู้ดูแลระบบทุกคนออกพร้อมกันได้ ไฟล์ในไดเรกทอรีรวมยังต้องมีเจ้าของและโหมดตามที่คู่มือกำหนด มิฉะนั้นจะถูกเพิกเฉยหรือปฏิเสธ ไวยากรณ์เป็นเพียงด่านแรก: เมื่อผ่านแล้ว ให้อ่านกฎอีกครั้งและถามว่ามันอนุญาตอะไรจริง ๆ
หยุดหากวิธีเดียวที่จะทำให้การเปลี่ยนแปลงทำงานได้คือปิดการตรวจไวยากรณ์ นั่นไม่ใช่นโยบาย แต่คือระบบล่มที่รอการรีบูต
การกู้คืน: เก็บเซสชันที่ยังใช้งานได้ไว้
ก่อนบันทึก ตรวจสอบให้แน่ใจว่าเซสชันผู้ดูแลระบบที่ได้รับอนุญาตเปิดอยู่แล้วและมีเส้นทางที่สองเข้าสู่เครื่อง ข้อผิดพลาดใน sudoers อาจทำให้คุณแก้ไขมันไม่ได้ และปุ่มบนเดสก์ท็อปไม่คุ้มกับความเสี่ยงนั้น หาก sudo เสียอยู่แล้ว ให้ใช้เส้นทางการกู้คืนที่เอกสารของระบบกำหนด แทนการคิดค้นขึ้นเอง
sudo -n true
id
ทางเลือกอย่าง pkexec ขึ้นอยู่กับการติดตั้งและนโยบายของมันเอง จึงไม่ใช่พรอมต์ root ที่สองที่รับประกันได้ แยกการอนุญาตภายในเครื่องออกจากการจัดหาความลับ VPN ด้วย: กฎ sudo ไม่สามารถปลดล็อกตัวแทนความลับที่ไม่มีอยู่ และไม่ตอบสนอง MFA ของเกตเวย์ หลังการแก้ไข ให้ทดสอบบัญชีปกติที่ทำเฉพาะการดำเนินการที่ตั้งใจ แล้วใช้การควบคุมปกติของผู้จัดการ
การตัดสินใจสิ้นสุดเมื่อคุณบอกได้ว่าเงื่อนไขใดทำให้ sudo ชอบธรรม กฎระบุอะไร นโยบายทั้งหมดถูกแยกวิเคราะห์ และคุณจะกู้คืนอย่างไรหากไม่เป็นเช่นนั้น ตัวเรียกใช้ที่มีสิทธิ์พิเศษซึ่งทำให้คุณสูญเสียการเข้าถึงของผู้ดูแลระบบเป็นการแลกเปลี่ยนที่แย่ และมักหลีกเลี่ยงได้