คำสั่ง VPN ของคุณทำงานโดยไม่มีสิทธิพิเศษ แต่บริการไม่ได้เป็นเช่นนั้น
การไม่ถามรหัสผ่านไม่ได้บอกอะไรเกี่ยวกับใครเป็นคนเปลี่ยนเส้นทาง ค้นหาบริการ อินเทอร์เฟซที่มันเปิดเผย และนโยบายที่ตัดสินว่าใครขอได้
คำสั่ง VPN ทำงานในฐานะผู้ใช้ของคุณ ไม่มีรหัสผ่านปรากฏขึ้น และอุโมงค์ก็เชื่อมต่อขึ้น ลำดับนั้นรู้สึกเหมือนการทำงานโดยไม่มีสิทธิพิเศษ และโดยปกติแล้วมันไม่ใช่ บริการแยกต่างหากเป็นผู้ทำการเปลี่ยนแปลงเครือข่าย และคำถามที่น่าสนใจคือบริการนั้นจะทำอะไรให้กับผู้เรียกที่มันยังไม่ได้ตรวจสอบ การนับจำนวนการถามรหัสผ่านไม่ได้บอกอะไรคุณเกี่ยวกับขอบเขตนั้นเลย
อินเทอร์เฟซ กลไก และการตรวจสอบ
อินเทอร์เฟซรับคำขอ ได้แก่ เชื่อมต่อ ตัดการเชื่อมต่อ เลือกโปรไฟล์ กลไกเป็นเจ้าของการดำเนินการเครือข่าย ได้แก่ การสร้างอินเทอร์เฟซ การเปลี่ยนเส้นทาง การใช้ตัวกรอง การตรวจสอบสิทธิ์ตัดสินว่าผู้เรียกนี้ขอการกระทำนี้ได้หรือไม่ ทั้งสามอย่างนี้อาจกระจายอยู่ในไบนารี ตัวช่วย และบริการของระบบ และผู้ใช้เห็นเพียงอย่างแรก
บทบาทเหล่านี้อาจอยู่ในไบนารีเดียว ในสองโปรเซส หรือในไคลเอนต์และบริการของระบบ และคำสั่งที่ผู้ใช้เห็นแทบไม่เคยเปิดเผยว่าเป็นแบบใด ไอคอนบนถาดระบบและดีมอนของระบบอาจดูเหมือนแอปพลิเคชันเดียว ขณะที่ทำงานด้วยอำนาจที่ต่างกันมาก สิทธิพิเศษตอนติดตั้งและสิทธิพิเศษตอนร้องขอเป็นคนละเรื่องกัน ตัวติดตั้งที่ทำงานในฐานะ root อาจทิ้งบริการที่รอฟังคำขอในภายหลังไว้ได้ นานหลังจากตัวจัดการแพ็กเกจเสร็จสิ้น บริการนั้นเป็นผู้ถืออำนาจ ไม่ใช่คำสั่งที่คุณพิมพ์
การมอบหมายคือการออกแบบปกติ
การมอบงานเครือข่ายที่มีสิทธิพิเศษให้บริการเป็นสถาปัตยกรรมที่สมเหตุสมผล มันทำให้แอปพลิเคชันทั่วไปไม่มีสิทธิพิเศษ และรวมศูนย์การดำเนินการที่ต้องได้รับการดูแล การออกแบบนี้คุ้มค่าก็ต่อเมื่อบริการตรวจสอบด้วยว่าใครเป็นคนขอและเพื่ออะไร หากไม่มีการตรวจสอบนั้น มันก็เป็นเพียงประตูที่กว้างขึ้น
NetworkManager คือตัวอย่างที่เป็นรูปธรรมบน Linux คู่มือการกำหนดค่าของมันอธิบายว่า PolicyKit อนุญาตคำขอที่ไม่ใช่จาก root อย่างไรในการตั้งค่าเริ่มต้น นั่นแสดงการอนุญาตที่มอบหมายในผลิตภัณฑ์จริง มันไม่ได้พิสูจน์ว่าไคลเอนต์เชิงพาณิชย์ทุกรายใช้ NetworkManager และไม่ได้อธิบายเส้นทางซ็อกเก็ตหรือนโยบายของผู้จำหน่ายรายใดรายหนึ่ง
รูปแบบคือการมอบหมายที่มีนโยบายอยู่เบื้องหลัง ตัวอย่างคือการนำรูปแบบนั้นไปใช้หนึ่งแบบ ไม่ใช่แบบสากล
อ่านขอบเขต ไม่ใช่อ่านคำขอ
ค้นหาบริการ เจ้าของการกำหนดค่าของมัน และอินเทอร์เฟซภายในที่ส่วนหน้าใช้งาน จากนั้นถามว่าผู้ใช้คนใดขอการดำเนินการใดได้บ้าง การยกและลดโปรไฟล์ที่บันทึกไว้หนึ่งโปรไฟล์ไม่ใช่สิทธิ์เดียวกับการโหลดการกำหนดค่าที่ผู้ปฏิบัติงานไม่เคยตรวจทาน ความแตกต่างคือคำถามด้านความปลอดภัยทั้งหมด
เริ่มจากตัวจัดการบริการและจากมุมมองของไคลเอนต์เองต่อสิทธิ์ของมัน คำสั่งด้านล่างแสดงว่าดีมอนทำงานอยู่หรือไม่ ผู้เรียกขออะไรจากมันได้ และดีมอนเปิดเผยอะไรภายใต้ไดเรกทอรีรันไทม์ของมัน
systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager
ถามด้วยว่าการดำเนินการส่งผลต่ออะไร รายการเมนูที่ดูเป็นเรื่องส่วนตัวอาจเปลี่ยนเส้นทางและ DNS ของทั้งเครื่อง ซึ่งหมายความว่ามันสามารถรบกวนเซสชันของผู้ใช้คนอื่นได้ รัศมีของผลกระทบอยู่ในบททบทวนเดียวกับสิทธิ์ และโดยปกติมันเป็นตัวตัดสินว่าบริการต้องการบทบาทที่แคบลงหรือไม่
แก้ไขสิทธิ์ด้วยวิธีที่ได้รับการสนับสนุน
การทำให้ซ็อกเก็ตควบคุมที่ได้รับการป้องกันเขียนได้โดยทุกคน หรือการเพิ่มบัญชีเข้าในกลุ่มผู้ดูแลระบบที่กว้าง ลบข้อผิดพลาดเรื่องสิทธิ์ออกหนึ่งข้อและสร้างข้อที่ใหญ่กว่าขึ้น ข้อผิดพลาดนั้นเป็นสิ่งเดียวที่บอกคุณว่าขอบเขตนั้นมีอยู่ ใช้กระบวนการเป็นสมาชิกหรือการอนุญาตตามเอกสาร รวมถึงการรีเฟรชเซสชันที่มันต้องการ การเป็นสมาชิกกลุ่มมักมีผลเฉพาะเซสชันการเข้าสู่ระบบใหม่ ซึ่งเป็นเหตุผลว่าทำไมการเปลี่ยนแปลงอาจดูเหมือนไม่ได้ทำอะไรจนกว่าจะเข้าสู่ระบบครั้งถัดไป
หากผลิตภัณฑ์เปิดเผยบทบาทที่แคบลงสำหรับการดำเนินการ ให้เลือกสิ่งนั้นแทนการให้สิทธิ์แบบเหมารวม เขียนบทบาทที่เลือกและเจ้าของไว้ข้างชื่อบริการ
การแยกที่ดีหน้าตาเป็นอย่างไร
แอปพลิเคชันทั่วไปยังคงไม่มีสิทธิพิเศษ บริการทำเฉพาะการตั้งค่าที่มันถูกออกแบบมา และผู้เรียกทุกรายได้รับการตรวจสอบเทียบกับนโยบายที่มีเจ้าของ นั่นคือการออกแบบที่ป้องกันได้ มันยังตรวจสอบได้ด้วย เพราะนโยบายมีชื่อผูกอยู่ สิ่งที่ใหญ่กว่านั้นสมควรได้รับข้อยกเว้นเป็นลายลักษณ์อักษรมากกว่าการเปลี่ยนสิทธิ์อย่างเงียบ ๆ
รูปแบบความล้มเหลวคือบริการที่ทำตามคำขอใด ๆ จากผู้ใช้ภายในคนใดก็ได้ เพราะอินเทอร์เฟซนั้นสะดวก จากมุมมองของผู้ใช้มันดูเหมือนกัน และมันถืออำนาจที่ใหญ่กว่ามาก ทดสอบคำขอที่ถูกปฏิเสธหนึ่งครั้ง ไม่ใช่เพียงคำขอที่สำเร็จ การปฏิเสธที่มาจากนโยบายคือหลักฐานว่านโยบายนั้นมีอยู่