В принципе, у меня проблема с тем, что скрипт 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
в командной строке, чтобы получить правильные разрешения.