繁体   English   中英

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

[英]Access windows shared folders from linux with php

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

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

这导致两个问题。

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

拥有数百台服务器的频率非常高,编辑/etc/fstab来添加新的文件系统绝对是一个烦人的约束。

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

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

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

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

一小部分应该采用servername,share path和可选的mount路径; 它将(服务器,共享,路径)添加到/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) ,我实际上没有测试过addmntent(3) 。)确保修改/etc/fstab以始终挂载/使用acl支持,这样就可以了重新启动。

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

包括usernoauto选项,以便您的脚本可以运行非特权,并且仍然可以根据需要安装共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM