Debian

Debian 系統上基於文件的套接字的慣用位置

  • March 2, 2018

我正在為C使用Unix Domain Socket的 Debian 系統編寫守護程序。

如果守護程序的工作目錄是根目錄,是否有一個慣用的目錄可以將套接字放置在文件系統上?

它們通常位於/tmp其中或其子目錄中。請注意,其中的所有內容都會/tmp在關機時被擦除——不一定會被擦除,只是要注意它可以被擦除,所以如果你使用它,請檢查是否每次都必須創建子目錄。如果您想通過權限限制訪問,您將需要使用子目錄,因為/tmp它是世界可讀的。

/run/var/run(可能符號連結在一起)以類似的方式使用,但它們通常作為 tmpfs 文件系統掛載——這意味著它們是在啟動時創建並駐留在記憶體中,而不是在磁碟上(所以不要將其用作轉儲的地方海量數據)。對於執行時套接字,它可能是一個不錯的選擇。

請注意,/run這裡提到的所有其他目錄除了 /tmp,都只能由 root 寫入。對於系統程序,這很好,但如果應用程序可能由非特權使用者執行,您要麼想在/tmp某處使用或創建一個永久目錄並設置權限,要麼使用使用者 $HOME 中的位置。

/usr/share在安裝過程中可以在(或/usr/local/share)中創建目錄。那裡的目錄和內容不會像在/tmp/run. 但是,正如jordanm在評論中指出的那樣,/usr可能以只讀方式掛載,linux 文件系統層次結構指南反映了這一點。當然,在安裝應用程序時它不能是只讀的,所以如果你願意在那裡創建一個套接字,你可以留下它並稍後使用它(你仍然可以寫入套接字,即使文件是只讀的)。

如果您希望在某個不會以只讀方式安裝的引導中持久存在,這/etc是一個相當安全的選擇,因為這通常用於系統範圍的配置和重新配置。OTOH,可能有系統,其中整個根文件系統的底層設備是只讀的(例如,嵌入式系統), /tmp 和 /run 在另一個設備上(可能:記憶體中的 tmpfs)。因此,兩個最強大的策略似乎是:

  • 安裝應用程序時,將套接字安裝到永久位置。
  • /run在執行時或執行時創建一個目錄/var/run並將套接字放在那裡。
  • 只在/tmp.

第一個的優點是無論如何,一旦安裝了應用程序,您將有一個可以使用的套接字。第二個的優點是它可能更有利於理智的程式。第三個的優點是它不需要超級使用者權限。如果您以後改變主意,應該很容易從一種實現切換到另一種實現。

最後,正如BatchyX提出的那樣,您至少應該為此提供一個配置選項,回到您選擇的預設值。

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