以下是该方案:
我有一个Web应用程序(php,mysql),它将pdf文件写入给定目录:/ var / www / myapp / tmp。然后我使用Gearman(从终端运行的工作人员php脚本)从这些pdf文件生成预览图像。 worker脚本可以访问/ etc / mount / tmp中的tmp目录,该目录符号链接到/ var / www / myapp / tmp目录(如果worker脚本与myapp在同一服务器上运行)或使用NFS挂载(如果worker脚本在不同的服务器上运行。)
该应用程序使用chmod 0777在tmp中创建子文件夹,在这些子文件夹中放置pdf文件。工作人员从共享的tmp目录中获取文件(没有问题),生成预览图像,然后将预览图像写入共享的tmp目录。
问题
我在本地运行所有内容时遇到此问题(客户端,作业服务器,工作者),因此使用符号链接的tmp文件夹:
子目录不可写,因此无法写入结果而工作程序失败。
现在,pdf文件由web app / gearman客户端编写,并由用户_www拥有。工作脚本不通过apache运行,并且在不同的所有者(我,在终端登录)下运行,这给了我这些权限问题。
我真的不明白为什么文件夹不可写,因为我使用0777权限创建了它。符号链接可以与此有关吗?
在任何情况下,我都不知道如何充分解决此问题,因此客户端和工作人员可以在同一文件夹中工作,而不会出现权限问题。有人可以帮忙吗?
更新
第一个问题似乎是umask,如果我将其设置为0,文件夹是可写的,但这仍然迫使我将权限设置为0777.如何更安全地处理这个问题?
答案 0 :(得分:1)
我遇到类似的情况,我需要apache和其他服务写入同一个文件夹。所以我选择将所有必要的用户添加到'filer'组,然后将rwx perms给予需要它们的文件夹上的filer组。
mpurcell@service1 ~ $ -> id apache
uid=48(apache) gid=48(apache) groups=48(apache),507(filer),509(logger)
mpurcell@service1 ~ $ -> id mpurcell
uid=500(mpurcell) gid=502(mpurcell) groups=502(mpurcell),10(wheel),501(webdev),507(filer),509(logger)
mpurcell@service1 ~ $ -> ls /home/db/permfile/
total 12
drwxrwsr-x. 3 filer filer 4096 Feb 13 2012 .
drwxrwxr-x. 4 filer filer 4096 May 5 2012 ..
drwxrwsr-x. 6 filer filer 4096 Dec 24 00:41 app
我还没有玩过Gearman,但是在你的具体情况下,无论是工作者运行的用户还是gearman服务,都需要添加到文件管理器组。