簡體   English   中英

如何禁止其他 Linux Kernel 模塊訪問某些常規文件?

[英]How can I prohibit other Linux Kernel modules to get access to some regular files?

問題是禁止訪問某些文件(來自我的“黑名單”的文件)。 這意味着除了我(我自己的 kernel 模塊)之外沒有人可以讀取或修改這些文件。

我已經在這里,在 StackOverflow 上問過這個問題,但我還沒有得到答案。 只有一種解決方案可以更改文件的權限和文件的所有者。 但是,這對我的目標來說還不夠,因為文件的權限以及文件的所有者可以很容易地被其他人修改。

但我沒有放棄,我繼續研究這個問題。

我用指向我自己函數的指針替換了系統調用表的一些字段。 因此,我設法禁止任何 USER 模塊從我的黑名單中訪問文件; 此外,這種方法不依賴於文件的權限或文件的所有者。 然而,關鍵詞是“用戶模塊”。 我的意思是任何 kernel 模塊仍然可以通過調用filp_open() function 輕松訪問我的黑名單中的文件。 我查看了 Linux 代碼源,結果發現我掛鈎的所有這些系統調用( openopenat ,...)都是簡單的包裝器,僅此而已。

你可以幫幫我嗎? 有沒有辦法用filp_open做一些類似於我對系統調用所做的事情? 歡迎任何其他解決方案(沒有掛鈎)。

你所要求的是不可能的。 理論上,這可以通過在定制的管理程序下運行 kernel 或在定制的硬件上運行來實現,但在現實中實現起來會非常復雜(如果不是不可能的話)。

您無法保護 kernel 不受自身影響。 在任何正常情況下(即沒有專用硬件或管理程序),Linux kernel 在機器上以最高權限級別運行,因此可以根據需要恢復您所做的任何更改。 如果您的模塊需要拒絕對整個 kernel 的某些文件的訪問,那么您所做的事情在概念上確實存在問題。 此外,您似乎假設其他 kernel 模塊會以某種方式“有興趣”弄亂您的模塊:為什么會這樣?

此外,即使更改權限或覆蓋系統調用也不能解決任何問題:除非您正確配置kernel 鎖定(內核 >= v5.4)和/或其他一些安全措施,如模塊簽名(理想情況下也是安全啟動),否則root用戶是總是能夠插入模塊並顛覆您的“安全”措施。

如果您需要剝奪root對這些文件的訪問權限,那么正如我所說,確實存在邏輯錯誤。 root用戶已經可以使用它想要的任何配置文件為所欲為,當然破壞重要的配置文件會破壞系統,但這並不是你可以避免的。 在任何正常情況下,假設root是邪惡的,作為威脅 model 沒有多大意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM