ОС Debian, Nginx
Я не особый знаток php, поэтому вопрос возможно глупый.
Можно ли как-то запустить bash скрипт с помощью php кода, не используя exec, shell_exec,..?
Если надо задать права на выполнение одной команды используя sudo - без проблем.
Просто не хочется уж сильно проседать по безопасности.
--------------------
Дополнительный вопрос: Если никак нельзя решить основной вопрос, то подскажите как использовать изоляцию php через chroot?
1) Я прописал в php-fpm.conf:
chroot = /var/www
chdir = /
Непонятен этот монолог с самим собой. "Если надо задать права на выполнение одной команды используя sudo - без проблем." - ну так задайте и вызывайте. Вопрос-то в чем?
Вы сначала определитесь, какую проблему решаете. Если не знаете, как дать всем судо права на определенную команду, то задайте этот вопрос. Если не знаете, как выполнить внешнюю команду - задайте другой. Хотя вы вроде бы сами перечислили доступные для этого функции, и что вам мешает их применить - я не понимаю
Задача одна: запуск bash скрипта из под "браузерного" php.
Мешает мне запустить через exec или shell_exec? Безопасность.
Если есть, что сказать конкретное - слушаю, если нет, то зачем писать пустые сообщения?
Вы так и будете мне вопросы задавать? :)
Я не хочу каждый шаг/действие выделять как отдельная задача, подзадача,..
У меня простой вопрос: МОЖНО ЛИ решить вопрос с запуском bash скрипта, без exec подобных инструментов? Если нет, то и напишите нет! Если знаете как, то напишите как.
К чему весь этот спектакль?
Я не хочу каждый шаг/действие выделять как отдельная задача, подзадача,..
извините, напомнило:
— предположим, что у вас в кармане два яблока. Некто взял у вас одно яблоко. Сколько у вас осталось яблок?
— Два.
— Подумайте хорошенько.
Буратино сморщился, — так здорово подумал.
— Два…
— Почему?
— Я же не отдам Некту яблоко, хоть он дерись!
1. Читал про php-cli и я так понял, что это не мой вариант, так как у меня вся работа php идет из под браузера, а не консоли. А php-cli это больше консольный инструмент, а не браузерный?!
2. По поводу crontab тоже думал, типа создавать какой-то флаг в виде файла, но подумал, что это как-то примитивно.
3. Что такое планировщик и очереди, и вроде как планировщик это и есть crontab?
Sanes, давайте по порядку, Вы сейчас говорите про php-cli или это новое решение моей задачи?
По сути Вы предлагаете создание того же файла, который будет являться флагом к началу действий, только обращение будет к БД? По сути в этом предложении для меня ничего нового.
А помимо флага, есть какие-то предложения в решении этой задачи?
Анатолий,
А чтобы это не выглядело, как костыль, например в Laravel придумали очереди из коробки. Отлично подходит для вашей задачи.
И поверьте, если работаете с сервером, в очередях нет ничего зазорного.
Sanes, ладно понял, а что по дополнительному моему вопросу, по chroot?
У Вас есть какой-то опыт? В чем может быть причина, того что сайт не запускается и как это побороть?
Анатолий, это Ansible, я думаю разберетесь за пару дней. Посмотрите в файлах add.yml del.yml первые строки, это объявление переменных. Если в команде не указать, будет пошаговый запрос.
vars_prompt:
- name: 'username'
prompt: 'Username'
private: no
- name: 'userpass'
prompt: 'Password'
private: no
- name: 'mysql_user_pass'
prompt: 'MySQL password'
private: no
- name: 'domain'
prompt: 'Domain'
private: no
- name: 'cms'
prompt: 'CMS'
private: no
default: 'null'
- name: 'php'
prompt: 'PHP Version (7.0 or 5.6)'
private: no
default: '7.0'
Почитал про ansible:
---------------------
Ansible — это программное решение для удаленного управления конфигурациями. Оно позволяет настраивать удаленные машины. Главное его отличие от других подобных систем в том, что Ansible использует существующую инфраструктуру SSH, в то время как другие (chef, puppet, и пр.) требуют установки специального PKI-окружения.
Что нужно для Ansible. Необходимы следующие Python-модули:
python-yaml
python-jinja2
-----------------------
Что-то не верю, что это лучший для меня вариант. Питон я не знаю. И зачем мне удаленное управление? Перефразируя, если мне нужно открутить болт, то достаточно отвертки, а мега завод, который все умеет.
Анатолий,
Где вы там мегазавод увидели? Обычное описание команд в yaml и шаблоны конфигурационных файлов. Нет там никакого питона.
Но можете конечно делать на bash, если больше нравится.
Sanes, ну Вы же не предлагаете конкретное решение, кроме crontab, а говорите посмотреть на то-то.. я смотрю, и говорю что вижу. Цитирование у меня из статьи про ansible, там написано именно так. Статья, которую прочитал вот: https://habr.com/post/305400/
Что для Вас обычно, для меня не обычно, например я не знаю что это за команды yaml, поэтому я и попросил либо примеры, либо статью, в которой это разжевано.
Либо вы разрешаете как-то выполнение программ, и можете сделать это и вы и потенциальный взломщик, либо нет - чудес тут не бывает.
По изоляции - вам надо менять конфиг веб сервера, и имя скрипта передавать относительно вашего chroot. А передаётся оно, вероятно, относительно корня сейчас. Ну и окружение слишком уж минимальное. =)
P.S. Вам правильно писали, что очереди это тоже вполне инструмент изоляции.
Либо вы разрешаете как-то выполнение программ, и можете сделать это и вы и потенциальный взломщик, либо нет - чудес тут не бывает.
Перечитал 5 раз, но не уловил смысл предложения.
По изоляции - вам надо менять конфиг веб сервера, и имя скрипта передавать относительно вашего chroot. А передаётся оно, вероятно, относительно корня сейчас. Ну и окружение слишком уж минимальное. =)
Давайте по порядку:
1. Так "менять конфиг веб сервера" - можно пример, статью или что-то.. пока же слова не несут для меня какого-то смысла.
2. "имя скрипта передавать относительно вашего chroot" это логично и я не спорю, корень изменился и все связанное с ним. Скажите, почему перестал запускаться сайт?
Появляется надпись: No input file specified.
Причем в логах пусто.
3. "Ну и окружение слишком уж минимальное." я не знаком с chroot, просветите меня, что прочитать, дайте конкретные инструкции к действию, и т.д.
Вам правильно писали, что очереди это тоже вполне инструмент изоляции.
Вы имеете ввиду запись в БД, а потом проверку по крону?
1. Смысл в том, что либо запрещать выполнение в конфиге, и быть в безопасности от этого, либо не запрещать иметь возможность выполнить, но выполнить сможет кто угодно, кто сможет выполнять код. Сделать так, чтобы только свой один скрипт выполняться мог, вне зависимости от дыр, не выйдет.
2. В зависимости от того, что у вас за веб сервер, какие у вас настройки и.т.п.
Например, в nginx надо вместо
По окружению, попробуйте. Может и будет работать. Но многим расширениям требуются разные библиотеки. И ответить на вопрос, что потребуется именно вашему приложению невозможно - пробуйте и смотрите лог. Основная инструкция: "думать и пользоваться поиском". Фактически бесценная.
3. Или по крону, или используя постоянно работающий скрипт, или через очереди в виде отдельного ПО, есть ещё варианты. Важна концепция, в общем-то, а как удобнее реализовать именно в вашем случае, надо смотреть.
Ну есть вариант, например подменить стандартный mail клиент в линукс, и тогда когда будет выполняться mail() то будет запускаться скрипт)
А вообще, не страдай херней, и запускай через exec.