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

相关文章
相关标签/搜索