

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AppSpec 'permissions' 區段 （僅限 EC2/現場部署）
<a name="reference-appspec-file-structure-permissions"></a>

`'permissions'` 區段指定在將 `'files'` 區段中的檔案和目錄/資料夾複製至執行個體之後，應如何將特殊許可 (如果有的話) 套用至檔案以及目錄/資料夾。您可以指定多個 `object` 說明。此區段為選用。它僅適用於 Amazon Linux、Ubuntu Server 和 RHEL 執行個體。

**注意**  
`'permissions'` 本節僅用於 EC2/現場部署。它不用於 AWS Lambda 或 Amazon ECS 部署。

本區段的結構如下：

```
permissions:
  - object: object-specification
    pattern: pattern-specification
    except: exception-specification
    owner: owner-account-name
    group: group-name
    mode: mode-specification
    acls: 
      - acls-specification 
    context:
      user: user-specification
      type: type-specification
      range: range-specification
    type:
      - object-type
```

說明如下：
+ `object` - 必要。將檔案系統物件複製至執行個體之後，將套用指定之許可的一組檔案系統物件 (檔案或目錄/資料夾)。

  以字串指定 `object`。
+ `pattern` - 選用。指定要套用許可的模式。如果未指定或已指定特殊字元 **"\$1\$1"**，會根據 `type` 將許可套用至所有相符的檔案或目錄。

  使用含引數 ("") 的字串指定 `pattern`。
+ `except` - 選用。指定 `pattern` 例外狀況的任何檔案或目錄。

  以方括號內逗號分隔的字串清單，指定 `except`。
+ `owner` - 選用。`object` 的擁有者名稱。如果未指定，在複製操作之後，所有套用至原始檔案或目錄/資料夾結構的現有擁有者都不會受到影響。

  以字串指定 `owner`。
+ `group` - 選用。`object` 的群組名稱。如果未指定，在複製操作之後，所有套用至原始檔案或目錄/資料夾結構的現有群組都不會受到影響。

  以字串指定 `group`。
+ `mode` - 選用。指定要套用至 之許可的數值`object`。模式設定遵循 Linux chmod 命令語法。
**重要**  
如果值包含前導零，您必須以雙引號括住它，或移除前導零，只保留三個數字。
**注意**  
`mode` 設定**u\$1x**不支援符號表示法，例如 。

  範例：
  + `mode: "0644"` 提供讀取和寫入許可給物件 (6) 的擁有者、群組 (4) 的唯讀許可，以及所有其他使用者的唯讀許可 (4)。
  + `mode: 644` 授予與 相同的許可`mode: "0644"`。
  + `mode: 4755` 設定 setuid 屬性 (4)、將完全控制許可授予擁有者 (7)、將讀取和執行許可授予群組 (5)，以及將讀取和執行許可授予所有其他使用者 (5)。

    如需更多範例，請參閱 Linux chmod 命令文件。

    如果未指定模式，則在複製操作之後，套用至原始檔案或資料夾結構的所有現有模式保持不變。
+ `acls` - 選用。字元字串清單，代表套用至 `object` 的一或多個存取控制清單 (ACL) 項目。例如，**u:bob:rw** 代表 **bob** 使用者的讀取和寫入許可 (如需範例，請參閱 Linux `setfacl` 命令文件中的 ACL 項目格式範例)。您可以指定多個 ACL 項目。如果未指定 `acls`，在複製操作之後，任何套用至原始檔案或目錄/資料夾結構的現有 ACL 都不會受到影響。這些會取代現有的所有 ACL。

  使用依序後接一個空格和一個字串的破折號 (-) 指定 `acls` (例如，`- u:jane:rw`)。如果您有多個 ACL，會在個別的行指定。
**注意**  
設定未命名的使用者、未命名的群組或其他類似的 ACL 項目會導致 AppSpec 檔案失敗。使用 `mode` 指定這些類型的許可。
+ `context` - 選用。對於 Security-Enhanced Linux (SELinux) 啟動的執行個體，是套用到複製物件的安全相關內容標籤清單。標籤指定為包含 `user`、`type` 和 `range` 的索引鍵。(如需詳細資訊，請參閱 SELinux 文件)。每個金鑰都是以字串形式輸入。如果未指定，則在複製作業之後，任何套用至原始檔案或目錄/資料夾結構的現有標籤都不受影響。
  + `user` - 選用。SELinux 使用者。
  + `type` - 選用。SELinux 類型名稱。
  + `range` - 選用。SELinux 範圍的指標。這不會有任何影響，除非機器上有啟用 Multi-Level Security (MLS) 和 Multi-Category Security (MCS)。如果未啟用，`range` 預設為 **s0**。

  以字串指定 `context` (例如，`user: unconfined_u`)。每個 `context` 指定於不同行。
+ `type` - 選用。要套用指定權限的物件類型。`type` 是字串，可設定為 **file** 或 **directory**。如果指定 **file**，許可只會套用到立即包含在複製操作後的 `object` (而非 `object` 本身) 中的檔案。如果指定 **directory**，使用權限會以遞迴方式套用到位於複製操作後 `object` (但不是 `object` 本身) 中任何地方的所有目錄/資料夾。

  以破折號 (-) 後接一個空格和一個字串的形式指定 `type` (例如，`- file`)。

## 「許可」區段範例
<a name="reference-appspec-file-structure-permissions-example"></a>

以下範例顯示如何使用 `object`、`pattern`、`except`、`owner`、`mode` 和 `type` 說明指定 `'permissions'` 區段。此範例僅適用於 Amazon Linux、Ubuntu Server 和 RHEL 執行個體。在這個範例中，假設以下檔案和資料夾都複製到下列階層中的執行個體：

```
/tmp
  `-- my-app
       |-- my-file-1.txt
       |-- my-file-2.txt
       |-- my-file-3.txt
       |-- my-folder-1
       |     |-- my-file-4.txt
       |     |-- my-file-5.txt
       |     `-- my-file-6.txt
       `-- my-folder-2
             |-- my-file-7.txt
             |-- my-file-8.txt
             |-- my-file-9.txt
	           `-- my-folder-3
```

下列 AppSpec 檔案顯示如何在複製這些檔案和資料夾後設定許可：

```
version: 0.0
os: linux
# Copy over all of the folders and files with the permissions they
#  were originally assigned.
files:
  - source: ./my-file-1.txt
    destination: /tmp/my-app
  - source: ./my-file-2.txt
    destination: /tmp/my-app
  - source: ./my-file-3.txt
    destination: /tmp/my-app
  - source: ./my-folder-1
    destination: /tmp/my-app/my-folder-1
  - source: ./my-folder-2
    destination: /tmp/my-app/my-folder-2
# 1) For all of the files in the /tmp/my-app folder ending in -3.txt
#  (for example, just my-file-3.txt), owner = adm, group = wheel, and
#  mode = 464 (-r--rw-r--).
permissions:
  - object: /tmp/my-app
    pattern: "*-3.txt"
    owner: adm
    group: wheel
    mode: 464
    type:
      - file
# 2) For all of the files ending in .txt in the /tmp/my-app
#  folder, but not for the file my-file-3.txt (for example,
#  just my-file-1.txt and my-file-2.txt),
#  owner = ec2-user and mode = 444 (-r--r--r--).
  - object: /tmp/my-app
    pattern: "*.txt"
    except: [my-file-3.txt]
    owner: ec2-user
    mode: 444
    type:
      - file
# 3) For all the files in the /tmp/my-app/my-folder-1 folder except
#  for my-file-4.txt and my-file-5.txt, (for example,
#  just my-file-6.txt), owner = operator and mode = 646 (-rw-r--rw-).
  - object: /tmp/my-app/my-folder-1
    pattern: "**"
    except: [my-file-4.txt, my-file-5.txt]
    owner: operator
    mode: 646
    type:
      - file
# 4) For all of the files that are immediately under
#  the /tmp/my-app/my-folder-2 folder except for my-file-8.txt,
#  (for example, just my-file-7.txt and
#  my-file-9.txt), owner = ec2-user and mode = 777 (-rwxrwxrwx).
  - object: /tmp/my-app/my-folder-2
    pattern: "**"
    except: [my-file-8.txt]
    owner: ec2-user
    mode: 777
    type:
      - file
# 5) For all folders at any level under /tmp/my-app that contain
#  the name my-folder but not
#  /tmp/my-app/my-folder-2/my-folder-3 (for example, just
#  /tmp/my-app/my-folder-1 and /tmp/my-app/my-folder-2),
#  owner = ec2-user and mode = 555 (dr-xr-xr-x).
  - object: /tmp/my-app
    pattern: "*my-folder*"
    except: [tmp/my-app/my-folder-2/my-folder-3]
    owner: ec2-user
    mode: 555
    type:
      - directory
# 6) For the folder /tmp/my-app/my-folder-2/my-folder-3,
#  group = wheel and mode = 564 (dr-xrw-r--).
  - object: /tmp/my-app/my-folder-2/my-folder-3
    group: wheel
    mode: 564
    type:
      - directory
```

產生的許可，如下所示：

```
-r--r--r-- ec2-user root  my-file-1.txt
-r--r--r-- ec2-user root  my-file-2.txt
-r--rw-r-- adm      wheel my-file-3.txt

dr-xr-xr-x ec2-user root  my-folder-1
-rw-r--r-- root     root  my-file-4.txt
-rw-r--r-- root     root  my-file-5.txt
-rw-r--rw- operator root  my-file-6.txt

dr-xr-xr-x ec2-user root  my-folder-2
-rwxrwxrwx ec2-user root  my-file-7.txt
-rw-r--r-- root     root  my-file-8.txt
-rwxrwxrwx ec2-user root  my-file-9.txt

dr-xrw-r-- root     wheel my-folder-3
```

以下範例說明如何指定 `'permissions'` 區段，並新增 `acls` 和 `context` 說明。此範例僅適用於 Amazon Linux、Ubuntu Server 和 RHEL 執行個體。

```
permissions:
  - object: /var/www/html/WordPress
    pattern: "**"
    except: [/var/www/html/WordPress/ReadMe.txt]
    owner: bob
    group: writers
    mode: 644
    acls: 
      - u:mary:rw
      - u:sam:rw
      - m::rw
    context:
      user: unconfined_u
      type: httpd_sys_content_t
      range: s0
    type:
      - file
```