通过 Web 界面在 Linux 上安装 CIFS 共享
Mounting CIFS share on Linux by webinterface
我拼命尝试通过 Web 用户界面在 Debian 10 机器上安装 CIFS 共享,并让整个系统都可以访问它。挂载命令执行成功,但挂载点未在 /etc/mtab 或 /proc/mounts 中列出,因此挂载命令也未显示。
我正在使用 apache2 作为网络服务器,我尝试了不同的方法,但都得到了相同的结果。
目标是将 php-script 与 Apache 或 Nginx 一起使用,以安装对整个 OS 有效且可见的共享,就像我在命令行上使用 mount 命令一样.
我尝试过使用 mount.php 调用 bash 脚本来挂载共享的不同方法:
- 将 www-data 添加到没有密码的 sudoers 并调用包含 "sudo mount ..."
的脚本
- 使用了一个以 root 身份执行的 c 编译包装器,它调用了一个 bash 脚本来装载共享
- 已安装 php-fpm 并带有启用 root 的套接字以调用 bash 脚本
- 让 bash-脚本将共享添加到 /etc/fstab 并执行 mount -a
如果从命令行调用,所有这些方法都可以正常工作,即使是作为 www-data 用户调用(如果可能)。
它们似乎都在通过 Web 界面调用时挂载共享,因为如果我使用相同的技术在网站的 php 脚本中不带任何参数启动挂载,则会列出挂载应该如此。此外,第二次尝试通过 Web 界面装载共享时会显示设备正忙的消息。
但是当我在命令行上使用不带任何参数的 mount 命令时,挂载点没有列出,我也没有在 /etc/mtab 或 /proc/mounts 中找到它。
在最后一种方法中,我让脚本编辑 /etc/fstab 并调用 'mount -a' 行为完全相同(在 Web 界面中列出,但不在命令行中列出),但是当我重新启动共享按预期安装并可见。
所以我非常确定我忽略了 apache2 在其中运行的某种用户空间/沙箱/终端限制,这对 mount 命令有一些影响。奇怪的是,因为我什至可以用脚本编辑 /etc/fstab 并且似乎对所有内容都有 root 访问权限 - 甚至可以挂载,否则它根本不会启动。但是无论如何,当通过 Web 界面调用时,mount 命令似乎将它的 mount-results 写在其他地方。
有没有人给我指出正确方向的想法?`
提前致谢,
阿克塞尔
如果您在权限方面遇到问题,并且不想深入研究,我建议在 PHP 中使用简单的写入文件功能,然后使用 CRON JOB 执行脚本,如果找到那个文件,删除它,然后执行你想要的功能。该 cron 作业在整台计算机上不应有任何权限问题。
Apache2 有一个 属性 "PrivateTmp" 设置在 /etc/systemd/multi-user.target.wants/apache2.service 中。尝试通过在该行前面放置井号 (#) 来对其进行注释。
装载使用临时文件夹,如果 Apache 使用私有临时文件夹,它可能不会出现在装载列表中。
我拼命尝试通过 Web 用户界面在 Debian 10 机器上安装 CIFS 共享,并让整个系统都可以访问它。挂载命令执行成功,但挂载点未在 /etc/mtab 或 /proc/mounts 中列出,因此挂载命令也未显示。
我正在使用 apache2 作为网络服务器,我尝试了不同的方法,但都得到了相同的结果。
目标是将 php-script 与 Apache 或 Nginx 一起使用,以安装对整个 OS 有效且可见的共享,就像我在命令行上使用 mount 命令一样.
我尝试过使用 mount.php 调用 bash 脚本来挂载共享的不同方法:
- 将 www-data 添加到没有密码的 sudoers 并调用包含 "sudo mount ..." 的脚本
- 使用了一个以 root 身份执行的 c 编译包装器,它调用了一个 bash 脚本来装载共享
- 已安装 php-fpm 并带有启用 root 的套接字以调用 bash 脚本
- 让 bash-脚本将共享添加到 /etc/fstab 并执行 mount -a
如果从命令行调用,所有这些方法都可以正常工作,即使是作为 www-data 用户调用(如果可能)。
它们似乎都在通过 Web 界面调用时挂载共享,因为如果我使用相同的技术在网站的 php 脚本中不带任何参数启动挂载,则会列出挂载应该如此。此外,第二次尝试通过 Web 界面装载共享时会显示设备正忙的消息。
但是当我在命令行上使用不带任何参数的 mount 命令时,挂载点没有列出,我也没有在 /etc/mtab 或 /proc/mounts 中找到它。
在最后一种方法中,我让脚本编辑 /etc/fstab 并调用 'mount -a' 行为完全相同(在 Web 界面中列出,但不在命令行中列出),但是当我重新启动共享按预期安装并可见。
所以我非常确定我忽略了 apache2 在其中运行的某种用户空间/沙箱/终端限制,这对 mount 命令有一些影响。奇怪的是,因为我什至可以用脚本编辑 /etc/fstab 并且似乎对所有内容都有 root 访问权限 - 甚至可以挂载,否则它根本不会启动。但是无论如何,当通过 Web 界面调用时,mount 命令似乎将它的 mount-results 写在其他地方。
有没有人给我指出正确方向的想法?`
提前致谢, 阿克塞尔
如果您在权限方面遇到问题,并且不想深入研究,我建议在 PHP 中使用简单的写入文件功能,然后使用 CRON JOB 执行脚本,如果找到那个文件,删除它,然后执行你想要的功能。该 cron 作业在整台计算机上不应有任何权限问题。
Apache2 有一个 属性 "PrivateTmp" 设置在 /etc/systemd/multi-user.target.wants/apache2.service 中。尝试通过在该行前面放置井号 (#) 来对其进行注释。
装载使用临时文件夹,如果 Apache 使用私有临时文件夹,它可能不会出现在装载列表中。