Назад | Перейти на главную страницу

позволяя php / apache удалять файлы в каталоге ftp и подпапках

В принципе, у меня проблема с тем, что скрипт php может перемещать или удалять файлы, и я знаю, что это связано с разрешениями, так как это ошибка php из unlink() говорит мне, но я не знаю, как это исправить. Так что я надеюсь, что если я объясню ситуацию, кто-то может указать мне правильное направление, потому что я новичок, когда дело касается Linux CLI ...

Хорошо, у меня есть местоположение Dropbox для ftp, допустим, оно находится в

/var/ftp/client/dropbox/

И я создал учетную запись ftp с pure-ftpd. Поэтому, когда файл загружается в этот каталог, его владельцем становится ftp-user и его группа ftp-group, который является то, что pure-ftpd работает как. Пользователь / группа этого каталога настроена как ftp-user и ftp-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

"Домашний" каталог /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-user в ftp-group group, но по-прежнему выдает ошибку "Permissions denied". Из исследований я подозреваемый возможно, это связано с липким битом или чем-то в этом роде, но я не уверен, и, честно говоря, вся эта штука с разрешениями на каталоги / файлы сейчас немного не по мне ...

Су ... есть какие-нибудь советы, что здесь делать?

редактировать

У меня была одна мысль: вместо того, чтобы иметь этот script удаляет / перемещает файлы, я мог бы вставить / путь / к / файлам в базу данных вместе с тем, какие действия необходимо выполнить. А затем создайте отдельный сценарий, который выполняет действие, а затем поместите этот сценарий в cronjob как root (или как ftp-user.. могу ли я сделать это? Я не уверен..). Я думаю, что это должно сработать, но я не уверен, что это хорошая идея, и кажется, что лучшим решением было бы разобраться с разрешениями ..

Вы на правильном пути, добавив www-пользователя в ftp-группу. К сожалению, для создаваемых вами файлов не установлены права на запись для группы. Таким образом, только владелец (ftp-пользователь) может записывать / удалять их. Вам также необходимо, чтобы эти файлы были созданы с правами записи для группы (ftp-group). (Это было бы rw-rw-r-- вместо того rw-r--r--)

Разрешения по умолчанию для новых файлов контролируются с помощью так называемого umask. Pure-FTP поддерживает директиву umask в своем файле конфигурации. По сути, вы захотите войти umask 113:003 в файл конфигурации или -U 113:003 в командной строке, чтобы получить правильные разрешения.