Apache:“我挂载了!”Root:“我没有挂载啊。”Apache:“你挂载了啊!还能看到文件!”
root: “不是的。让我来当apache吧。”
su apache: “不是的。”
得出的結論
在Systemd入门(5) – 查看PrivateTmp的实现 – 仔细记录中,所有内容都有详细说明。结束!
这仅适用于从systemd启动的进程的设置。如果按照常规操作,会导致更改系统上所有进程的文件系统状态。在这里介绍的是“文件系统的命名空间”(以下简称为“命名空间”)功能。使用它,可以将每个进程的文件系统配置状态(挂载状态)分开。systemd通过此功能仅修改启动进程可见的文件系统配置状态(挂载状态)。
请用中文将以下内容进行改述,只需要一个选项:
“I really enjoy listening to music, especially when I’m feeling stressed or tired. It helps me relax and unwind.”
私有临时目录(PrivateTmp)的功能也是通过使用命名空间实现的。它会创建一个名为“/tmp/systemd-private-XXXXXX”(XXXXXX是随机数)的空目录,并将/tmp目录绑定到该目录中。这样,对于该进程而言,/tmp的内容就是/tmp/systemd-private-XXXXXX中的内容。/var/tmp也会被绑定到另一个空目录中,同样的方式。
解句:
此外,从这个Shell中可以看到,/tmp被绑定挂载,但是如果从另一个终端登录,就看不到这个条目。这表明文件系统的namespace是分离的。
只需要一种选择,请用中文原生语言来改写以下内容:
在程序中,我已经在注释中指明了具体进行命名空间分离的部分(*1)。在对命名空间进行分离之后,我在(*2)中给/下面添加了一个标记为“MS_SLAVE”。这意味着在该命名空间中进行的更改(如额外的绑定挂载)不会反映到原始的命名空间中。通过这样做,(*3)的绑定挂载仅在此进程的命名空间中执行,并对其他进程不可见。
“Please pass me the pen.” – 请把笔递给我。
使用PrivateTmp启动进程时,正如前文所述,即使该进程进行了附加的绑定装载,其他进程也无法看到该装载。
将”/usr/lib/systemd/system/httpd.service”中的PrivateTmp=true改为PrivateTmp=false,问题就不会出现了。
如果其他一些功能也是true的话,可能会发生相同的情况。
私有临时文件系统(PrivateTmp)的规格,或者说副作用是通过浏览器(Apache)执行的挂载只能从该进程中访问。
通过在进程内挂载,可以将其配置为只读,或者将 “/tmp” 挂载到 “/tmp/systemd-private-XXXXXX”,从而实现对 “/tmp” 的私有临时文件系统(privateTmp)。在此过程中,可以使用类似 PHP 的命名空间来使其他进程与挂载状态相互独立。
由于这种影响会持续存在于进程中,因此即使在PHP中执行`exec(‘mount hogehoge’)`,该挂载只会发生在相同的命名空间进程中,而不会在其他进程中挂载。
因此,无论是在终端的root用户还是apache用户上,都无法看到挂载情况。
环境
-
- CentOS7 64bit
-
- Apache/2.4.6 (CentOS)
- systemd 219
问题
写着的代码 (xiě zhe de
使用浏览器输入的内容进行挂载,并可在浏览器中查看文件列表,或通过批处理进行数据读写操作。
在升级至CentOS 7之前有可靠的运行记录。
发生的事情 de
在批处理中,挂载区域内的处理失败。
换句话说,我会通过运行mount命令来确认是否已经挂载,如果没有挂载,那么处理将不会进行。
尽管通过SSH登录并检查,但通过手动的mount命令或df命令仍然无法确认。然而,通过浏览器确认时,可以发现即使是相同的mount检查代码,也能正确地确认其已经成功挂载。
不只可以在Apache上mount,而且只有在Apache上可以确认mount的状态,其他地方无法确认。(可以在Apache和终端上分别mount到同一区域)
确定的方法 de
由于我们将最小的PHP构建放置在公开区域,并在浏览器中访问和手动执行时出现了问题,所以我们将其归因于Apache的问题。
<?php
exec('/usr/bin/sudo /bin/mount -t nfs 192.168.1.123:/nas /nas');
echo shell_exec('/usr/bin/sudo /bin/mount');
私有的临时文件目录(PrivateTmp)在调试时的文件写入中出现问题,但由于在除调试外的情况下不会向/tmp目录写入而被忽略,结果是一个陷阱。
请看?:
请尽快避免落入坑中并哭泣的CentOS7陷阱,仅包括禁用PrivateTmp的方法和其他陷阱- Qiita。
尽管我先查看了这里的/tmp问题却忘记了,结果陷入困境并泪流满面。