Выполнить код PHP от другого пользователя

rafaello

Новичок
Доброго дня!
Ребята, подскажите!
Есть код, который выполняется по крону, но так же его надо выполнять через браузер тоже.
Этот код содержит
PHP:
unlink($em_file['msg']);
Апач работает как www-data
Сам удаляемый файл принадлежит к другой группе (pmta : root или pmta : pmta) два варианта.
Получаю ошибку
HTML:
unlink(/etc/pmta/inbound/0005c06746ebc1e0.msg): Permission denied in .....
Дополнительно пробовал предварительно вводить
PHP:
chown($em_file['msg'], 'www-data');
chmod($em_file['msg'], 0777);
бесполезно тоже не работает, потому что не от root выполняется.
Также пробовал как описано здесь вводить строку
Форматирование (BB-код):
www-data ALL=(ALL:ALL) NOPASSWD: /var/www/roundcubemail/pmta-cron.php
но тоже не дало эффекта.
Подскажите, как сделать, чтобы и безопасно было и чтобы код выполнялся?
Повторюсь, код должен работать и от крона и в браузере (обычный файл .php)
 

fixxxer

К.О.
Партнер клуба
У roundcube есть api, наверное, надо его использовать, а не напрямую в файлы лазить?
 

rafaello

Новичок
Вобщем если долго мучаться, что нибудь получится.
решил вопрос вот так
PHP:
$file = '/etc/pmta/inbound/my-site.ru/0005c05785c419ae.msg';
$text = 'sudo unlink '.$file;

exec ($text);
 

AnrDaemon

Продвинутый новичок
Если MDA складывает файлы в одну папку, сделай ей
setfacl -m "u:www-data:X,d:u:www-data:rwX"
 

rafaello

Новичок
пробовал уже. Этот MDA под названием PowerMTA не работает с папками, если они ему не принадлежат..... Или pmta : pmta или pmta : root , других вариантов нет.
А так спасибо за подсказки!
Спасибо всем!
 

AnrDaemon

Продвинутый новичок
Она так и останется, просто будет дополнительная запись в ACL. Хотя, если MDA настолько бешеный, что как SSH, кроме 0600 ничего не принимает, сделайте тупой скрипт для перемещения файлов в какую-то другую папку.
 
Сверху