Linux

Rootfs權限設計

  • August 28, 2019

我想知道根文件系統中的設計權限應該如何尋找嵌入式設備,板載busybox(buildroot環境)。幾個普通使用者可以使用 ssh 登錄系統。

我最初的概念是刪除除 x 組之外的所有權限(管理員可以訪問 root 組)和 /etc、/usr 文件夾、/root 的其他權限(在這種情況下,甚至不會設置 x)。/bin 文件夾將設置為 755,但是我害怕busybox 二進製文件,因為它已打開 set-uid 位。

在阻止所有這些資源之後,我想到了為特定文件顯式設置 ACL-s。

現在我的觀點是:

  • 普通使用者應該可以訪問哪些系統資源 - 我很確定 /bin 文件夾。但是其他文件夾,如 /usr、/var 等呢?
  • 關於 /bin/sh -> (-rwsr-xr-x) /bin/busybox 後門,我應該考慮什麼。如何阻止普通使用者執行(set-uid)shell的能力(我不確定,但可能有效的uid在busybox中被放棄了)
  • /lib 文件夾呢,我應該為普通使用者使用的庫顯式定義 ACL 嗎?或者有更簡單的解決方案。
  • 我應該限制 sysfs 和 procfs 的權限,否則會破壞整個系統?

我將不勝感激任何提示。

聽起來您已經足夠了解為 選擇權限設計/home/user1或等效項。您正在詢問系統的其餘部分。這裡已經有一些討論,至少在一個相關主題上:


刪除除 x 之外的所有組權限,以及 /etc、/usr 文件夾的其他權限。但是像 /usr、/var 等其他文件夾呢?

查看系統目錄上的 Unix DAC 權限,並使其比提供的預設值更具限制性,這不是一種常見的策略。(除了使用者主目錄的權限。通常有一個配置設置)。回答如此廣泛的問題的唯一方法 -

根文件系統中的設計權限應該是什麼樣子

  • 是您應該對系統目錄使用標準 DAC 權限。如果你願意,你可以檢查你最喜歡的 Linux 發行版。您也可以查看FHS,儘管它可能缺少一些最近的更新。

專門進入 buildroot可能會使更改它們更可行。但這並不意味著你“應該”!


我想擁有一個安全的根組(沒有額外的權限),因為它可能會usermod -aG root被管理員訪問。

不建議。您不能允許 unrestricted useradd,因為useradd -u 0,所以無論如何您都需要包裝腳本或其他東西。(例如,設置 sudoers 以允許管理員以 root 身份執行包裝腳本)。最好也提供一個包裝腳本usermod,並在腳本中進行保護。然後,您也可以防止攻擊其他非根“系統”組(守護程序帳戶)。

“普通使用者”(除了 www-data)可以使用 ssh 登錄。

看起來您正在嘗試執行一個安全的多使用者類 Unix 系統。這是問題中最重要的部分。

這個普遍的問題太寬泛了,不能在這裡問並得到明確的答案。

如果使用者完全不值得信任,那麼誠實的答案是你不能。有各種權衡、策略和戰術。

這個問題實際上並不特定於“嵌入式設備,板載busybox(buildroot環境)”。除了這可能會縮小您可以輕鬆使用的策略的範圍。

具體來說,請注意,與 Debian Linux 等標準二進制發行版相比,使用 buildroot 將使實施安全更新的工作量更大

在您可以查看的所有可能的免費軟體發行版中,我非常懷疑 buildroot 的目標是高度安全的多使用者 Linux 系統:-)。(多使用者網路伺服器,用於大學和一些類似環境,或多使用者 PC)。

大多數大型組織在內部多使用者系統方面都有*類似的問題。*但是他們使用的最簡單的方法是不執行任何一個大型多使用者 Unix(或 Windows :-) 實例,使用者實際上可以在其上執行程序!

像這樣的常見情況實際上是您擁有可供不同工作人員使用的台式電腦(“共享辦公桌”,或只是多個班次)。此處的一些常見控制項是 Microsoft 商業模式(“組策略”)或更廣泛的 Windows 生態系統的關鍵部分,有些不是免費軟體等效的。

最強大的控制項之一是“應用程序白名單”。為使用者提供完整的程式/腳本環境,如 Unix shell,風險相對較高。通常不需要它。(並且系統絕對可以設計為拒絕訪問它們)。

我害怕busybox二進制,因為它已經打開了set-uid位

一些busybox 小程序是標準命令,可能需要setuid root 才能按預期工作。這是為了安全而設計的,並得到官方支持。

config FEATURE_SUID

bool “刪除大多數小程序的 SUID 狀態”

預設 y

幫助

使用此選項,您可以安裝屬於 root 並設置了 suid 位的busybox 二進製文件,從而使某些小程序即使由普通使用者執行也可以執行 root 級別的操作(例如,在 fstab 中掛載使用者掛載需要這個)。

啟用此選項後,busybox 會在進入 main() 函式之前放棄不需要 root 訪問權限的小程序的權限。

如果你真的很偏執並且不想讓每個小程序的初始busybox程式碼都在root下執行,請建構兩個帶有不同applet的busybox二進製文件(以及指向每個二進製文件的適當符號連結),並且只設置suid位一個需要它的人。

一些需要 root 權限(二進製文件需要 suid 位或由 root 執行)並且將拒絕執行的小程序:crontab、login、passwd、su、vlock、wall。

如果有 root 權限(通過 suid 位,或者因為由 root 執行),將使用 root 權限的小程序,但仍會嘗試在沒有 root 權限的情況下工作:findfs,ping

$$ 6 $$, 跟踪路由$$ 6 $$, 山。 請注意,如果您不選擇此選項,而是將busybox suid 設為root,則所有小程序都將在root 下執行,這是一個巨大的安全漏洞(想想“cp /some/file /etc/passwd”)。

引用自:https://unix.stackexchange.com/questions/529784