Amazon EC2 Linux 인스턴스를 부팅할 수 없는 이유는 무엇입니까?

3분 분량
0

"SELinux 정책을 로드 실패, 멈춤"이라는 오류 메시지가 표시되고 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 부팅할 수 없습니다.

간략한 설명

Amazon EC2 Linux 인스턴스가 부팅에 실패하고 Amazon EC2 Linux 콘솔에 오류 메시지가 표시됩니다. 이 오류는 인스턴스가 SELinux(보안 강화 Linux) 정책을 로드하지 못했음을 의미합니다. 오류의 원인으로는 잘못 구성된 SELinux 설정, 손상되거나 누락된 SELinux 정책 파일 등이 있습니다.

해결 방법

정지된 SELinux 정책에서 인스턴스를 복구하려면 다음 옵션 중 하나를 선택하십시오.

  • 최근 스냅샷에서 인스턴스의 루트 볼륨을 복원합니다.
  • 복구 인스턴스를 사용하여 SELinux 정책 구성을 다시 만들거나 수정합니다.

최근 스냅샷에서 인스턴스의 루트 볼륨 복원

Amazon Elastic Block Store(Amazon EBS) 루트 볼륨 스냅샷이 있는 경우 루트 볼륨을 이전 작동 상태로 복원할 수 있습니다. 자세한 내용은 Amazon EC2 인스턴스를 중단하지 않고 루트 볼륨 교체를 참조하십시오. 참고: 이 방법을 사용하면 스냅샷을 만든 후 추가한 데이터가 손실됩니다.

SELinux 정책 구성을 다시 만들거나 수정하려면 복구 인스턴스를 사용하십시오.

복구 인스턴스를 사용하여 SELinux 구성을 다시 만들거나 수정하려면 다음 단계를 완료하십시오.

  1. 복구 또는 임시 인스턴스를 시작합니다. 작동하지 않는 인스턴스의 Amazon Machine Image(AMI)를 사용하여 가상 프라이빗 클라우드(VPC)에서 새 EC2 Linux 인스턴스를 시작합니다. 새 인스턴스가 작동하지 않는 인스턴스와 동일한 가용 영역에 있는지 확인하십시오. 이제 새 인스턴스를 복구 인스턴스로 사용할 수 있습니다. 작동하지 않는 인스턴스와 동일한 가용 영역에 있는 기존 인스턴스를 사용할 수도 있습니다.
  2. 작동하지 않는 인스턴스에서 Amazon Elastic Block Store(Amazon EBS) 루트 볼륨을 분리합니다. 나중에 사용할 수 있도록 디바이스 이름(/dev/xvda 또는 **/dev/sda1)**과 볼륨 ID(**vol-**로 시작)를 기록해 둡니다.
  3. EBS 볼륨을 보조 디바이스로 복구 인스턴스에 연결합니다(예: /dev/sdf).
  4. Secure Shell(SSH) 또는 AWS Systems Manager(SSM) Session Manager를 사용하여 복구 인스턴스에 연결합니다. 루트 파티션 장치 이름을 식별하려면 lsblk 명령을 실행합니다.
    sudo -i
    lsblk -o +PARTLABEL,LABEL,SERIAL | sed 's/vol/vol-/'
    참고: 루트 파티션에는 **/**라는 레이블과 partlabel Linux가 있습니다. 항목이 여러 개 있는 경우 볼륨 ID를 사용하여 문제가 있는 인스턴스의 루트 볼륨을 구분합니다.

루트 파일 시스템 마운트

임시 마운트 지점을 생성합니다(예: /mnt/rescue). 연결된 볼륨에서 루트 파일 시스템을 마운트하려면 다음 명령을 실행합니다.

mkdir -p /mnt/rescue
mount -o nouuid /dev/device-name /mnt/rescue

참고: device-name을 이전 단계에서 식별한 루트 파티션의 디바이스 이름으로 바꾸십시오.

chroot를 사용하여 루트 디렉터리를 변경하려면 다음 명령을 실행합니다.

for i in proc sys dev run; do mount --bind /$i /mnt/rescue/$i; done
chroot /mnt/rescue

참고: 예에서 /dev, /proc, /sys, /run 디렉터리는 원래 루트 파일 시스템에서 바인드 마운트됩니다. 이 구성을 통해 chroot 환경 내에서 실행되는 프로세스가 이러한 시스템 디렉토리에 액세스할 수 있습니다.

SELinux 정책 구성 문제 해결

SELinux 정책을 다시 생성하려면 다음 명령을 실행합니다.

semodule -B

SELinux를 비활성화하려면 다음 명령을 실행합니다.

sed -i -E 's/^SELINUX=(permissive|enforcing)/SELINUX=disabled/' /etc/selinux/config

복구 인스턴스에서 볼륨을 마운트 해제하고 다시 연결

  1. chroot 환경을 종료하고 볼륨을 마운트 해제하려면 다음 명령을 실행합니다.
    exit
    umount /mnt/rescue/{proc,sys,dev,run,}
    참고: /mnt/rescue: target is busy인 경우 -l 옵션(예: umount -l /mnt/rescue)을 사용하여 강제로 분리하십시오.
  2. 복구 인스턴스에서 볼륨을 분리합니다. 그런 다음 볼륨을 원본 인스턴스에 루트 볼륨으로 다시 연결합니다(디바이스 이름은 /dev/xvda 또는 /dev/sda1).
  3. 원본 인스턴스를 시작한 다음 부팅 문제가 해결되었는지 확인합니다.

SELinux 정책 백업 및 테스트
SELinux 정책 파일에 대해 다음 단계를 완료하는 것이 좋습니다.

  1. 수정하기 전에 작동하는 SELinux 정책을 백업하십시오.
    정책을 백업하려면 다음 tar 명령을 실행합니다.

     tar -czvf selinux-policy-store-backup.tar.gz /etc/selinux/targeted/policy/
  2. 비프로덕션 환경에서 변경 사항을 테스트합니다.

관련 정보

Red Hat 웹사이트의 시스템을 부팅할 수 없음: SELinux 정책 로드 실패, 멈춤

Red Hat 웹사이트의 SELinux 사용자 및 관리자 가이드 Red Hat 문서

AWS 공식
AWS 공식업데이트됨 4달 전