느리지만 단단한 IT 인프라 이야기

Cloud/AWS

[AWS] EC2 사용자 데이터 입력(Cloud-Init)으로 긴급 복구하기

바둑이 아저씨 2026. 2. 19. 22:22

( 출처 : docs.aws.amazon.com )


AWS EC2 리눅스 인스턴스에서 실수로 중요한 파일 권한을 잘못 바꿔서 root나 sudo 접근이 완전히 막히는 상황, 경험해 보신 분들 많으실 겁니다.


예를 들어 chmod -s /usr/bin/su를 잘못 실행해서 setuid 비트가 사라지면, 더 이상 su나 sudo를 통해 root 권한을 얻을 수 없게 됩니다.

이런 최악의 상황에서도 EC2는 Cloud-Init의 사용자 데이터(User Data) 기능을 이용하면 인스턴스 재부팅 전에 복구 스크립트를 강제로 실행할 수 있습니다.

인스턴스를 중지 → 사용자 데이터 입력 → 재시작 → 복구 완료 → 사용자 데이터 삭제 순서로 진행하면 됩니다.


복구가 필요한 대표적인 상황 예시

  • chmod -s /usr/bin/su → setuid 비트 사라짐 (su 명령어로 root 전환 불가)
  • chmod 700 /etc/sudoers 또는 sudoers 파일 권한/소유자 변경
  • /etc/sudoers.d/ 디렉토리 내 파일 삭제 또는 권한 오류
  • root 계정 패스워드 모름 + sudo 불가
  • sshd_config 잘못 수정해서 SSH root 로그인 불가 + 일반 사용자 sudo 불가

※ 이런 경우 Systems Manager Session Manager도 안 되고,
EC2 Instance Connect도 sudo가 필요해서 막히는 경우가 많습니다.


Cloud-Init을 이용한 복구 절차 (단계별)

  1. EC2 인스턴스 중지
    AWS 콘솔 → EC2 → 인스턴스 선택 → 인스턴스 상태 → 중지

  2. 작업 → 사용자 데이터 수정
    인스턴스 선택 → 작업(Actions) → 인스턴스 설정 → 사용자 데이터 편집(Edit user data)

  3. 아래 YAML 형식으로 사용자 데이터 입력
    (멀티파트 MIME 형식으로 cloud-config + 쉘 스크립트 결합)

  4. EC2 인스턴스 시작
    시작 후 1~2분 정도 기다린 뒤 SSH로 다시 접속 시도

  5. 복구 확인 후 사용자 데이터 삭제
    다시 사용자 데이터 편집 → 내용 전체 삭제 → 저장
    (삭제 안 하면 매 부팅마다 스크립트가 반복 실행됩니다)

실제 사용할 Cloud-Init 사용자 데이터 예제
(su setuid 복구 예시)

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"

#cloud-config
cloud_final_modules:
  - [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
chmod +s /usr/bin/su
echo "su setuid bit 복구 완료" >> /var/log/cloud-init-output.log

--//--

※ 위 스크립트는 cloud_final_modules에 scripts-user, always를 추가하여 매 부팅마다 실행되도록 강제합니다.
복구 후에는 반드시 사용자 데이터를 지워주세요.


다른 복구 사례별 간단 스크립트 예시

  • sudoers 권한 복구
    chmod 440 /etc/sudoers
    chown root:root /etc/sudoers

  • root 패스워드 강제 설정
    echo 'root:임시비밀번호' | chpasswd

  • sshd 재시작 및 PermitRootLogin yes 설정
    sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
    systemctl restart sshd

이 방법은 EC2가 살아있는 한 거의 복구 가능합니다.
(단, EBS 볼륨이 암호화되어 있고 키를 분실한 경우는 별도 복구가 필요할 수 있습니다.)

관련 궁금한 부분 있으시면, 댓글 부탁드립니다. 
감사합니다!