【问题标题】:Mounting CIFS share on Linux by webinterface通过 Web 界面在 Linux 上挂载 CIFS 共享
【发布时间】:2020-03-23 17:29:02
【问题描述】:

我正在拼命尝试通过 Web 用户界面在 Debian 10 机器上挂载 CIFS 共享,并让整个系统都可以访问它。 mount 命令执行成功,但挂载点未在 /etc/mtab 或 /proc/mounts 中列出,因此 mount 命令也未显示。

我使用 apache2 作为网络服务器,我尝试了不同的方法,结果都一样。

我们的目标是使用 Apache 或 Nginx 的 php 脚本来挂载一个对整个操作系统有效且可见的共享,就像我在命令行上使用 mount 命令一样。

我尝试了不同的方式来调用一个调用 bash 脚本来挂载共享的 mount.php:

  • 在没有密码的情况下将 www-data 添加到 sudoers 并调用包含“sudo mount ...”的脚本
  • 使用了一个 c 编译的包装器,它以 root 身份执行,它调用一个 bash 脚本来装载共享
  • 安装了 php-fpm 并带有启用 root 的套接字来调用 bash 脚本
  • 让 bash 脚本将共享添加到 /etc/fstab 并执行 mount -a

如果从命令行调用,所有这些方法都可以正常工作,即使作为 www-data 用户调用(如果可能)。

当通过 Web 界面调用时,它们似乎也都挂载了共享,因为如果我使用相同的技术从网站的 php 脚本中启动没有任何参数的挂载,则挂载会按应有的方式列出。此外,再次尝试通过 Web 界面挂载共享会显示设备正忙的消息。

但是当我在命令行上使用不带任何参数的挂载命令时,挂载点没有列出,我也没有在 /etc/mtab 或 /proc/mounts 中找到它。

在最后一种方法中,我让脚本编辑 /etc/fstab 并调用“mount -a”,行为完全相同(在 Web 界面中列出但不在命令行中),但是当我重新启动共享已按预期安装且可见。

所以我很确定我忽略了运行 apache2 的某种用户空间/沙箱/终端限制,这对 mount 命令有一些影响。奇怪的是,因为我什至可以使用脚本编辑 /etc/fstab 并且似乎对所有内容都具有 root 访问权限 - 甚至可以挂载,否则它根本不会启动。但无论如何,当通过 Web 界面调用时,mount 命令似乎将它的 mount-results 写入其他地方。

有没有人能指出我正确的方向?`

提前致谢, 阿克塞尔

【问题讨论】:

    标签: php linux bash mount


    【解决方案1】:

    Apache2 有一个属性“PrivateTmp”,它在 /etc/systemd/multi-user.target.wants/apache2.service 中设置。尝试通过在该行前面放置一个井号 (#) 来对其进行注释。

    挂载使用临时文件夹,如果 Apache 使用私有临时文件夹,它可能不会出现在挂载列表中。

    【讨论】:

    • 是的,这就是解决方案。谢谢。
    【解决方案2】:

    如果您遇到权限问题,并且不想深入研究,我建议在 PHP 中使用简单的写入文件功能,然后使用 CRON JOB 执行脚本,如果找到该文件,将其删除,并执行您想要的功能。该 cron 作业在整台计算机上不应该有任何权限问题。

    【讨论】:

    • 谢谢,这不是我想要的,因为在我们的例子中,cron 作业必须经常运行,但它是一种创造性的解决方法。我会试试的。
    • 这种使用 cronjob 的解决方法确实有效,但它的缺点是由于 cron 的粒度,它需要长达一分钟才能开始 cronjob。
    • 你总是可以制作一个永远运行的小脚本,然后休眠任意时间来检查它。我使用 MySQL 来存储“命令”和“消费者”来检索和执行正确的脚本/操作。该文件再次是一个肮脏的快速解决方案。祝你好运。
    猜你喜欢
    • 2014-07-09
    • 2015-03-15
    • 2021-11-09
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2016-04-28
    • 2015-02-20
    相关资源
    最近更新 更多