Systemd

使用 PrivateTmp 時訪問系統 tmp 目錄中的文件

  • June 7, 2021

我在php-fpm啟用 PrivateTmp 的情況下使用。我必須從 PHP 中讀取一個文件,該文件由遠端部署代理複製到/tmp目錄中。由於啟用了 PrivateTmp,我無法直接訪問/tmp目錄。

/tmp啟用 PrivateTmp 後是否可以從系統文件夾中讀取文件?我嘗試創建指向/tmpat的符號連結/var/temp並通過 訪問文件/var/temp,但它不起作用。/var/tmp目前是從 綁定安裝的/tmp,我也嘗試通過訪問該文件/var/tmp但沒有任何成功。

請閱讀手冊

PrivateTmp=

接受一個布爾參數。如果為 true,則為已執行的程序設置一個新的文件系統命名空間,並在其中掛載私有目錄/tmp/var/tmp目錄,這些目錄不被命名空間外的程序共享。這對於保護對程序臨時文件的訪問很有用,但會使程序之間的共享通過/tmp/var/tmp不可能。

所以不,你不能從系統範圍的/tmp/目錄中讀取。

但是在手冊的同一部分有一個解決方法:

…可以使用該JoinsNamespaceOf=指令在同一私有 /tmp 和 /var/tmp 命名空間中執行兩個或多個單元,有關詳細資訊,請參閱systemd.unit(5)

因此,如果您的遠端部署代理也從 systemd 單元執行,您可以將它們連接到一個單獨的 PrivateTmp 中,它們之間共享仍然與系統的其餘部分分開。

如果你不能這樣做:不要將文件儲存在系統中/tmp/,只需將其放置/移動到另一個位置……

引用自:https://serverfault.com/questions/786211