以下是场景:
我有一个web应用程序(php,mysql),它将pdf文件写入给定的目录:/var/www/myapp/tmp。然后,我使用Gearman(从终端运行worker php脚本)从这些pdf文件中生成预览图像。工作脚本可以访问/etc/mount/tmp中的tmp目录,该目录要么符号链接到/var/www/myapp/tmp目录(如果工作脚本与myapp在同一服务器上运行),要么使用NFS安装在那里(如果工作剧本在不同服务器上运行的话)。
该应用程序使用chmod 0777在tmp中创建子文件夹,在这些子文件夹中放置pdf文件。工作人员从共享tmp目录中获取文件(没有问题),生成预览图像,然后应该将预览图像写入共享tmp文件夹。
问题
当我在本地运行所有内容(客户端、作业服务器、工作程序)时,我会遇到这个问题,所以使用符号链接的tmp文件夹:
子目录是不可写的,所以我不能写结果,工作程序失败了。
现在,pdf文件由web应用程序/gearman客户端编写,归用户_www所有。worker脚本不通过apache运行,而是在另一个所有者(我,在终端登录)下运行,我想这会给我带来这些权限问题。
我真的不明白为什么文件夹不可写,因为我使用0777权限创建了它。符号链接与此有关吗?
无论如何,我不知道如何充分解决这个问题,这样客户端和工作人员就可以在同一个文件夹中工作,而不会出现权限问题。有人能帮忙吗?
更新
第一个问题似乎是umask,如果我将其设置为0,文件夹是可写的,但这仍然迫使我将权限设置为0777。如何更安全地处理此问题?
我遇到了类似的情况,我需要apache和其他服务来写入同一个文件夹。因此,我选择将所有必要的用户添加到"filer"组,然后在需要它们的文件夹上为filer组提供rwx置换。
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服务,都需要添加到filer组中。