保護與安全

最小權限原則(principle of least privilege)

當客人來你家住一晚,你不會把每個房間、保險箱與車子的鑰匙都交給他。你只給這趟拜訪所需要的:大門和客房。如果他後來證明是粗心或不老實,他能造成的損害就被你給的那一點點所限住。這種直覺——只給每個角色它真正需要的存取、不多給——就是最小權限原則,電腦安全裡最古老也最重要的觀念之一。

精確地說:每個主體(一位使用者、一個行程、一段程式碼)都應該只用「完成其正當工作所需的最小權限集合」來執行,且維持最短的時間。一台只負責提供檔案的網頁伺服器,並不需要安裝軟體或讀別人信件的能力,所以它就不該擁有。實際的好處在於「出事的時候」。如果那台網頁伺服器有個臭蟲、被攻擊者挾持,攻擊者繼承到的恰好是伺服器的權限——所以那些權限愈小,波及範圍就愈小。最小權限把一場潛在的大災難變成一起被圍堵的小事件。

落實它會形塑真實的設計:長時間執行的常駐程式,一旦做完它唯一需要的特權動作(例如綁定一個低號連接埠),就立刻從管理員身分降到一個無特權的帳號;程式被切分,使得只有一小段、經過仔細審查的部分才以高權限執行;以能力(capability)與細粒度權限取代「全有或全無」的粗放權力。誠實的提醒是:最小權限說來容易、做好卻很難——要釐清「真正最小」的權限集合很繁瑣,而「乾脆給大範圍存取」這條懶路永遠誘人,這也正是為什麼這麼多入侵事件都能追溯到權限過大的程式碼。

在 Unix 上,一個必須監聽 80 埠(一項特權動作)的服務以 root 身分啟動、綁定該埠,然後立刻呼叫 setuid 變成像 www-data 這樣毫無特殊權力的帳號。若日後某個請求利用了臭蟲,攻擊者就被困在 www-data 身分,而非 root。

只在最短的必要片刻使用高權限,之後就放掉它。

最小權限是一條原則,不是一種機制——它指導你「該怎麼設定與切分」。它只有在你真的去削減權限時才有用;為了方便而授予大範圍存取,會悄悄把好處丟掉。

又称
least privilegePoLPleast-authority最小權限