檔案系統存取許可權

本節探討如何為開發和生產系統設定Commerce檔案系統的擁有者或擁有者。 繼續之前,請檢閱檔案系統擁有權和許可權概觀中討論的概念。

本主題著重於Commerce開發和生產系統。 如果您正在安裝Commerce,請參閱設定安裝前的擁有權和許可權

接下來的章節將討論一或兩個檔案系統擁有者的需求。 這表示:

  • 一位使用者 — 通常在共用主機服務供應商上需要,這僅允許您存取伺服器上的一位使用者。此使用者可以使用FTP登入、傳輸檔案,而且此使用者還可以執行網頁伺服器。

  • 兩個使用者 — 如果您執行自己的Commerce伺服器,我們建議兩個使用者:一個用來傳輸檔案和執行命令列公用程式,另一個是網頁伺服器軟體的個別使用者。 如果可能的話,這會比較好,因為比較安全。

    而是由不同的使用者組成:

    • 執行管理員和店面的網頁伺服器使用者。

    • 命令列使用者,您可用來登入伺服器的本機使用者帳戶。 這類使用者會執行Commerce cron作業和命令列公用程式。

共用託管的生產檔案系統所有權(單一使用者)

若要使用單一擁有者設定,您必須以執行網頁伺服器的相同使用者身分登入您的Commerce伺服器。 這是共用託管的典型做法。

因為有一個檔案系統擁有者不太安全,建議您儘可能將Commerce部署在私人伺服器的生產環境,而非共用主機上。

為預設或開發人員模式設定一個擁有者

在預設或開發人員模式中,使用者必須可寫入下列目錄:

  • vendor
  • app/etc
  • pub/static
  • var
  • 任何其他靜態資源
  • generated/code
  • generated/metadata
  • var/view_preprocessed

您可以使用命令列或共用託管提供者提供的檔案管理員應用程式,來設定這些許可權。

為生產模式設定一個擁有者

當您準備好將網站部署到生產環境時,您應該從以下目錄中的檔案移除寫入許可權,以提高安全性:

  • vendor
  • app/code
  • app/etc
  • pub/static
  • 任何其他靜態資源
  • generated/code
  • generated/metadata
  • var/view_preprocessed

若要更新元件、安裝新元件或升級Commerce軟體,上述所有目錄必須為讀寫目錄。

將程式碼檔案和目錄設為唯讀

若要移除網頁伺服器使用者群組中檔案與目錄的寫入許可權:

  1. 登入您的Commerce伺服器。

  2. 變更至Commerce安裝目錄。

  3. 變更為生產模式。

    code language-bash
    bin/magento deploy:mode:set production
    
  4. 移除下列目錄的寫入許可權。

    code language-bash
    find app/code var/view_preprocessed vendor pub/static app/etc generated/code generated/metadata \( -type f -or -type d \) -exec chmod u-w {} + && chmod o-rwx app/etc/env.php
    
  5. 讓指令行工具可執行。

    code language-bash
    chmod u+x bin/magento
    

讓程式碼檔案和目錄可寫入

若要讓檔案和目錄可寫入,以便更新元件和升級Commerce軟體:

  1. 登入您的Commerce伺服器。

  2. 變更至Commerce安裝目錄。

  3. 輸入下列命令:

    code language-bash
    chmod -R u+w .
    

選擇性設定magento_umask

請參閱​ 安裝指南 ​中的選擇性設定umask

私人託管的生產檔案系統所有權(兩個使用者)

如果您使用自己的伺服器(包括託管提供者的私人伺服器設定),則有兩個使用者:

  • 執行Admin和Storefront的​ 網頁伺服器使用者

    Linux系統通常不會為此使用者提供殼層;您無法以網頁伺服器使用者的身分登入Commerce伺服器或切換至該使用者。

  • 您以或切換身分登入您的Commerce伺服器的​ 命令列使用者

    Commerce使用此使用者執行CLI命令和cron。

    note info
    INFO
    命令列使用者也稱為​_檔案系統擁有者_。

由於這些使用者需要存取相同的檔案,因此建議您建立他們共同所屬的共用群組。 下列程式假設您已完成此操作。

請參閱下列其中一節:

  • 開發人員或預設模式中的兩個檔案系統擁有者
  • 兩個檔案系統擁有者處於生產模式

設定預設或開發人員模式的兩個擁有者

在開發人員和預設模式下,下列目錄中的檔案必須可供使用者寫入:

  • var
  • generated
  • pub/static
  • pub/media
  • app/etc

設定目錄上的setgid位元,讓許可權一律繼承自父目錄。

INFO
setgid只適用於目錄, ​適用於檔案。

此外,網頁伺服器群組應該可以寫入這些目錄。 由於內容可能存在於這些目錄中,因此以遞回方式新增許可權。

設定許可權和setgid

若要設定開發人員模式的setgid和許可權:

  1. 以檔案系統擁有者的身分登入或切換到您的Commerce伺服器。

  2. 依照顯示的順序輸入下列命令:

    code language-bash
    cd <magento_root>
    
    code language-bash
    find var generated pub/static pub/media app/etc -type f -exec chmod g+w {} +
    
    code language-bash
    find var generated pub/static pub/media app/etc -type d -exec chmod g+ws {} +
    

兩個檔案系統擁有者處於生產模式

當您準備好將網站部署到生產環境時,您應該從以下目錄中的檔案移除寫入許可權,以提高安全性:

  • vendor
  • app/code
  • app/etc
  • lib
  • pub/static
  • 任何其他靜態資源
  • generated/code
  • generated/metadata
  • var/view_preprocessed

將程式碼檔案和目錄設為唯讀

若要移除網頁伺服器使用者群組中檔案與目錄的可寫入許可權:

  1. 登入您的Commerce伺服器。

  2. 變更至Commerce安裝目錄。

  3. 以檔案系統擁有者的身分,輸入下列命令以變更至生產模式:

    code language-bash
    bin/magento deploy:mode:set production
    
  4. 以具有root許可權的使用者身分輸入下列命令:

    code language-bash
    find app/code lib pub/static app/etc generated/code generated/metadata var/view_preprocessed \( -type d -or -type f \) -exec chmod g-w {} + && chmod o-rwx app/etc/env.php
    

讓程式碼檔案和目錄可寫入

若要讓檔案和目錄可寫入,以便更新元件和升級Commerce軟體:

  1. 登入您的Commerce伺服器。

  2. 變更至Commerce安裝目錄。

  3. 輸入下列命令:

    code language-bash
    find app/code lib var generated vendor pub/static pub/media app/etc \( -type d -or -type f \) -exec chmod g+w {} + && chmod o+rwx app/etc/env.php
    
recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c