В настоящее время я настроил его так, что пользователи могут загружать zip-файлы с моего сайта, и они хранятся в /tmp/zip_file_dir/
. Скрипт PHP сначала загружает их с моего CDN, используя ftp_get()
а затем помещает их в эту папку, например /tmp/zip_file_dir/random_hash_folder/file_here.zip
. Тогда я просто использую readfile()
чтобы начать загрузку для пользователя. Все работает нормально.
Однако позже я использую cronjob, чтобы очистить эту папку (скрипт удаляет загрузки после readfile()
, но если пользователь отменяет сценарий загрузки, файлы не удаляются им, следовательно, задача cron - очистить их).
В file_here.zip
файл имеет разрешения -rw-r--r--
с владельцем apache
. Каждый random_hash_folder
в zip_file_dir
имеет разрешения drwxr-xr-x
с владельцем apache
. Cronjob просто сканирует zip_file_dir и использует rmdir()
и unlink()
для удаления файлов.
Cronjob запускает пользователь с доступом sudo к серверу (т.е.больше разрешений и возможностей, чем у apache
пользователь). Тем не менее, я продолжаю получать уведомления PHP «Permission denied» при попытке удалить файлы.
Я попытался добавить пользователя sudo, выполняющего задание cron, в apache
и nobody
группы, упомянутые в другом месте моего исследования Google, но это не принесло мне удачи.
Есть идеи, как мне получить эту cronjob для удаления этих файлов?
Изменить: я использую RHEL.
Вам не нужно больше разрешений и возможностей, чем пользователю Apache. Поскольку эти файлы создал пользователь apache, пользователь apache может их уничтожить. Пользователь apache кажется мне наиболее подходящим пользователем.
Вы можете либо поместить задание cron в crontab пользователя apache ( sudo crontab -u apache -e
) или запустите задание из crontab root от имени пользователя apache:
1 5 * * * su apache -c "/path/to/cleanup_script.php"
Выберите вариант, который поможет вам легче всего отслеживать ваши задания cron.
Вы можете запустить cronjob с веб-сервера Apache (так что в Cron вы помещаете только HTTP-вызов), а также вы можете убедиться, что все ваши права доступа к файлам и папкам равны 777 при их создании. При создании папки вы можете указать режим, и при создании файла вы можете сделать то же самое. Вы также можете использовать setacl в этой папке, чтобы у обоих пользователей было разрешение, и он распространяется вниз по папке, например:
# mkdir /tmp/zip_files
# chown apache:apache /tmp/zip_files
# chmod og-rwx /tmp/zip_files
# setfacl -m u:test:rwx zip_files/ # allow test user to enter the folder
# setfacl -m d:u:test:rwx zip_files/ # assure test permissions to created files and folders
# setfacl -m u:test:rwx zip_files/
# getfacl /tmp/zip_files
Где "test" - это ваш пользователь, от которого вы запускаете cron.
пс. Забудьте о sudo, для этого вам не нужен root-доступ.