Systemd Unit文件中PrivateTmp字段詳解-Jason.Zhi

以下圖,在開發調試的時候會遇到這麼一個問題。php

file_put_contents時,$tmp_file顯示的目標文件是/tmp/xxx.而這個文件實際放在linux的目錄倒是/tmp/systemd-private-xxxxx-php-fpm.service/xxx(見圖二)html

 


爲何會出現這種狀況?linux

只要使用Systemd這個進程做爲啓動進程的linux系統,其子進程都會有PrivateTmp這麼一個屬性,用於設置是否使用私有的tmp目錄。nginx

那麼只要設置使用這個屬性的service,都會使用私有的tmp目錄。centos

好比說:安全

  nginx會有一個systemd-private-xxx-nginx.service/tmp目錄php-fpm

    php-fpm會有一個systemd-private-xxx-php-fpm.service/tmp目錄post

 


使用PrivateTmp屬性有什麼好處嗎?spa

1.  見下圖,/tmp目錄通常是全部用戶和全部service都共享的,對於全部用戶和service來講,都會有寫和讀的權限。3d

那麼這裏會存在安全性的問題。把各個service的tmp目錄隔離開的話,能夠保證必定的安全性。

2.見下圖, 對於每一個service的tmp目錄,會在服務啓動(start)時建立該目錄,而且在關閉(stop)服務時刪除該目錄。若是咱們是使用本身定義的臨時目錄路徑的話,就須要咱們本身定義相關的維護機制了(如:按期刪除這些臨時文件等),而使用這個PrivateTmp的話,就不須要咱們本身去維護了。

 


怎麼設置這個PrivateTmp屬性呢?

打個比方,如今咱們要開啓 or 關閉 php-fpm 的這個屬性。

1. 利用systemctl找到對應的service路徑。

2 找到PrivateTmp並修改之。

ps:xx.service這種文件叫作unit文件,systemd把一個服務相關的啓動腳本叫作一個unit文件,若是要查看更多service文件的編寫規則,能夠搜索"systemd unit" or "systemd unit 文件編寫" 這類的關鍵字 or man systemd.unit 。

 

相關參考:

man systemd.exec 查找PrivateTmp關鍵字

https://lists.centos.org/pipermail/centos/2015-April/151589.html

http://0pointer.de/blog/projects/security.html

https://access.redhat.com/blogs/766093/posts/1976243

http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

相關文章
相關標籤/搜索