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

2024-03-16

我需要能够使用在 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)输出比解析数据的纯文本表示要容易得多。

如果您想继续安装文件系统,请首先拆分脚本。

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

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

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

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

Now the www用户有权限修改/etc/fstab文件。 (请注意,我还没有实际测试过addmntent(3)当 ACL 用于授予用户写访问权限时/etc/fstab.)一定要修改/etc/fstab始终安装/ with acl支持,因此这可以在重新启动后起作用。

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

包括user and noauto选项,以便您的脚本可以非特权运行,并且仍然在需要时挂载共享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用php从linux访问windows共享文件夹 的相关文章

  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • 关于加拿大短信网关提供商的建议[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我很好奇 如果我能够接受传入的短信到某个号码 然后将其传递给 PHP 中的服务器端应用程序 会带来多少麻烦 金钱 我最终会通过电子邮件地址发回短信 有
  • cURL 错误 77:设置证书验证位置时出错:CAfile

    我正在使用 Firebase php SDKlink https firebase php readthedocs io en latest index html并在 Windows 10 上的 XAMPP 服务器上使用 laravel 最
  • 如何在 Zend Framework 中存储 cron 作业的脚本?

    因为 ZF 的所有 URL 都依赖于 mod 重写 所以我并不清楚应该在哪里存储用于 cron 作业的本地脚本 有人有什么建议 或者有 正式接受 的方式吗 我用模块化目录结构 http framework zend com manual e
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • php - 我应该加密电子邮件地址吗?

    当用户注册时 我应该将他们的电子邮件按原样存储在数据库中还是对其进行哈希处理 我希望稍后能够解密 那么我应该使用 md5 吗 谢谢你 No md5 is 单向哈希函数 http en wikipedia org wiki Cryptogra
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • AWS S3 上传的图像已损坏

    我正在 AWS ec2 ubuntu 机器上工作 我的代码在 cakephp 中 当我尝试将任何图像上传到 AWS S3 时 它都会损坏 虽然它在核心 php 代码中运行良好 这是我的控制器代码 if this gt User gt sav
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 未捕获的异常“Google_IO_Exception”,消息为“HTTP 错误:无法连接”

    我有一个任务 查询 运行一些从 gmail 邮箱检索数据的 php 代码 直到上周五 2015 年 4 月 10 日 它一直工作正常 现在我收到以下错误日志 E 11 58 26 094 2015 04 15 200 3 38 KB 14
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 如何使用 Google 帐户对我们网站中的用户进行身份验证

    如何在我们的网站中使用 Google 帐户对用户进行身份验证 我希望用户重定向到谷歌登录页面 然后将他重定向到我的网站 我想要这个 PHP 实现 你要OAuth http code google com apis accounts docs
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function

随机推荐

  • C# - 无法在 lambda 表达式中使用“is”运算符

    我正在使用 AgileMapper 和以下代码 source Map OnTo target options gt options IgnoreSources options gt options If value gt value is
  • 如何将 2 个数据帧直方图合并到 1 个图中?

    我想使用显示数据框中所有直方图的代码 那将是df hist bins 10 但是 我想添加另一个显示 CDF 的直方图df hist df hist cumulative True bins 100 density 1 histtype s
  • 如何在 Angular 中包含本地库?

    当我创建一个Angular我想构建一个库 我可以在其中放置甚至在其他项目中也有用的组件 为了创建这个库 我做了另一个Angular我在其中生成了库项目并使用工作区中自动生成的应用程序项目来显示各个组件 ng new my component
  • 使用 netbeans 将 ArrayList 加载到 JCombobox 中

    目前有一个名为 ArrayList周日列表一旦框架加载添加学生已加载 GUI 的位 Netbeans自动生成的代码是 comboboxSunday new javax swing JComboBox comboboxSunday setMo
  • 如何在 firebase android 的 recyclerview / cardlayout 中显示最新帖子在顶部而不是底部?

    我对 Java 和 Firebase 完全陌生 正在从事一个大学项目 制作类似电子商务应用程序的东西 但不是字面上的 有点相似 到目前为止 我新插入的数据默认位于底部 我需要将它们放在顶部 在 stackoverflow 上尝试了所有可能的
  • HTML 音频元素第一次无法播放?

    我正在使用 htmlaudio我的一个项目中的一个元素 一旦按下播放按钮 我就会使用 VueJS 动态加载该元素的 src 一切似乎都工作正常 但是当我第一次按下按钮时 音频无法播放 我必须再次单击播放按钮才能开始播放 我怎样才能解决这个问
  • 如何使用 LayoutInflater / ViewStub 进行覆盖

    由于我实际上对以编程方式更改视图不太有信心 因此我遇到以下问题 在我的应用程序第一次启动时 我希望主屏幕有一个覆盖层 告诉用户查看设置 因为用户必须配置两个关键选项 我不想使用AlertDialog而不是使用向导 因此 我决定采用类似于 G
  • 添加外键错误

    我想从表中添加外键Customers row Customer ID 到餐桌宠物 row Customer ID Table structure for table Customers CREATE TABLE IF NOT EXISTS
  • 2D 变换过渡不适用于 IE11 中的 VW 和 VH 单位

    当我尝试使用过渡来为变换 TranslateY 制作动画时 我在 IE11 和 10 上遇到了一个奇怪的问题 我有一个天空盒 里面有一个天空 高度为 500vh 该天空必须根据视口中的当前部分上下移动 视口是一个绝对 位置元素 用于处理内容
  • Spring + Hibernate save() 不工作

    我在下面附上 Spring 服务 有问题 代码 Async public void performSeismicOperations Integer sessionUserId int seismicFileId String seismi
  • 在 Rails 6 中省略 bin/rails 路由中的操作邮箱、activestorage 和conductor 路由?

    我有一个全新的 Rails 6 应用程序 但没有anything in the config routes rb 输出bin rails routes有大量 ActiveStorage Action Mailbox 和 Conductor
  • 如何控制 .Net 在命名空间冲突中选择哪个程序集?

    由于某种原因 我需要 请耐心等待 使用 System Text Encoding 命名空间的 WinRT 版本 我可以手动添加对程序集的引用等 但它仍然会使用 mscorlib 的实现 而且我显然无法完全删除 mscorlib 如何强制我的
  • stargazer type = "html" 表输出中列之间的空格

    我正在寻找一种方法 或替代方案 来获取 stargazer html table 输出的列之间的空格 As stargazer stargazer mtcars type html 结果是 这不太好读 提前致谢 Samuel 您还可以将 C
  • 在 shell 中重命名多个文件[重复]

    这个问题在这里已经有答案了 我在一个目录中有多个文件 例如 linux file1 mp4 linux file2 mp4等等 如何使用 shell 移动这些文件 以便名称为file1 mp4 file2 mp4等等 我有大约 30 个文件
  • 显示来自 Rails 应用程序的 Twitter feed

    我已经能够让用户通过 OmniAuth 登录 Twitter 我遵循 Railscast 235 6 并制作了一个简单的应用程序 现在我正在尝试显示已登录用户的 Twitter 提要 谁能告诉我这是怎么做到的 如何初始化 Twitter 如
  • Git http.proxy 设置

    我试图弄清楚这个 git 问题 有一次我搞乱了 http proxy 变量 现在这只是废话 asdf 所以推动不起作用 我不知道之前的代理设置是什么 我什至不知道代理服务器是什么 有什么方法可以将 http proxy 设置为正确的值吗 现
  • 将 Zookeeper 从 3.3.X 升级到 3.4.X 时,我需要了解哪些信息?

    我有一个 Zookeeper 整体 我想从 3 3 X 分支升级到 3 4 X 分支 这可以在实时集群上完成吗 需要停机吗 有什么说明可以在某处找到吗 据我检查 升级 ZooKeeper 有哪些选项 流程 有两种主要方法可以做到这一点 1
  • 数据报总是被完整接收吗?

    大多数数据报接收函数 例如c的recv或read java的DatagramPacket类或python的SocketServer 都包含找出接收数据量的可能性 c int amount recv sock buf n MSG WAITAL
  • ASP.NET Web API - OWIN - TokenEndPointPath 在 IIS 中不起作用

    我的startup cs 中有以下代码 当 Web API 项目部署到 IIS 中网站的根目录时 在 IIS Express 中设置 TokenEndpointPath 效果非常好 但是 如果我托管在 IIS 中的嵌套应用程序 即网站内的应
  • 使用php从linux访问windows共享文件夹

    我需要能够使用在 Linux 服务器上运行的 php 脚本访问多个 Windows 服务器上的一些共享文件夹 我只需要获取文件夹中包含的文件的名称以及创建它们的时间戳 到目前为止 我想到的唯一解决方案是在 Linux 中安装共享并从那里访问