2015-11-02 3 views
1

Мне нужно добавить создание массивных объектов в Pimcore. Сначала я пробовал с помощью Интернета, но из-за большого размера набора, запрос, взятый долгое время, и подход отброшен на практике.Правильный способ выполнения расписания/cron

Затем я выбрал cron для расписания работы на более поздний период, но я получаю другую проблему. Как и некоторые другие приложения RAD, pimcore автоматически генерирует некоторый код в некоторых папках, таких как/website/var/versions. Таким образом, эти папки автоматически получают разрешение веб-пользователя (в моем случае apache пользователь).

Но мой скрипт cron, выполняемый обычным пользователем, который выполняет API Pimcore, вызывает создание объектов/данных, но не может писать в папках из-за недостаточных разрешений. Теперь у меня может быть один из двух вариантов.

  1. Запуск cron через пользователя apache, который не является большим по соображениям безопасности.
  2. Дайте права на запись (chmod 777 нравится или добавляйте моего пользователя в группу apache с помощью chown). Но pimcore создает новые папки время от времени, когда управляется из браузера. Таким образом, у этих новых папок нет разрешений на запись cron-скриптом (разрешение max 755, я получаю для новых папок, которых недостаточно для групповой записи).

Я искал ранее в google и нашел команду setfacl для настройки пользователя/разрешений по умолчанию для папки. Что я использовал так.

`sudo setfacl -Rm u:apache:rwx,d:u:apache:rwx website/var/versions/object` 

Но это не удалось, и мне нужно снова и снова разрешать вручную.

Теперь, если какой-либо практический подход для этого?

Примечание: В настоящее время я использую Amazon Linux AMI. Но это может быть позже изменено на redhat или ubuntu, поэтому лучше всего доступно универсальное решение linux.

+0

«Запускать cron через пользователя apache, который не является большим по соображениям безопасности». - Мне любопытно, почему ты так думаешь? – chluehr

+0

@chluehr. Мы видели практический пример взлома системы через apache cron на занятом сайте раньше. Этого достаточно для системных администраторов отключить apache cron. –

+0

ОК, я вижу, конечно - хотя, на мой взгляд, это сводится к защите скриптов php, которые должны запускаться через cron-скрипт. При этом не существует неотъемлемой/неизбежной опасности. Ваш пробег может варьироваться :-) – chluehr

ответ

2

Pimcore уже требует, чтобы его задания по обслуживанию (cron) выполнялись под пользователем apache, поэтому не выполнялось задание под пользователем apache, возможно, не сильно улучшилось.

Но вы можете пойти с подходом, который используется для отправки интегрированной рассылки.

См /pimcore/modules/reports/controllers/NewsletterController.php:194:

$cmd = Tool\Console::getPhpCli() . " " . realpath(PIMCORE_PATH . DIRECTORY_SEPARATOR . "cli" . DIRECTORY_SEPARATOR . "send-newsletter.php"). " " . escapeshellarg($letter->getName()) . " " . escapeshellarg(Tool::getHostUrl()); 
      Tool\Console::execInBackground($cmd, PIMCORE_LOG_DIRECTORY . "/newsletter--" . $letter->getName() . ".log"); 

Приведенный выше код запускает сценарий CLI /pimcore/cli/send-newsletter.php

При таком подходе cron не требуется, и поскольку задание выполняется как CLI, он не будет таймаутом (если вы явно не задали тайм-аут для PHP CLI).

+0

Если этот скрипт выполняется CLI, ему все равно нужен пользователь, который не будет иметь права писать в папках версий, имеющих разрешение только для пользователя Apache. Правильно ли я? –

+0

Нет, он будет работать под пользователем Apache, поэтому он должен иметь все права, которые вам нужны. Команда PHPs shell_exec запускает сценарии CLI у текущего пользователя - поэтому, если вы запускаете ее из действия контроллера, ее запускает пользователь Apache. –

+0

Проблема с сохранением безопасности. Функции Shell также отключены. –

Смежные вопросы