对 root 用户隐藏挂载

对 root 用户隐藏挂载

我在挂载方面遇到了一个奇怪的问题。root 用户无法看到由以 root 身份运行 bash 脚本的 PHP/Apache 创建的挂载。

重现问题的步骤:

  • 为挂载点配置 fstab:

    /etc/fstab 文件

    /path_to_shared/resource /path_to_local/folder 自动默认值,nofail,nobootwait,bind 0 2

  • 创建一个 Bash 脚本。

  • 配置 Apache 以便能够以 root 身份运行 bash 脚本。
  • 在 bash 脚本中挂载共享资源:挂载 /path_to_local/folder

配置 apache 以便能够以 root 身份运行脚本的步骤:

  • 维苏多
  • www-数据 ALL=(全部) NOPASSWD: /path_to_script/script.sh *

然后我从 PHP/Apache 运行脚本(/path_to_script/script.sh)。

当脚本完成后,root 无法看到已挂载文件夹 (/path_to_local/folder) 内的已挂载资源 (/path_to_shared/resource) 的内容。

如果我以 root 身份手动运行相同的命令,那么 root 就可以看到挂载内容。但是当通过 Apache 运行该命令时,root 无法看到挂载的内容,而 Apache 可以看到挂载的内容。

示例 1:

在此示例中,Apache 用户能够看到使用 bash 脚本挂载的文件夹的内容。

PHP/Apache 获取目录列表:

scandir(“/path_to_local/folder”)

显示 /path_to_shared/resource 的内容。

示例 #2:

在此示例中,root 用户无法看到 Apache 挂载的文件夹的内容。

root@server〜: ls -al / path_to_local /文件夹

不显示任何文件夹内容。

示例 3:

在此示例中,root 用户手动运行 mount 命令。执行此操作后,root 用户可以看到挂载。此示例用于说明从命令提示符以 root 身份运行的相同命令是否有效。

root@server~: 挂载 /path_to_local/folder

root@server〜: ls -al / path_to_local /文件夹

显示 /path_to_shared/resource 的内容。

附加更新

我找到了原因,但我不知道合适的解决方案是什么。显然,Apache 将 PrivateTmp 设置设置为 true。如果我将其设置为 false,它就会按我的预期工作。但是,这样做显然会给我带来 /tmp 文件夹的安全问题。我找到的信息来自类似的问题/答案:https://stackoverflow.com/questions/32869660/bind-mount-not-visible-when-created-from-a-cgi-script-in-apache

我更愿意实时创建挂载,而不是等待 crontab 事件。除非我能想出实时解决方案,否则我将从 Apache 脚本中删除挂载命令,并使用 crontab 事件创建挂载。

相关内容