Chroot Jailing пользователя в его дом с PHP CLI и все для запуска команд Magento 2 CLi
Итак, во-первых, я уверен, что будет много запросов на "дополнительную информацию", поэтому, пожалуйста, опубликуйте их в комментариях ОП, и я сделаю все возможное, чтобы предоставить дополнительную информацию по запросу!
Вот тощий, первый сервер:
Это общий промежуточный сервер, 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 Dir = /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
но, немного поиграв с 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
Хорошо, сказал я, это своего рода сбой создания сеанса, за которым индексатор не может прочитать сеанс, который не удалось создать. Объясняет, почему первый работает, но последующий сбой. Я попытался смонтировать каталог sesion по умолчанию для PHp в тюрьму chroot, поэтому я смонтировал /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 ответа
Отвечая на мой вопрос, как мне удалось решить проблему.
2 вещи не так:
- Во-первых, чтобы в chroot я не связывался с настройками php-cli для остальной части сервера, я скопировал php.ini в тюрьму. Затем я должным образом установил путь сохранения сеанса в каталог без залипания.
Вот почему я мог создать файл сеанса в / var / lib / php / session как root, но когда он находился в chroot-тюрьме, он не мог этого сделать, потому что он помещал его в неправильное место с неправильными разрешениями.
Так что обновил правильный php.ini и пересмотрел разрешения, счастливые дни мы получили сессию! indexer:reindex
работает угощение!
- Так на бигган,
setup:static-content:deploy
Ну, все, что я могу сказать, это "вы знаете, когда скрипт выдает так много ошибок, которые вы не можете найти в верхней части CLI?", да, это. Эрк: /
Это было связано с (в конце концов) моими плохими навыками клавиатуры когда я смонтировал пользовательский каталог в тюрьме, я набрал неверное имя каталога, чтобы путь / home / domain / public_html не был / home / domain / public_html в тюрьме. Быстрый перемонтаж и все снова было хорошо.
Итак, теперь проблема решена, спасибо ThoriumBR за его полезные предложения! Leasons узнал и, надеюсь, эта история может помочь некоторым другим.
Пытаться ls -l /home/domain/
а также ls -l /home/domain/tmp
Похоже, у вас есть каталоги с неправильными разрешениями, неправильным владельцем или оба.
PHP пытается получить доступ к файлу сеанса, и не удается. Или файл существует и domain
не имеет доступа для чтения или файл не существует и domain
не имеет разрешения на запись в каталог.