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


    如下图,在开发调试的时候会遇到这么一个问题。

    file_put_contents时,$tmp_file显示的目标文件是/tmp/xxx.而这个文件实际放在linux的目录却是/tmp/systemd-private-xxxxx-php-fpm.service/xxx(见图二)


    为什么会出现这种情况?

    只要使用Systemd这个进程作为启动进程的linux系统,其子进程都会有PrivateTmp这么一个属性,用于设置是否使用私有的tmp目录。

    那么只要设置使用这个属性的service,都会使用私有的tmp目录。

    比如说:

      nginx会有一个systemd-private-xxx-nginx.service/tmp目录

        php-fpm会有一个systemd-private-xxx-php-fpm.service/tmp目录


    使用PrivateTmp属性有什么好处吗?

    1.  见下图,/tmp目录一般是所有用户和所有service都共享的,对于所有用户和service来说,都会有写和读的权限。

    那么这里会存在安全性的问题。把各个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

  • 相关阅读:
    爬虫大作业
    作业
    新练习
    爬虫新练习
    最新操作
    小练习
    Hadoop综合大作业
    理解Mapreduce
    熟悉常用的HBase操作
    第三章 熟悉常用的HDFS操作
  • 原文地址:https://www.cnblogs.com/lihuobao/p/5624071.html
Copyright © 2020-2023  润新知