2020 年 5 個新 sudo 功能

從集中會話記錄、chroot 支持到 Python API,sudo 1.9 提供了許多新功能。

當你想在 POSIX 系統上執行一個操作時,最安全的方法之一就是使用 sudo 命令。與以 root 用戶身份登錄並執行命令可能是個危險的操作不同,sudo 授予任何被系統管理員指定爲 “sudoer”的用戶臨時權限,來執行通常受限制的活動。

幾十年來,這個系統幫助 Linux、Unix 和 macOS 系統免受愚蠢的錯誤和惡意攻擊,它是當今所有主要 Linux 發行版的默認管理機制。

當在 2020 年 5 月發佈 sudo 1.9 時,它帶來了許多新功能,包括集中收集會話記錄,支持 sudo 內的 chroot,以及 Python API。如果你對其中的任何一項感到驚訝,請閱讀我的文章,瞭解一些 sudo 鮮爲人知的功能

sudo 不僅僅是一個管理命令的前綴。你可以微調權限,記錄終端上發生的事情,使用插件擴展sudo,在 LDAP 中存儲配置,進行廣泛的日誌記錄,以及更多。

1.9.0 版本和後續的小版本增加了各種新功能(我將在下面介紹),包括:

  • 一個集中收集 sudo 會話記錄的記錄服務
  • 審計插件 API
  • 審批插件 API
  • Python 對插件的支持
  • sudo 內置 chroot 和 CWD 支持(從 1.9.3 開始)

哪裏可以得到 sudo 1.9?

大多數的 Linux 發行版仍然封裝了上一代的 sudo(1.8 版本),並且在長期支持(LTS)的發行版中會保持這個版本數年。據我所知,提供了最完整的 sudo 1.9 包的 Linux 發行版是 openSUSETumbleweed,它是一個滾動發行版,而且該 sudo 包的子包中有 Python 支持。最近的 Fedora 版本包含了 sudo 1.9,但沒有 Python 支持。FreeBSD Ports 有最新的 sudo 版本,如果你自己編譯 sudo 而不是使用軟件包,你可以啓用 Python 支持。

如果你喜歡的 Linux 發行版還沒有包含 sudo 1.9,請查看 sudo 二進制頁面來查看是否有現成的包可以用於你的系統。這個頁面還提供了一些商用 Unix 變種的軟件包。

像往常一樣,在你開始試驗 sudo 設置之前,確保你知道 root 密碼。是的,即使在 Ubuntu 上也是如此。有一個臨時的“後門”是很重要的;如果沒有這個後門,如果出了問題,你就必須得黑掉自己的系統。記住:語法正確的配置並不意味着每個人都可以在該系統上通過 sudo 做任何事情!

記錄服務

記錄服務可以集中收集會話記錄。與本地會話記錄存儲相比,這有很多優勢:

  • 更方便地在一個地方進行搜索,而不是訪問各個機器來尋找記錄
  • 即使在發送機器停機的情況下也可以進行記錄
  • 本地用戶若想掩蓋其軌跡,不能刪除記錄

爲了快速測試,你可以通過非加密連接向記錄服務發送會話。我的博客中包含了說明,可以在幾分鐘內完成設置。對於生產環境,我建議使用加密連接。有很多可能性,所以請閱讀最適合你的環境的文檔

審計插件 API

新的審計插件 API 不是一個用戶可見的功能。換句話說,你不能從 sudoers 文件中配置它。它是一個 API,意味着你可以從插件中訪問審計信息,包括用 Python 編寫的插件。你可以用很多不同的方式來使用它,比如當一些有趣的事情發生時,從 sudo 直接發送事件到 Elasticsearch 或日誌即服務(LaaS)上。你也可以用它來進行調試,並以任何你喜歡的格式將其他難以訪問的信息打印到屏幕上。

根據你使用它的方式,你可以在 sudo 插件手冊頁(針對 C 語言)和 sudo Python 插件手冊中找到它的文檔。在 sudo 源代碼中可以找到 Python 代碼示例,在我的博客上也有一個簡化的例子

審批插件 API

審批插件 API 可以在命令執行之前加入額外的限制。這些限制只有在策略插件成功後纔會運行,因此你可以有效地添加額外的策略層,而無需更換策略插件,進而無需更換 sudoers。可以定義多個審批插件,而且所有插件都必須成功,命令才能執行。

與審計插件 API 一樣,你可以從 C 和 Python 中使用它。我博客上記錄的示例 Python 代碼是對該 API 的一個很好的介紹。一旦你理解了它是如何工作的,你就可以擴展它來將 sudo 連接到工單系統,並且只批准有相關開放工單的會話。你也可以連接到人力資源數據庫,這樣只有當班的工程師才能獲得管理權限。

Python 對插件的支持

儘管我不是程序員,但我最喜歡的 sudo 1.9 新特性是 Python 對插件的支持。你可以用 Python 也能使用 C 語言調用大部分 API。幸運的是,sudo 對性能不敏感,所以運行速度相對較慢的 Python 代碼對 sudo 來說不是問題。使用 Python 來擴展 sudo 有很多優勢:

  • 更簡單、更快速的開發
  • 不需要編譯;甚至可以通過配置管理分發代碼
  • 許多 API 沒有現成的 C 客戶端,但有 Python 代碼

除了審計和審批插件 API 之外,還有一些其他的 API,你可以用它們做一些非常有趣的事情。

通過使用策略插件 API,你可以取代 sudo 策略引擎。請注意,你將失去大部分的 sudo 功能,而且沒有基於 sudoers 的配置。這在小衆情況下還是很有用的,但大多數時候,最好還是繼續使用 sudoers,並使用審批插件 API 創建額外的策略。如果你想嘗試一下,我的 Python 插件介紹提供了一個非常簡單的策略:只允許使用 id 命令。再次確認你知道 root 密碼,因爲一旦啓用這個策略,它就會阻止任何實際使用 sudo 的行爲。

使用 I/O 日誌 API,你可以訪問用戶會話的輸入和輸出。這意味着你可以分析會話中發生了什麼,甚至在發現可疑情況時終止會話。這個 API 有很多可能的用途,比如防止數據泄露。你可以監控屏幕上的關鍵字,如果數據流中出現任何關鍵字,你可以在關鍵字出現在用戶的屏幕上之前中斷連接。另一種可能是檢查用戶正在輸入的內容,並使用這些數據來重建用戶正在輸入的命令行。例如,如果用戶輸入 rm -fr /,你可以在按下回車鍵之前就斷開用戶的連接。

組插件 API 允許非 Unix 組的查找。在某種程度上,這與審批插件 API 類似,因爲它也擴展了策略插件。你可以檢查一個用戶是否屬於一個給定的組,並在後面的配置部分基於此採取行動。

chroot 和 CWD 支持

sudo 的最新功能是支持 chroot 和改變工作目錄(CWD),這兩個選項都不是默認啓用的,你需要在 sudoers 文件中明確啓用它們。當它們被啓用時,你可以調整目標目錄或允許用戶指定使用哪個目錄。日誌反映了這些設置何時被使用。

在大多數系統中,chroot 只對 root 用戶開放。如果你的某個用戶需要 chroot,你需要給他們 root 權限,這比僅僅給他們 chroot 權限要大得多。另外,你可以通過 sudo 允許訪問 chroot 命令,但它仍然允許漏洞,他們可以獲得完全的權限。當你使用 sudo 內置的 chroot 支持時,你可以輕鬆地限制對單個目錄的訪問。你也可以讓用戶靈活地指定根目錄。當然,這可能會導致災難(例如,sudo --chroot / -s),但至少事件會被記錄下來。

當你通過 sudo 運行一個命令時,它會將工作目錄設置爲當前目錄。這是預期的行爲,但可能有一些情況下,命令需要在不同的目錄下運行。例如,我記得使用過一個應用程序,它通過檢查我的工作目錄是否是 /root 來檢查我的權限。

嘗試新功能

希望這篇文章能啓發你仔細研究一下 sudo 1.9。集中會話記錄比在本地存儲會話日誌更加方便和安全。chroot 和 CWD 支持爲你提供了額外的安全性和靈活性。而使用 Python 來擴展 sudo,可以很容易地根據你的環境來定製 sudo。你可以通過使用最新的 Linux 發行版或 sudo 網站上的即用型軟件包來嘗試這些新功能。

如果你想了解更多關於 sudo 的信息,這裏有一些資源:


via: https://opensource.com/article/20/10/sudo-19

作者:Peter Czanik 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章