Apache/php 无法访问远程 cifs/samba 共享

Apache/php 无法访问远程 cifs/samba 共享

我试图了解我的问题可能出在这里:

我正在使用基于 LAMP 构建的 Web 应用程序,该应用程序需要访问我已成功安装的 Samba 共享

mount -t cifs ...

在应用程序中,samba 共享无法像其他目录一样访问。但是,我可以通过终端正常访问它。这是 Apache 的权限问题吗?如果是,我该如何从远程计算机向 apache 授予权限?

答案1

这听起来确实像是一个权限问题 —— 无论哪个用户运行 Apache,都可能无权访问共享。

有几种方法可以解决这个问题,具体取决于托管 samba 共享的内容。最简单的方法是强制挂载时所有者和组为 Apache 用户/组。这会将系统上的特定用户/组映射到用于连接共享的用户凭据(其他人可以在这里提供更好的解释)。

假设您没有使用 suexec,Apache 可能以用户“www-data”的身份运行。如果 Apache 以任何其他用户身份运行,则必须修改以下命令,将 www-data 替换为适当的用户名和组名。

例子:

mount -t cifs -o user=smbusername,uid=www-data,gid=www-data //server/stuff /mnt/stuff/

挂载后,www-data 将显示为挂载点的所有者,并且 Apache 将能够读取它。

请注意,这将授予 Apache 你指定的任何权限smb用户名在 samba 服务器上。根据您要执行的操作,您可能希望将其挂载为只读,方法是将“ro”添加到选项中:

mount -t cifs -o user=smbusername,uid=www-data,gid=www-data,ro //server/stuff /mnt/stuff/

这可能会因您的 Apache 和 samba/cifs 版本而略有不同 - 如果它不起作用,请告诉我,以及您使用的操作系统和版本,我会尽力提供帮助。

相关内容