使用 PHP CLI 和一切執行 Magento 2 CLi 命令的使用者的 Chroot 監禁到他們的家
好的,所以首先我很確定會有很多“附加資訊”請求,所以請將它們發佈在 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:flush
ect 的數據庫問題,但對 CLI 的 php.ini 進行了一些擺弄(我將 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 監獄中,所以我掛載
/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 錯誤:
- 首先,為了在 chroot 中我不會弄亂伺服器其餘部分的 php-cli 設置,我將 php.ini 複製到監獄中。然後,我將會話保存路徑適當地設置為沒有粘性位的目錄。
這就是為什麼我可以在 /var/lib/php/sessions 中以 root 身份創建會話文件,但在 chroot 監獄中卻不能,因為它以錯誤的權限將其放到了錯誤的位置。
所以更新了正確的 php.ini 並審查了權限,我們得到了一個會議的快樂日子!
indexer:reindex
正在工作!
- 所以說到大事,
setup:static-content:deploy
我只能說“你知道什麼時候腳本拋出了這麼多錯誤,你無法在 CLI 中找到它的頂部嗎?”,是的。厄克:/這歸結為(最終定位)我糟糕的鍵盤技能。當我在監獄中安裝使用者目錄時,我輸入了錯誤的目錄名稱,因此路徑 /home/domain/public_html 在監獄中不是 /home/domain/public_html。快速重新安裝,一切都好起來了。
所以現在問題解決了,感謝 ThoriumBR 的有用建議!經驗教訓,希望這個故事可以幫助其他一些人。
嘗試
ls -l /home/domain/
andls -l /home/domain/tmp
,看起來您的目錄具有錯誤的權限、錯誤的所有權或兩者兼而有之。PHP 正在嘗試訪問會話文件,但失敗了。或者文件存在並且
domain
沒有讀取權限,或者文件不存在並且domain
沒有目錄的寫入權限。