Назад | Перейти на главную страницу

Chroot Jailing пользователя к себе домой с помощью PHP CLI и всего, что нужно для запуска команд Magento 2 CLi

Хорошо, во-первых, я почти уверен, что будет масса запросов на "дополнительную информацию", поэтому, пожалуйста, разместите их в комментариях OP, и я сделаю все возможное, чтобы предоставить дополнительную информацию по запросу!

Вот худышка, сначала сервер:

Это общий промежуточный сервер, Ubuntu 16.4 LTS с Apache2.4, Php7.1, Mysql 5.7. На нем установлены Webmin, VirtualMin и UserMin (последняя версия). Он также имеет глобально установленный phpMyAdmin. Он настроен для обслуживания сайтов с помощью mod_php (с использованием www-данных), CGI, FCGI (по умолчанию) или FPM + FCGI. Варианты CGI / FPM используют SuExec для запуска сайтов. Сам веб-сервер работает отлично.

Итак, теперь задача состоит в том, чтобы настроить тюрьму Chroot, чтобы позволить существующему пользователю домена использовать SSH или SFTP, но видеть только их домашний каталог, который уже заполнен последней установкой Magento 2.

В этом примере мы будем использовать эти детали:

Пользователь = домен Группа = домен Домашний каталог = / home / domain / Chroot = / var / chroot /

Теперь я могу настроить Chroot нормально. Я скопировал необходимые файлы lib / var / usr, разрешил команды ls, bash, sh, rm, rmdir, mkdir, touch, vi и php.

Это потребовало некоторой работы, но я почти правильно получил команду PHP (после обнаружения всех зависимостей модуля).

Тюрьма CHroot в порядке, я смонтировал / home / domain в / var / chroot / home / domain, так что все в порядке. Пользователь фактически заключен в тюрьму и может видеть домашний каталог пользователя и, таким образом, может без проблем получить доступ ко всем файлам веб-сайта.

В отношении базы данных я пропустил команды mysql, поскольку у нас есть phpmyadmin, доступный глобально, поэтому они могут входить в соответствующую базу данных только с помощью пользователя mysql домена выделенного домена. нет проблем.

Настоящая проблема связана с Magento 2. Здесь, как мы знаем, вы используете инструменты командной строки для таких вещей, как обновление кеша, построение индекса и другие задачи развертывания, некоторые примеры:

domain@server:/home/domain/public_html# php bin/magento cache:flush
domain@server:/home/domain/public_html# php bin/magento indexer:reindex
domain@server:/home/domain/public_html# php bin/magento setup:static-content:deploy en_US

Как мы видим, эти команды запускаются через интерпретатор PHP CLI, поэтому вся работа по настройке PHP работает прямо на заключенном в тюрьму CLI.

Сначала у меня были проблемы с базой данных с cache:flush ect, но с некоторыми изменениями php.ini для CLI (я скопировал FCGI один из дома пользователей в место заключения) и некоторым "нахождением правильного mysql.sock" я исправил это без проблем (ну, некоторые проблемы, но починил это!)

Актуальный вопрос

У меня проблема с indexer:reindex с правами root нет проблем, однако внутри Chroot в качестве пользовательского домена по какой-то причине команда выдает ошибки для всех, кроме первого индекса. Вот результат:

-bash-4.3$ cd /home/domain/public_html/
-bash-4.3$ php bin/magento indexer:reindex
Design Config Grid index has been rebuilt successfully in 00:00:00
Customer Grid indexer process unknown error: 
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Category Products indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Product Categories indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Product Price indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Catalog Rule Product indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Catalog Product Rule indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22
Catalog Search indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_mfn527a808ntv8e3g9glcjg8aq, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22

Хорошо, сказал я, это своего рода сбой при создании сеанса, после которого индексатор не может прочитать сеанс, который не удалось создать. Объясняет, почему первый работает, а второй - нет. Я попытался смонтировать каталог сеанса по умолчанию для PHp в chroot jail, поэтому я смонтировал /var/lib/php/ к /var/chroot/var/lib/php. В этом каталоге есть липкий бит, поэтому я предпочитаю его создавать.

По-прежнему нет кубиков. Я подумал, а что, если я переиндексирую по одному:

-bash-4.3$ php bin/magento indexer:reindex customer_grid
Customer Grid indexer process unknown error:
Warning: SessionHandler::read(): open(/home/domain/tmp/sess_en89p7h50m9mc1a0pb8l3c3tv1, O_RDWR) failed: No such file or directory (2) in /home/domain/public_html/vendor/magento/framework/Session/SaveHandler/Native.php on line 22

По-прежнему нет кубиков. Я изо всех сил пытаюсь понять, с чем он на самом деле борется, где он получает этот предполагаемый идентификатор сеанса, где он должен создавать файл сеанса и где / какие журналы я могу посмотреть для информации!

Может ли кто-нибудь предложить m для продвижения вперед и освоения SH-тюремного заключения пользователя сайта Magento 2?

Отвечая на мой собственный вопрос, поскольку мне удалось решить проблему.

2 вещи не так:

  1. Во-первых, чтобы в chroot я не возился с настройками php-cli для остальной части сервера, я скопировал php.ini в тюрьму. Затем я должным образом установил путь для сохранения сеанса в каталог без липкого бита.

Вот почему я мог создать файл сеанса в / var / lib / php / sessions как root, но в chroot-тюрьме это было невозможно, потому что он помещал его в неправильное место с неправильными разрешениями.

Итак, обновил правильный php.ini и проверил разрешения, счастливых дней, у нас есть сеанс! indexer:reindex работает угощение!

  1. Итак, на большое ружье, setup:static-content:deployНу, все, что я могу сказать, это «вы знаете, когда сценарий выдает так много ошибок, что вы не можете добраться до вершины в CLI?», да это. Эрк: /

Это было связано с моими плохими навыками игры на клавиатуре (в конечном итоге обнаружилось). когда я смонтировал каталог пользователя в тюрьме, я неправильно ввел имя каталога, поэтому путь / home / domain / public_html не был / home / domain / public_html в тюрьме. Быстрая переустановка, и все снова стало хорошо.

Итак, проблема решена, спасибо ThoriumBR за его полезные советы! Лизонс узнал, и, надеюсь, эта история может помочь другим.

Пытаться ls -l /home/domain/ и ls -l /home/domain/tmp, похоже, у вас есть каталоги с неправильными разрешениями, неправильным владельцем или и тем, и другим.

PHP пытается получить доступ к файлу сеанса и терпит неудачу. Или файл существует и domain не имеет доступа для чтения или файл не существует и domain не имеет прав на запись в каталог.