Linux

為什麼例如 /usr/sbin 中的執行檔可由 root 寫入?

  • February 21, 2019

您能否解釋一下為什麼二進制編譯文件(例如,/usr/sbin)對使用者具有寫權限root

對我來說,這是編譯的。這意味著直接寫入沒有用,並且可能會以某種方式將文件暴露給某些安全問題。

腳本(例如bash文件)可能是可寫的,因為它基本上是一個文本文件,但是據我所知,為什麼實際上不需要寫的編譯文件是一樣的呢?

預先感謝您的回饋。

(或保存執行檔的/bin任何其他標準目錄)中的文件是否可由 root 寫入並不重要。在我使用的 Linux 伺服器上,它們可以由 root 寫入,但在我的 OpenBSD 機器上,它們不是。

只要它們不能被組或“其他”寫入!

沒有安全問題,例如

-rwxr-xr-x 1 root root 126584 Feb 18  2016 /bin/ls

如果有人想覆蓋它,他們必須是 root,如果他們是root並且覆蓋它,那麼他們要麼是

  1. 安裝新版本,或
  2. 笨拙,或
  3. 已經擁有 root 權限的攻擊者。

要考慮的另一件事是,無論文件是否受防寫,root 都可以寫入文件,因為… root。

還要注意,“腳本”與二進製文件一樣是執行檔。腳本不需要是可寫的,“因為它是一個文本文件”。如果有的話,它可能應該與同一目錄中的其他執行檔具有相同的權限。

**現在不要更改所有內容的權限!**這可能會造成各種破壞,並可能使可能會驗證權限設置正確的包管理員感到困惑。如果您不小心以錯誤的方式在安全關鍵應用程序上更改權限,也可能使系統易受攻擊。

假設執行檔的權限設置正確,除非您發現一些看起來奇怪的東西,在這種情況下,您可能應該聯繫相關的包維護人員進行驗證,而不是開始更改內容。


從評論和聊天中,有人要求了解一些歷史。

Linux上二進製文件的權限歷史我一無所知。可以推測他們只是從目錄中繼承了權限,或者只是從umaskLinux的預設值中繼承了權限,但我真的不知道。

我所知道的是,OpenBSD 預設將二進製文件安裝在基本系統1中,權限模式為 555(-r-xr-xr-x)。/usr/share/mk/bsd.own.mk這是在設置為 555的 Makefile 片段中指定的BINMODE(除非已經設置)。這稍後在make buildin期間安裝執行檔時使用/usr/src

我查看了這個文件的帶註釋的 CVS 日誌,發現文件中的這一行自從 1995 年從 NetBSD 導入以來沒有改變。

在 NetBSD 上,該文件於 1993 年首次放入 CVSBINMODE ,設置為 555。

FreeBSD 項目似乎至少從 1994 年開始就使用與 NetBSD 完全相同的文件,並且隨著後來的送出,在送出消息中添加了一個提示,即舊文件來自 Berkeley Software Distribution 的 4.4BSD 版本。

除此之外,伯克利的 CSRG將原始碼保存在SCCS中,但他們的儲存庫在 GitHub 2上以 Git 形式提供。我們在這裡進行法醫處理的文件似乎是Keith Bostic(或與他關係密切的人)在 1990 年送出的。

這就是那個故事。如果你想知道為什麼,那麼我想我們必須問基思。我有點希望看到一個更改的送出消息說“這需要 555 因為…… ”,但沒有。

1 BSD 系統比 Linux 更嚴格地劃分為“基本系統”和“第 3 方包”(埠/包)。基本系統是一個連貫的單元,它為執行作業系統提供了一套完整的設施,而埠或軟體包被視為“本地軟體”並安裝在/usr/local.

2 還有一個更全面的 GitHub 儲存庫,其中包含 70 年代以後的 Unix版本

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