gpt4 book ai didi

php - 使用 php 从 linux 访问 windows 共享文件夹

转载 作者:搜寻专家 更新时间:2023-10-31 21:16:22 26 4
gpt4 key购买 nike

我需要能够使用在 Linux 服务器上运行的 php 脚本访问许多 Windows 服务器上的一些共享文件夹。我只需要获取文件夹中包含的文件的名称以及创建它们的时间戳。

到目前为止,我想出的唯一解决方案是在 Linux 中安装共享并从那里访问它。虽然这解决了问题,但我必须以 root 身份执行(据我所知),这意味着我要么必须以 root 身份运行脚本,这很愚蠢,要么手动挂载所有共享,这将是一个严重的痛苦从长远来看进行管理。

这引出了两个问题。

  1. 有人知道更好的方法吗?如果需要,我拥有所有机器的管理权限。
  2. 我必须在这里处理哪些安全问题?我需要克服根本问题,我需要保证linux/php脚本不能在windows机器上编辑/删除文件,但我猜可能比那些潜伏在黑暗中的问题更多。

最佳答案

数百台服务器来来去去的频率足够高,以至于编辑 /etc/fstab 以添加新文件系统绝对是一个烦人的约束。

如果您所做的只是在服务器上列出文件和修改时间,那么 smbclient(1) 命令是一个很好的起点。 smbclient(1) 很像 SMB 和 CIFS 共享的 FTP 接口(interface)。 -c 命令行选项允许您运行特定命令;像这样的东西:

smbclient //$servername/$sharename -c "dir path/to/directory/"

如果您要对文件做更多的事情而不仅仅是列出修改时间,那么将共享安装为文件系统将减少连接和身份验证请求的数量,并且可能使解析 stat(2) 输出比解析数据的纯文本表示要容易得多。

如果您想沿着安装文件系统的路线前进,请首先拆分您的脚本。

一小部分应该包含服务器名、共享路径和可选的挂载路径;它将(服务器、共享、路径)添加到 /etc/fstab

这部分可以是 setuid root。 (这很危险,但胜过以 root 身份运行整个 PHP 脚本。)

或者,您可以使用 acl(5) 支持挂载您的文件系统并添加一个新的访问控制条目:

mount / -oremount,acl
setfacl -m www::rw /etc/fstab

现在 www 用户有权限修改 /etc/fstab 文件。 (请注意,当使用 ACL 为用户提供对 /etc/fstab 的写入访问权限时,我还没有实际测试 addmntent(3)。)一定要修改 /etc/fstab 以始终使用 acl 支持挂载 /,因此这适用于重新启动。

您可以使用 addmntent(3) C 库函数将新条目添加到 /etc/fstab。如果您要使用 setuid root 可执行文件,我会选择 C ​​而不是脚本语言,而且我可能会选择 C ​​而不是脚本语言,因为 addmntent(3) 已经知道如何将格式正确的挂载条目写入 /etc/fstab

包括 usernoauto 选项,这样您的脚本就可以在非特权状态下运行,并且仍然可以在需要时挂载共享。

关于php - 使用 php 从 linux 访问 windows 共享文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com