基本上,我有一个PHP脚本能够移动或删除文件的问题,我知道它必须做的权限,因为这是来自unlink()的PHP错误告诉我,但我不知道如何修理它。 所以我希望如果我解释的情况下,有人可能会指出我在正确的方向,因为我是一个noob当谈到Linux CLI的东西…
好吧,我有一个ftp dropbox位置,让我们说它位于
/var/ftp/client/dropbox/
我已经用pure-ftpd创build了一个ftp帐户。 所以当一个文件被上传到这个目录时,它的所有者是ftp-user ,它的组是ftp-group ,这是pure-ftpd运行的。 这个目录的用户/组分别被设置为ftp-user和ftp-group 。
因此,第三方脚本负责将报告(文件)发送到此保pipe箱位置。 ftp账号应该能够在这个目录下创build子目录,对这些文件进行分类。
例如,文件结构可能如下所示:
/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创build时,它获得了drwxr-xr-x chmod
当ftp-user上传一个文件(例如invoices/bal_2013-06-01_2013-06-30.pdf )时,它会得到chmod -rw-r--r--
与此同时…
我有一个PHP脚本位于说
/var/www/client/
该脚本应该打开文件,并使用类别名称(子目录名称)和文件名等更新数据库等东西,迄今为止这一切都很好。 然而….
所以这是问题
那么脚本应该根据原因移动或删除文件(而不是子文件)。 但是使用File::delete() (Laravel 4)或者直接在/path/to/file上unlink()会返回“permissions denied”错误。
所以,从使用top来看,当我的脚本运行时,它(apache)在www-user和www-group下运行。 有道理,它将作为一个不同的用户/组运行。 但我能做些什么来给予Apache / PHP的权限移动/删除文件?
我曾尝试将www-user放在ftp-group组中,但仍然给我“权限被拒绝”的错误。 从研究中,我猜想可能是粘滞点或者其他什么,但是我不确定,坦率地说,目前所有这些目录/文件许可的东西都略微凌驾于我的头上。
那么…有什么build议在这里做什么?
编辑
有一个想法是,不是让这个脚本删除/移动文件,而是将/ path / to /文件插入到数据库中,以及需要执行的操作。 然后有一个单独的脚本来执行这个动作,然后把这个脚本放在一个cronjob上(或者是ftp-user ..我可以这样做吗?我不确定..)。 我认为这应该工作,但我不知道这是否是一个好主意,似乎更好的解决scheme是解决权限..
通过将www用户添加到ftp-group,您正处于正确的轨道上。 不幸的是,您正在创build的文件没有设置组写入权限。 所以只有所有者(ftp-user)能够写/删除它们。 您还需要为这个组(ftp-group)创build具有写权限的文件。 (这将是rw-rw-r--而不是rw-r--r-- )
新文件的默认权限通过称为umask东西来控制。 Pure-FTP在其configuration文件中支持一个umask指令。 实质上,您需要在configuration文件中inputumask 113:003 ,或者在命令行中input-U 113:003 ,以获得正确的权限。