Apache-2.4

使用 PHP CLI 和一切執行 Magento 2 CLi 命令的使用者的 Chroot 監禁到他們的家

  • October 30, 2017

好的,所以首先我很確定會有很多“附加資訊”請求,所以請將它們發佈在 OP 評論中,我會盡我所能根據要求提供額外資訊!

這是瘦的,首先是伺服器:

它是一個共享登台伺服器,Ubuntu 16.4 LTS 和 Apache2.4、Php7.1、Mysql 5.7。它安裝了 Webmin、VirtualMin 和 UserMin(最新)。它還全域安裝了 phpMyAdmin。它被配置為允許使用 mod_php(使用 www-data)、CGI、FCGI(預設)或 FPM+FCGI 為網站提供服務。CGI/FPM 變體使用 SuExec 來執行站點。Web 伺服器本身執行良好。

因此,現在的任務是設置一個 Chroot 監獄,以允許現有域使用者進行 SSH 或 SFTP,但只能看到他們的主目錄,該目錄已經填充了最新的 Magento 2 安裝。

在這個例子中,我們將使用這些細節:

使用者 = 域 組 = 域 主目錄 = /home/domain/ Chroot = /var/chroot/

現在,我可以很好地設置 Chroot,我所做的是複制所需的 relivent 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:flushect 的數據庫問題,但對 CLI 的 php.ini 進行了一些擺弄(我將 FCGI 從使用者家複製到了入獄位置)和一些“找到正確的 mysql.sock”我修復了它沒有問題(嗯,有一些問題,但已修復!)

實際問題

我對indexer:reindexroot 權限有疑問,但在 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 監獄中,所以我掛載/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

還是沒有骰子。我正在努力查看它實際上在努力解決什麼問題,它在哪裡獲取這個假定的會話 ID,它應該在哪裡創建會話文件以及我可以查看哪裡/哪些日誌以獲取資訊!

任何人都可以為 m 提供任何形式的建議以推進並掌握對 Magento 2 網站使用者的 SH 監禁嗎?

回答我自己的問題,因為我已經設法解決了這個問題。

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/and ls -l /home/domain/tmp,看起來您的目錄具有錯誤的權限、錯誤的所有權或兩者兼而有之。

PHP 正在嘗試訪問會話文件,但失敗了。或者文件存在並且domain沒有讀取權限,或者文件不存在並且domain沒有目錄的寫入權限。

引用自:https://serverfault.com/questions/880671