

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

# AWS IoT Greengrass V2 코어 디바이스를 루트가 아닌 디바이스로 설정
<a name="setup-greengrass-non-root"></a>

이 페이지에서는 AWS IoT Greengrass 코어 소프트웨어를 루트가 아닌 것으로 실행하기 위한 네 가지 솔루션을 제공합니다. 비교 표를 검토하여 각 솔루션의 기능과 장단점을 파악한 다음 결정 순서도를 사용하여 요구 사항에 맞는 솔루션을 식별합니다.

**참고**  
이 페이지의 루트가 아닌 솔루션은 Linux 디바이스의 AWS IoT Greengrass nucleus에만 적용됩니다. 는 Windows에서 시스템 서비스로 실행 AWS IoT Greengrass V2 되므로 Windows는 포함되지 않습니다. Linux의 표준 루트 설치는 섹션을 참조하세요[자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md).  
루트가 아닌 사용자로 AWS IoT Greengrass nucleus lite를 실행하려면 AWS IoT Greengrass nucleus lite GitHub 리포지토리의 [Podman 사용을](https://github.com/aws-greengrass/aws-greengrass-lite/blob/main/docs/BUILD.md#optional-using-podman) 참조하세요.

**Topics**
+ [루트가 아닌 솔루션 선택](#non-root-choose-solution)
+ [솔루션 1: 루트 액세스 AWS IoT Greengrass V2 없이 설정](#non-root-solution-1)
+ [솔루션 2: 구성 요소 사용자 분리 없이 루트가 아닌 AWS IoT Greengrass V2 것으로 설정](#non-root-solution-2)
+ [솔루션 3: 구성 요소 사용자 분리를 사용하여 루트가 아닌 AWS IoT Greengrass V2 것으로 설정](#non-root-solution-3)
+ [솔루션 4: 기능이 제한된 루트 AWS IoT Greengrass V2 로 설정](#non-root-solution-4)
+ [에 필요한 Linux 기능 AWS IoT Greengrass V2](#linux-capabilities-reference)

## 루트가 아닌 솔루션 선택
<a name="non-root-choose-solution"></a>

다음 표를 사용하여 루트가 아닌 솔루션을 비교하고 장단점을 이해합니다. 각 솔루션은 보안 요구 사항 및 디바이스 제약 조건에 따라 다양한 기능을 제공합니다.


**루트가 아닌 솔루션**  

| Solution | 루트 액세스 필요 | 다른 사용자로 구성 요소 실행 가능 | Greengrass를 시스템 서비스로 실행합니다. | 최적의 용도 | 
| --- | --- | --- | --- | --- | 
| [솔루션 1: 루트 액세스 없음](#non-root-solution-1) | 아니요 | 아니요 | 아니요(사용자 서비스 선택 사항) | 루트 액세스 권한이 없는 디바이스 | 
| [솔루션 2: 루트가 아닌 단일 사용자](#non-root-solution-2) | 예(설정만 해당) | 아니요 | 예 | 모든 구성 요소가 동일한 사용자로 실행되는 루트가 아닌 사용자로 Greengrass 실행 | 
| [솔루션 3: 루트가 아닌 다중 사용자](#non-root-solution-3) | 예(설정만 해당) | 예 | 예 | 다른 사용자로 구성 요소를 실행하는 동안 루트가 아닌 사용자로 Greengrass 실행 | 
| [솔루션 4: 기능이 제한된 루트](#non-root-solution-4) | 예 | 예 | 예 | 제한된 Linux 기능 세트를 사용하여 Greengrass를 루트로 실행 | 

다음 순서도는 디바이스 제약 조건 및 요구 사항에 따라 적절한 솔루션을 선택하는 방법을 안내합니다.

![\[루트가 아닌 솔루션을 선택하기 위한 결정 프로세스를 보여주는 흐름도입니다. 먼저 코어 디바이스에 루트 액세스 권한이 있는지 묻습니다. 그렇지 않은 경우 솔루션 1을 사용합니다. 그렇다면 다른 Linux 사용자로 구성 요소를 실행해야 하는지 묻습니다. 그렇지 않은 경우 솔루션 2를 사용합니다. 그렇다면 Greengrass를 제한된 기능을 가진 루트 사용자로 실행할지 물어보세요. 그렇다면 솔루션 4를 사용합니다. 그렇지 않은 경우 솔루션 3을 사용합니다.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/non-root-solution-decision-flow.png)


## 솔루션 1: 루트 액세스 AWS IoT Greengrass V2 없이 설정
<a name="non-root-solution-1"></a>

디바이스에 루트 액세스 권한이 없는 경우이 솔루션을 사용합니다. 이 구성에서 AWS IoT Greengrass 코어 소프트웨어는 승격된 권한 없이 루트가 아닌 사용자로 완전히 실행됩니다.

**단점**  
이 솔루션에는 다음과 같은 제한 사항이 있습니다.
+ **구성 요소 사용자 분리 없음** - 모든 구성 요소는 AWS IoT Greengrass 코어 소프트웨어를 실행하는 동일한 사용자로 실행됩니다. `posixUser` 구성을 사용하여 다른 사용자로 구성 요소를 실행할 수 없습니다.
+ **RequiresPrivilege 무시됨** - AWS IoT Greengrass 코어 소프트웨어는 구성 요소 레시피의 `RequiresPrivilege` 옵션을 무시합니다. 구성 요소는 승격된 권한을 요청할 수 없습니다.
+ **시스템 서비스 없음** - AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치할 수 없습니다. 선택적으로를 시스템 사용자 서비스로 실행 AWS IoT Greengrass V2 하도록 구성할 수 있습니다.

**사전 조건**  
이 솔루션에는 다음이 필요합니다.
+ 디바이스의 루트가 아닌 사용자 계정
+  AWS IoT Greengrass 코어 소프트웨어를 설치하려는 디렉터리에 대한 쓰기 액세스 권한

**루트 액세스 AWS IoT Greengrass V2 없이를 설치하고 실행하려면**

1. 에서 디바이스 환경을 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md)설정하고, 자격 증명을 제공하고, AWS IoT Greengrass 코어 소프트웨어를 다운로드하는 단계를 완료합니다.

1. 설치 디렉터리를 생성하고 사용자가 소유하는지 확인합니다.

   ```
   mkdir -p $HOME/greengrass/v2
   ```

1. 없이 설치 관리자를 실행합니다`sudo`. 를 현재 사용자`--component-default-user`로 설정합니다.

   ```
   java -Droot="$HOME/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user $USER \
     --provision true
   ```

   시스템 서비스를 생성할 루트 액세스 권한이 `--setup-system-service true` 없으므로를 사용하지 마십시오.

**(선택 사항) 시스템 사용자 서비스 설정**  
 AWS IoT Greengrass 코어 소프트웨어를 관리하도록 시스템 사용자 서비스를 구성할 수 있습니다. 이렇게 하면 로그인할 때 소프트웨어가 자동으로 시작됩니다.

**시스템 사용자 서비스를 설정하려면**

1.  AWS IoT Greengrass 코어 소프트웨어가 현재 실행 중인 경우 중지합니다.

   ```
   kill $(cat $HOME/greengrass/v2/alts/loader.pid)
   ```

1. systemd user service 디렉터리를 생성합니다.

   ```
   mkdir -p $HOME/.config/systemd/user
   ```

1. 다음 콘텐츠를 `$HOME/.config/systemd/user/greengrass.service` 사용하여에서 서비스 파일을 생성합니다.

   ```
   [Unit]
   Description=Greengrass Core
   
   [Service]
   Type=simple
   PIDFile=%h/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh %h/greengrass/v2/alts/current/distro/bin/loader
   Environment="JAVA_HOME=/path/to/java"
   
   [Install]
   WantedBy=default.target
   ```

   시스템 사용자 단위 파일에서 `%h`는 서비스를 실행하는 사용자의 홈 디렉터리로 확인되는 지정자입니다.

   */path/to/java*를 Java 설치 경로로 바꿉니다.

1. 서비스를 활성화하고 시작합니다.

   ```
   systemctl --user daemon-reload
   systemctl --user enable greengrass.service
   systemctl --user start greengrass.service
   ```

**재시작 및 OTA 업데이트 동작**  
동작은 시스템 사용자 서비스를 구성했는지 여부에 따라 달라집니다.

사용자 서비스 사용  
+ **디바이스 재부팅** - 사용자가 로그인할 때 AWS IoT Greengrass 코어 소프트웨어가 자동으로 시작됩니다.
+ **OTA 업데이트** - OTA 업데이트가 성공하고 소프트웨어가 자동으로 다시 시작됩니다.

사용자 서비스 없음  
+ **디바이스 재부팅** - AWS IoT Greengrass 코어 소프트웨어가 자동으로 다시 시작되지 않습니다. 수동으로 시작해야 합니다.
+ **OTA 업데이트** - OTA 업데이트가 성공했지만 나중에 AWS IoT Greengrass 수동으로 코어 소프트웨어를 시작해야 합니다.

**시스템 리소스 제한**  
cgroup을 사용하는 구성 요소별 리소스 제한은 루트 사용자가 아닌 사용자가에서 cgroup 디렉터리를 생성할 수 없기 때문에이 솔루션에서 작동하지 않습니다`/sys/fs/cgroup/`. 리소스 제한이 구성된 구성 요소를 배포하는 경우 AWS IoT Greengrass 코어 소프트웨어는 구성된 제한을 무시합니다.

다음 대안을 사용하여 리소스 사용량을 관리할 수 있습니다.
+ **시스템 사용자 서비스 제한** - AWS IoT Greengrass 코어 소프트웨어를 시스템 사용자 서비스로 실행하는 경우의 서비스 파일에 리소스 제한을 추가할 수 있습니다`$HOME/.config/systemd/user/greengrass.service`. 이러한 제한은 Greengrass nucleus 및 모든 구성 요소를 포함한 전체 서비스에 적용됩니다.

  ```
  MemoryMax=2G
  CPUQuota=100%
  ```
+ **Greengrass nucleus JVM 제한** - JVM 옵션을 구성하여 Greengrass nucleus 프로세스 메모리를 제한할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md) 단원을 참조하십시오.

## 솔루션 2: 구성 요소 사용자 분리 없이 루트가 아닌 AWS IoT Greengrass V2 것으로 설정
<a name="non-root-solution-2"></a>

초기 설정을 위한 루트 액세스 권한이 있고 AWS IoT Greengrass 코어 소프트웨어를 루트가 아닌 시스템 서비스로 실행하려는 경우이 솔루션을 사용합니다. 하지만 다른 사용자로 구성 요소를 실행할 필요는 없습니다. 이는 솔루션 1과 유사하지만 소프트웨어는 부팅 시 자동으로 시작되는 시스템 서비스로 실행됩니다.

**단점**  
이 솔루션에는 다음과 같은 제한 사항이 있습니다.
+ **구성 요소 사용자 분리 없음** - 모든 구성 요소는 AWS IoT Greengrass 코어 소프트웨어를 실행하는 동일한 사용자로 실행됩니다. `posixUser` 구성을 사용하여 다른 사용자로 구성 요소를 실행할 수 없습니다.
+ **RequiresPrivilege 무시됨** - AWS IoT Greengrass 코어 소프트웨어는 구성 요소 레시피의 `RequiresPrivilege` 옵션을 무시합니다. 구성 요소는 승격된 권한을 요청할 수 없습니다.

**사전 조건**  
이 솔루션에는 다음이 필요합니다.
+ 초기 설정을 위한 루트 액세스
+ 디바이스에 시스템됨

**구성 요소 사용자 분리 없이 루트가 아닌 AWS IoT Greengrass V2 를 설치하고 실행하려면**

1. 에서 디바이스 환경을 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md)설정하고, 자격 증명을 제공하고, AWS IoT Greengrass 코어 소프트웨어를 다운로드하는 단계를 완료합니다.

1.  AWS IoT Greengrass 코어 소프트웨어와 모든 구성 요소를 실행할 루트가 아닌 사용자를 생성합니다.

   ```
   sudo useradd --create-home gg_non_root
   ```

1. 루트가 아닌 사용자로 로그인하고 설치 관리자를 실행합니다. `--component-default-user`를 동일한 사용자로 설정합니다. 시스템 서비스를 `sudo` 사용하거나 설정하지 마십시오.

   ```
   java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user gg_non_root \
     --provision true \
     --setup-system-service false
   ```

1. 루트로 다음 콘텐츠를 `/etc/systemd/system/greengrass.service` 사용하여에서 시스템 서비스 파일을 생성합니다.

   ```
   [Unit]
   Description=Greengrass Core
   After=network.target
   
   [Service]
   Type=simple
   User=gg_non_root
   PIDFile=/home/gg_non_root/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh -c "exec /home/gg_non_root/greengrass/v2/alts/current/distro/bin/loader >> /home/gg_non_root/greengrass/v2/logs/loader.log 2>&1"
   KillMode=mixed
   NoNewPrivileges=true
   ProtectSystem=strict
   ReadWritePaths=/home/gg_non_root/greengrass /tmp
   
   [Install]
   WantedBy=multi-user.target
   ```

1. 실행 중인 AWS IoT Greengrass 코어 인스턴스를 중지한 다음 시스템 서비스를 활성화하고 시작합니다.

   ```
   sudo systemctl daemon-reload
   sudo systemctl enable greengrass.service
   sudo systemctl start greengrass.service
   ```

**재시작 및 OTA 업데이트 동작**  
이 솔루션에서 다음을 수행합니다.
+  AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스로 실행되며 장애 또는 디바이스 재부팅 시 자동으로 다시 시작됩니다.
+  AWS IoT Greengrass 코어 소프트웨어에 대한 OTA 업데이트가 작동합니다. 구성된 루트가 아닌 사용자로 서비스가 자동으로 다시 시작됩니다.

**시스템 리소스 제한**  
Linux 기능이 없는 루트가 아닌 사용자는에서 cgroup 디렉터리를 생성할 수 없으므로이 솔루션에서는 cgroup을 사용하는 구성 요소별 리소스 제한이 작동하지 않습니다`/sys/fs/cgroup/`. 리소스 제한이 구성된 구성 요소를 배포하는 경우 AWS IoT Greengrass 코어 소프트웨어는 구성된 제한을 무시합니다.

다음 대안을 사용하여 리소스 사용량을 관리할 수 있습니다.
+ **시스템 서비스 제한** -에서 시스템 서비스 파일에 리소스 제한을 추가할 수 있습니다`/etc/systemd/system/greengrass.service`. 이러한 제한은 Greengrass nucleus 및 모든 구성 요소를 포함한 전체 서비스에 적용됩니다.

  ```
  MemoryMax=2G
  CPUQuota=100%
  ```
+ **Greengrass nucleus JVM 제한** - JVM 옵션을 구성하여 Greengrass nucleus 프로세스 메모리를 제한할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md) 단원을 참조하십시오.

## 솔루션 3: 구성 요소 사용자 분리를 사용하여 루트가 아닌 AWS IoT Greengrass V2 것으로 설정
<a name="non-root-solution-3"></a>

초기 설정을 위한 루트 액세스 권한이 있지만 다른 사용자로 구성 요소를 실행하는 기능을 유지하면서 AWS IoT Greengrass 코어 소프트웨어를 루트가 아닌 사용자로 실행하려는 경우이 솔루션을 사용합니다. 이 구성은 Linux 기능과 sudoer를 사용하여 루트가 아닌 사용자가 구성 요소를 실행할 때 다른 사용자로 전환할 수 있도록 합니다.

**단점**  
이 솔루션에는 다음과 같은 제한 사항이 있습니다.
+ **sudoers 구성 필요 **- AWS IoT Greengrass V2 사용자가 다른 사용자로 명령을 실행할 수 있도록 sudoers를 구성해야 합니다.

**사전 조건**  
이 솔루션에는 다음이 필요합니다.
+ 초기 설정을 위한 루트 액세스
+ 를 지원하는 systemd 버전 229 이상`AmbientCapabilities`. 버전을 확인하려면 `systemctl --version`을 실행합니다.

**구성 요소 사용자 분리를 사용하여 루트가 아닌 AWS IoT Greengrass V2 를 설치하고 실행하려면**

1. 에서 디바이스 환경을 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md)설정하고, 자격 증명을 제공하고, AWS IoT Greengrass 코어 소프트웨어를 다운로드하는 단계를 완료합니다.

1.  AWS IoT Greengrass 코어 소프트웨어를 실행할 루트가 아닌 사용자를 생성합니다.

   ```
   sudo useradd --create-home gg_non_root
   ```

1. 루트가 아닌 사용자를 sudoers에 추가하여 구성 요소 사용자로 명령을 실행할 수 있도록 합니다. 에서 파일을 생성합니다`/etc/sudoers.d/gg_non_root`.

   ```
   gg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   ```

   를 사용하여 추가 사용자로 실행하도록 구성 요소를 구성하는 경우 각 사용자에 대해 sudoers 항목을 `posixUser`추가합니다. 예제:

   ```
   gg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   gg_non_root ALL=(another_user:another_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   ```

1. 루트가 아닌 사용자로 로그인하고 설치 관리자를 실행합니다. 시스템 서비스를 `sudo` 사용하거나 설정하지 마십시오.

   ```
   java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service false
   ```

1. 루트로 다음 콘텐츠를 `/etc/systemd/system/greengrass.service` 사용하여에서 시스템 서비스 파일을 생성합니다.

   ```
   [Unit]
   Description=Greengrass Core
   After=network.target
   
   [Service]
   Type=simple
   User=gg_non_root
   PIDFile=/home/gg_non_root/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh -c "exec /home/gg_non_root/greengrass/v2/alts/current/distro/bin/loader >> /home/gg_non_root/greengrass/v2/logs/loader.log 2>&1"
   KillMode=mixed
   AmbientCapabilities=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE
   CapabilityBoundingSet=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE
   ProtectSystem=strict
   ReadWritePaths=/home/gg_non_root/greengrass /tmp
   
   [Install]
   WantedBy=multi-user.target
   ```

   필요한 기능에 대한 자세한 내용은 섹션을 참조하세요[에 필요한 Linux 기능 AWS IoT Greengrass V2](#linux-capabilities-reference).
   + `AmbientCapabilities`는 서비스를 실행하는 루트가 아닌 사용자에게 지정된 Linux 기능을 부여합니다. 이렇게 하면 AWS IoT Greengrass 코어 소프트웨어가 루트로 실행되지 않고 구성 요소를 실행할 때 사용자 전환과 같은 권한 있는 작업을 수행할 수 있습니다.
   + `CapabilityBoundingSet`는 서비스와 하위 프로세스가 사용할 수 있는 최대 기능 세트를 제한합니다. 이 세트에 없는 기능은 영구적으로 삭제됩니다.
   + `ProtectSystem=strict`는 서비스에 대해 전체 파일 시스템을 읽기 전용으로 설정하여 운영 체제 수정을 방지합니다.
   + `ReadWritePaths`는 서비스가 쓸 수 있는 유일한 디렉터리를 지정합니다.

1. 실행 중인 AWS IoT Greengrass 코어 인스턴스를 중지한 다음 시스템 서비스를 활성화하고 시작합니다.

   ```
   sudo systemctl daemon-reload
   sudo systemctl enable greengrass.service
   sudo systemctl start greengrass.service
   ```

**재시작 및 OTA 업데이트 동작**  
이 솔루션에서 다음을 수행합니다.
+  AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스로 실행되며 장애 또는 디바이스 재부팅 시 자동으로 다시 시작됩니다.
+  AWS IoT Greengrass 코어 소프트웨어에 대한 OTA 업데이트가 작동합니다. 구성된 루트가 아닌 사용자로 서비스가 자동으로 다시 시작됩니다.

**시스템 리소스 제한**  
이 솔루션에서 메모리 및 CPU에 대한 구성 요소별 리소스 제한은 AWS IoT Greengrass 코어 소프트웨어를 루트로 실행할 때와 동일한 방식으로 작동합니다.

## 솔루션 4: 기능이 제한된 루트 AWS IoT Greengrass V2 로 설정
<a name="non-root-solution-4"></a>

 AWS IoT Greengrass 코어 소프트웨어를 루트로 실행하되 Linux 기능 세트를 줄이려면이 솔루션을 사용합니다. 이 구성은 소프트웨어 및 해당 구성 요소에 사용할 수 있는 기능을 제한하여 공격 표면을 제한하면서 루트로 실행되는의 전체 기능을 제공합니다.

**단점**  
이 솔루션의 고려 사항은 다음과 같습니다.
+ **RequiresPrivilege가 있는 구성 요소에는 제한된 기능이** 있습니다.를 사용하는 구성 요소는 전체 루트 권한이 아니라 AWS IoT Greengrass 코어 소프트웨어와 동일한 제한된 기능 집합으로 `RequiresPrivilege` 실행됩니다.

**사전 조건**  
이 솔루션에는 다음이 필요합니다.
+ 루트 액세스
+ 디바이스에 시스템됨

**제한된 기능을 사용하여 루트 AWS IoT Greengrass V2 로를 설치하고 실행하려면**

1. 에서 디바이스 환경을 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md)설정하고, 자격 증명을 제공하고, AWS IoT Greengrass 코어 소프트웨어를 다운로드하는 단계를 완료합니다.

1.  AWS IoT Greengrass 코어 소프트웨어를 다운로드한 디렉터리의 `GreengrassInstaller/bin/greengrass.service.template`에서 서비스 템플릿 파일을 수정합니다. 설치 관리자를 실행하기 전에 `[Service]` 섹션에 다음 줄을 추가합니다.

   ```
   CapabilityBoundingSet=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE
   ProtectSystem=strict
   ReadWritePaths=/greengrass /tmp
   ```
   + `CapabilityBoundingSet`는 AWS IoT Greengrass 코어 소프트웨어 및 모든 하위 프로세스에 사용할 수 있는 Linux 기능을 제한하는 시스템 보안 기능입니다. 경계 집합을 구성하면 루트로 실행되더라도 Greengrass nucleus 프로세스 및 구성 요소가 수행할 수 있는 작업을 제한할 수 있습니다. 각 기능에 대한 자세한 내용은 섹션을 참조하세요[에 필요한 Linux 기능 AWS IoT Greengrass V2](#linux-capabilities-reference).
   + `ProtectSystem=strict`는 서비스에 대해 전체 파일 시스템을 읽기 전용으로 설정하여 운영 체제 수정을 방지합니다. 이렇게 하면 악성 구성 요소가 승격된 권한으로 실행되는 경우에도 시스템 파일을 보호하는 시스템화된 샌드박싱이 제공됩니다.
   + `ReadWritePaths`는 서비스가 쓸 수 있는 유일한 디렉터리를 지정합니다. 와 함께 `ProtectSystem=strict`이렇게 하면 서비스가 AWS IoT Greengrass V2 루트 디렉터리 및 에만 쓰는 것으로 제한됩니다`/tmp`.

1. 를 사용하여 설치 관리자를 실행합니다`--setup-system-service true`.

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service true
   ```

**재시작 및 OTA 업데이트 동작**  
이 솔루션에서 다음을 수행합니다.
+  AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스로 실행되며 장애 또는 디바이스 재부팅 시 자동으로 다시 시작됩니다.
+  AWS IoT Greengrass 코어 소프트웨어에 대한 OTA 업데이트가 작동합니다. 소프트웨어가 자동으로 업데이트되고 다시 시작됩니다.

**시스템 리소스 제한**  
이 솔루션에서 메모리 및 CPU에 대한 구성 요소별 리소스 제한은 AWS IoT Greengrass 코어 소프트웨어를 루트로 실행할 때와 동일한 방식으로 작동합니다.

## 에 필요한 Linux 기능 AWS IoT Greengrass V2
<a name="linux-capabilities-reference"></a>

다음 표에서는 루트가 아닌 구성으로 실행할 때 AWS IoT Greengrass 코어 소프트웨어에 필요한 Linux 기능에 대해 설명합니다. 이러한 기능은 솔루션 3 및 4에서 사용됩니다.


**필수 Linux 기능**  

| 기능 | 설명 | 에 필수 | 
| --- | --- | --- | 
| `CAP_CHOWN` | 파일 UIDs 및 GIDs | 구성 요소를 실행하는 사용자에 따라 파일 소유권 변경 | 
| `CAP_DAC_OVERRIDE` | 파일 읽기, 쓰기 및 실행 권한 검사 우회 | 에서 스크립트에 사용할 때 Greengrass nucleus 사용자가 파일을 실행하도록 허용 `RequiresPrivilege` | 
| `CAP_DAC_READ_SEARCH` | 파일 읽기 권한 확인 및 디렉터리 읽기 및 실행 권한 확인 우회 | Greengrass nucleus 사용자에게 읽기 권한이 없는 폴더에 대해서도 폴더 계층 구조를 안내합니다. | 
| `CAP_FOWNER` | 일반적으로 파일의 UID와 일치하도록 프로세스의 파일 시스템 UID가 필요한 작업에 대한 권한 검사 우회 | 파일 소유권 검사 우회 | 
| `CAP_SETUID` | 프로세스 UIDs를 임의로 조작 | Greengrass nucleus를 실행하는 사용자와 다른 사용자로 스크립트를 실행할 `sudo` 때 사용 | 
| `CAP_SETGID` | 프로세스 GIDs를 임의로 조작 | Greengrass nucleus를 실행하는 그룹과 다른 그룹으로 스크립트를 실행할 `sudo` 때 사용 | 
| `CAP_SYS_RESOURCE` | 리소스 제한 재정의 | 배포에 제한이 지정되지 않은 경우에도 구성 요소 프로세스에 대한 리소스 제한 설정 | 
| `CAP_AUDIT_WRITE` | 커널 감사 로그에 레코드 쓰기 | `sudo`가 커널 감사 로그에 쓸 수 있도록 허용 | 