Joy*_*abu 5 systempath systemd
我在php-fpm
启用 PrivateTmp 的情况下使用。我必须从 PHP 读取一个文件,该文件由远程部署代理复制到/tmp
目录中。由于启用了 PrivateTmp,我无法直接访问/tmp
目录。
/tmp
启用 PrivateTmp 时,是否可以从系统文件夹中读取文件?我尝试创建指向/tmp
at的符号链接/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 中,该 PrivateTmp 仍然与系统的其余部分分开。
如果您不能这样做:不要将文件存储在系统中/tmp/
,只需将其放置/移动到另一个位置...
您可以用来nsenter
在网络命名空间内运行命令。
例如,如果您想查看 apache2 服务的 /tmp 内的文件,您可以执行以下操作:
pid=$(systemctl show --property=MainPID --value apache2.service)
nsenter -t $pid -m ls /tmp
Run Code Online (Sandbox Code Playgroud)
这将ls /tmp
在 apache2 进程运行的挂载命名空间内运行。
此外,私有 tmp 目录当前位于类似于/tmp/systemd-private-*-apache2.service-*
某种*
id 的路径。尽管您可能不应该依赖特定的格式或位置。
归档时间: |
|
查看次数: |
5208 次 |
最近记录: |