【问题标题】:PHP Linux + Windows - Shares and PermissionsPHP Linux + Windows - 共享和权限
【发布时间】:2012-12-17 01:59:08
【问题描述】:

我们有一个将数据写入 Linux 节点的 Windows 主实例,目前运行良好。 windows 上运行的 PHP 文件可以使用简单的脚本写入 linux 机器,如下所示:

file_put_contents('\\\\hostname\\share\\testfile.txt', 'testing123');

linux节点存储了windows php用户,并允许写入文件。但是,我们希望能够在 linux 机器上做同样的事情,并写入 windows 实例上的共享文件夹。与上面相同的行,但带有 windows 主机和共享,仍然返回 true,但实际上并没有创建文件。

  • 如果它不起作用,为什么该行返回 true?这使得调试和测试错误变得非常困难。
  • 我们怎样才能让脚本工作?是在linux中挂载windows共享的解决方案吗?这似乎不是一个合适的解决方案,因为我们可能会更改 Windows 共享或添加新的共享,我们不想在每个 linux 实例上继续挂载和卸载共享。

我们已将linux用户添加到windows共享权限,但似乎不起作用。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • If it didn't work, why does the line return true? - 因为 CIFS/SMB 很糟糕。 How can we get the script to work? - 为 Windows 机器上的共享分配全局可写权限。这涉及为文件系统共享(两个单独的对话框)上的Everyone 组和/或Guest 用户分配写入权限。 linux 机器未针对 DC 进行身份验证,并且它尝试使用的访问是匿名的。或者,您可以通过exec()输入 samba 二进制文件并提供凭据来实现。或者,就我个人而言,我会使用更好的协议。见第 1 点。
  • 我对您的问题没有答案,但为了您的测试理智,请阅读file_put_contents() 的文档。它返回int,而不是boolean。诚然,如果它返回 0,它仍应评估为 false,除非您使用的是 ===

标签: php linux windows permissions samba


【解决方案1】:

我正在处理的一个项目只是挂载 Windows 共享。我们在 /etc/fstab 文件中有条目,这些条目会在机器启动时自动挂载共享。例如:

//alpha/inetpub  /mnt/alpha  cifs  credentials=/root/credentials,_netdev,file_mode=0644,dir_mode=0755,uid=1000,gid=1000,rw  0  0
//beta/inetpub   /mnt/beta   cifs  credentials=/root/credentials,_netdev,file_mode=0644,dir_mode=0755,uid=1000,gid=1000,rw  0  0

在我们的环境中,Windows 共享永远不会更改名称。我们的 Linux 实例不需要访问所有 Windows 共享,因此我们只需为需要访问任何新共享的实例更新 fstab 文件。

凭证文件是一个简单的文本文件,格式如下:

username=SOME_USERNAME
password=THE_PASSWORD_FOR_USERNAME

当用户可能在没有root 访问权限的情况下查看其他脚本/文件时,这只是一种确保用户名/密码对安全的简单方法。

【讨论】:

  • 可能必须使用此选项,请您再解释一下凭据参数吗?我了解文件和目录模式,但我将如何更改应挂载共享的用户?谢谢
  • 没关系,我想通了,https://wiki.ubuntu.com/MountWindowsSharesPermanently 的页面帮了很多忙。
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 2011-09-07
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2014-08-22
相关资源
最近更新 更多