

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AppSpec 'permissions' 섹션(EC2/온프레미스 배포만 해당)
<a name="reference-appspec-file-structure-permissions"></a>

`'permissions'` 섹션은 `'files'` 섹션의 파일 및 디렉터리/폴더가 인스턴스에 복사된 후 이러한 파일 및 디렉터리/폴더에 특수 권한(있는 경우)이 어떻게 적용되어야 하는지를 지정합니다. 여러 개의 `object` 명령을 지정할 수 있습니다. 이 섹션은 선택 사항입니다. Amazon Linux, Ubuntu Server 및 RHEL 인스턴스에만 적용됩니다.

**참고**  
EC2/온프레미스 배포용으로만 `'permissions'` 섹션을 사용합니다. 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 명령 구문을 따릅니다.
**중요**  
값이 0으로 시작하는 경우 큰 따옴표로 묶거나 세 자리 숫자만 남도록 선행하는 0을 제거해야 합니다.
**참고**  
**u\$1x**와(과) 같은 기호 표기법은 `mode` 설정에 대해 지원되지 않습니다.

  예시:
  + `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`). 2개 이상의 ACL이 있는 경우 각각 별도의 줄에서 지정됩니다.
**참고**  
이름이 없는 사용자, 이름이 없는 그룹 또는 기타 유사한 ACL 항목을 설정하면 AppSpec 파일이 실패합니다. 이러한 유형의 권한을 지정하려면 `mode`를 대신 사용하세요.
+ `context` – 선택 사항. 보안 강화 Linux(SELinux) 기반 인스턴스의 경우 복사된 객체에 적용되는 보안 관련 컨텍스트 레이블 목록. 레이블은 `user`, `type` 및 `range`가 포함된 키로 지정됩니다. 자세한 내용은 SELinux 설명서를 참조하세요. 각 키는 문자열로 입력됩니다. 지정하지 않으면 원본 파일 또는 디렉터리/폴더 구조에 적용된 기존의 모든 레이블이 복사 작업 후에도 아무 것도 변경되지 않습니다.
  + `user` – 선택 사항. SELinux 사용자
  + `type` – 선택 사항. SELinux 유형 이름.
  + `range` – 선택 사항. SELinux 범위 지정자. 머신에서 MLS(다중 수준 보안) 및 MCS(다중 범주 보안)를 활성화하지 않으면 아무 영향이 없습니다. 활성화하지 않으면 `range`는 기본적으로 **s0**으로 지정됩니다.

  문자열을 사용하여 `context`를 지정합니다(예: `user: unconfined_u`). 각 `context`는 별도의 줄에서 지정됩니다.
+ `type` – 선택 사항. 지정한 권한을 적용할 객체 유형입니다. `type`은 **file** 또는 **directory**로 설정될 수 있는 문자열입니다. **file**을 지정하면 복사 작업 후 `object`에 즉시 포함되는 파일에만 권한이 적용됩니다(`object` 자체에는 적용되지 않음). **directory**를 지정하면 복사 작업 후 `object` 안의 어떤 위치에든 있는 모든 디렉터리/폴더에 권한이 반복적으로 적용됩니다(`object` 자체에는 적용되지 않음).

  대시(-), 그 다음에 공백, 그 다음에 문자열을 사용하여 `type`을 지정합니다(예: `- file`).

## 'permissions' 섹션의 예
<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
```

다음 예제에서는 `acls` 및 `context` 명령을 추가로 사용하여 `'permissions'` 섹션을 지정하는 방법을 보여 줍니다. 이 예제는 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
```