0

这是场景:

我有一个将 pdf 文件写入给定目录的 Web 应用程序(php、mysql):/var/www/myapp/tmp。然后我使用 Gearman(从终端运行的工作 php 脚本)从这些 pdf 文件生成预览图像。工作脚本可以访问 /etc/mount/tmp 中的 tmp 目录,该目录可以符号链接到 /var/www/myapp/tmp 目录(如果工作脚本与 myapp 在同一台服务器上运行)或使用 NFS 挂载在那里(如果工作脚本在不同的服务器上运行)。

该应用程序使用 chmod 0777 在 tmp 中创建子文件夹,在这些子文件夹中放置 pdf 文件。工作人员从共享 tmp 目录中抓取文件(那里没有问题),生成预览图像,然后应该将预览图像写入共享 tmp 目录。

问题

当我在本地运行所有内容(客户端、作业服务器、工作者)时,我遇到了这个问题,所以使用符号链接的 tmp 文件夹:

子目录不可写,所以我不能写结果,工作人员失败。

现在 pdf 文件由 web 应用程序/gearman 客户端编写,并归用户 _www 拥有。工作脚本不通过 apache 运行,而是在不同的所有者(我,在终端登录)下运行,这给了我我想的这些权限问题。

我真的不明白为什么该文件夹不可写,因为我使用 0777 权限创建了它。符号链接可以与此有关吗?

无论如何,我不知道如何充分解决此问题,以便客户端和工作人员都可以在同一个文件夹中工作而不会出现权限问题。任何人都可以帮忙吗?


更新

第一个问题似乎是 umask,如果我将其设置为 0,则文件夹是可写的,但这仍然迫使我将权限设置为 0777。我怎样才能更安全地处理这个问题?

4

1 回答 1

1

我遇到了类似的情况,我需要 apache 和其他服务写入同一个文件夹。因此,我选择将所有必要的用户添加到“文件管理器”组,然后将 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 服务都需要添加到文件管理器组中。

于 2013-02-20T18:41:23.243 回答