允许 php/apache 删除 ftp 目录和子文件夹中的文件

允许 php/apache 删除 ftp 目录和子文件夹中的文件

基本上,我遇到了 php 脚本无法移动或删除文件的问题,我知道这与权限有关,因为 php 错误unlink()告诉我的就是这个,但我不确定如何修复它。所以我希望如果我解释一下这种情况,有人可能会给我指明正确的方向,因为我对 linux CLI 的东西还很陌生...

好的,我有一个 ftp dropbox 位置,假设它位于

/var/ftp/client/dropbox/

我已经用 创建了一个 ftp 帐户pure-ftpd。因此,当文件上传到此目录时,其所有者为ftp-user,其组为ftp-group,即pure-ftpd以 的身份运行。此目录的用户/组分别设置为ftp-userftp-group

因此,第三方脚本负责将报告(文件)发送到此 Dropbox 位置。ftp 帐户应该能够在此目录中创建子目录,以对文件进行分类。

例如,文件结构可能如下所示:

/var/ftp/client/dropbox/invoices/
/var/ftp/client/dropbox/invoices/bal_2013-06-01_2013-06-30.pdf
/var/ftp/client/dropbox/reports/
/var/ftp/client/dropbox/reports/visits/
/var/ftp/client/dropbox/reports/visits/bal_2013-06-01_2013-06-30.xlsx

“home”目录/var/ftp/client/dropbox/chmod 是drwxrwxr-x

当子目录(例如invoices/)由创建时ftp-user,它正在chmod获取drwxr-xr-x

当文件被上传(例如invoices/bal_2013-06-01_2013-06-30.pdf)时ftp-user,它正在chmod获取-rw-r--r--

同时...

我有一个 php 脚本位于

/var/www/client/

该脚本应该打开文件并执行诸如使用类别名称(子目录名称)和文件名等更新数据库之类的操作。到目前为止,一切都很好。但是……

问题就在这里……

然后,脚本应该根据原因移动或删除文件(但不删除子目录)。但是使用File::delete()(Laravel 4)或直接unlink()使用/path/to/file会返回“权限被拒绝”错误。

因此,从使用来看top,当我的脚本运行时,它(apache)在www-user和下运行www-group。它以不同的用户/组运行是有道理的。但我该怎么做才能授予 apache/php 移动/删除文件的权限?

我尝试过加入www-userftp-group组,但仍然出现“权限被拒绝”错误。根据研究,我怀疑也许这与粘滞位或其他东西有关,但我不确定,坦率地说,所有这些目录/文件权限的东西目前有点超出我的理解范围。

那么...对于这里该做什么有什么建议吗?

编辑

我有一个想法是,脚本删除/移动文件,我可以将 /path/to/files 插入数据库,以及需要执行的操作。然后有一个单独的脚本执行该操作,然后将该脚本放在 cronjob 上(root或者作为ftp-user.. 我可以这样做吗?我不确定..)。我认为这应该可行,但我不确定这样做是否是个好主意,似乎更好的解决方案是整理权限。

答案1

通过将 www 用户添加到 ftp 组,您走在正确的轨道上。不幸的是,您创建的文件没有设置组写入权限。因此只有所有者(ftp 用户)能够写入/删除它们。您还需要为组(ftp 组)创建具有写入权限的文件。(这将rw-rw-r--代替rw-r--r--

新文件的默认权限通过 来控制umask。Pure-FTP 在其配置文件中支持 umask 指令。实际上,您需要进入umask 113:003配置文件或-U 113:003命令行来获取正确的权限。

相关内容