EC2 인스턴스에서 sudoers 파일을 편집할 때 sudo 명령을 실행할 때 구문 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 sudoers 파일을 수동으로 편집했습니다. 이제 sudo su 명령이나 권한 있는 사용자 액세스가 필요한 명령을 실행할 때 다음과 비슷한 구문 오류가 발생합니다. "/etc/sudoers: syntax error near line xx" "sudo: parse error in /etc/sudoers near line xx" "sudo: no valid sudoers sources found, quitting" "sudo: unable to initialize policy plugin"

간략한 설명

이 구문 오류는 /etc/sudoers 파일을 수동으로 편집하여 sudo 사용자를 변경하고 파일에 원하지 않는 문자를 추가할 때 발생합니다. 그 결과 sudo su 또는 권한 있는 사용자 액세스가 필요한 명령을 실행할 수 없는 손상된 인스턴스가 생성됩니다. 이 구문 오류를 수정하려면 다음 단계를 완료하세요.

  1. 인스턴스를 중지합니다.
  2. 루트 볼륨을 분리합니다.
  3. 루트 볼륨을 복구 인스턴스에 보조 볼륨으로 연결합니다.
  4. 연결된 볼륨을 마운트합니다.
  5. sudoers 파일에 대한 변경을 실행 취소합니다.

해결 방법

전제 조건

참고: 연결할 수 있는 실행 중인 인스턴스의 sudoers 파일을 수동으로 편집하기 위해 vi, vim 또는 nano와 같은 텍스트 편집기를 사용하지 마세요. visudo 명령을 실행하여 연결할 수 있는 인스턴스에서 /etc/sudoers 파일을 편집합니다. visudo 명령은 편집하는 동안 구문 분석 오류를 검사하고 변경 사항을 저장하기 전에 파일에 발생한 문제를 알려줍니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 인스턴스를 선택합니다.

3.    손상된 인스턴스를 선택하고, 인스턴스 상태를 선택한 다음, 인스턴스 중지를 선택합니다.

4.    인스턴스를 중지하겠습니까? 팝업에서 중지를 선택합니다.

5.    저장소 탭에서 루트 장치 이름의 볼륨 ID를 클릭합니다.

6.    볼륨 페이지에서 볼륨을 선택하고, 동작을 선택한 다음 볼륨 분리를 선택합니다.

7.    팝업에서 분리를 선택합니다. 볼륨 상태사용 가능인지 확인합니다.

8.    원본 인스턴스와 동일한 가용 영역에서 새 EC2 인스턴스를 시작합니다. 새 인스턴스가 복구 인스턴스가 됩니다.

9.    복구 인스턴스가 시작된 후 탐색 창에서 볼륨을 선택합니다.

10.    원래 인스턴스의 분리된 루트 볼륨을 선택합니다. 동작을 선택한 다음 볼륨 첨부를 선택합니다.

11.    인스턴스에서 복구 인스턴스 ID를 선택하고 디바이스 이름을 입력합니다. 그런 다음 볼륨 연결을 선택합니다.

12.    키 페어를 사용하여 SSH로 인스턴스에 연결합니다.

13.    연결된 볼륨의 장치 이름을 확인하려면 lsblk 명령을 실행합니다.

lsblk

출력 예시:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTxvda    202:0    0    8G  0 disk
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk
└─xvdf1 202:81   0  500G  0 part

14.    마운트 디렉터리를 생성한 다음 루트 권한으로 마운트합니다.
Amazon Linux, Ubuntu, and Debian:

sudo mount /dev/xvdf1 /mnt

Amazon Linux 2023, Amazon Linux 2, CentOS 7 또는 8, SUSE Linux 12, RHEL 7.x 또는 8.x:

sudo mount -o nouuid /dev/xvdf1 /mnt

콘솔에서 새로 연결된 볼륨의 마운트 지점을 확인합니다. 마운트 지점은 일반적으로 /dev/xvdf1입니다.

15.    마운트된 디렉터리에 Chroot를 입력합니다.

for dir in {/dev,/dev/pts,/sys,/proc}; do sudo mount -o bind $dir /mnt$dir; donechroot /mnt

16.    subdoers 파일을 편집하려면 visudo 명령을 실행합니다.

visudo

파일을 편집할 때 구문 오류를 일으킨 변경 사항을 되돌릴 수 있습니다. 또는 복구 인스턴스에서 파일을 복사하여 /mnt/etc/sudoers 파일을 알려진 올바른 파일로 바꿀 수 있습니다.

원본 파일의 백업을 생성합니다.

sudo mv /mnt/etc/sudoers /mnt/etc/sudoers.backup

파일을 인스턴스에 복사합니다.

sudo cp /etc/sudoers /mnt/etc/sudoers

17.    sudoers 파일을 편집하거나 바꾼 후 볼륨을 마운트 해제합니다.

for dir in {/dev,/dev/pts,/sys,/proc}; do umount /mnt$dir; donesudo umount /mnt

18.    원본 인스턴스에 볼륨을 연결합니다. 마운트 지점은 원본 인스턴스의 루트 볼륨이므로 /dev/xvda 또는 /dev/sda1로 지정합니다.

19.    원본 인스턴스를 시작합니다.

20.    SSH를 사용하여 인스턴스에 연결하고 sudo 명령을 실행합니다.

관련 정보

EC2 Linux 인스턴스에서 sudo 명령을 실행할 수 없는 이유는 무엇인가요?

AWS 공식
AWS 공식업데이트됨 7달 전
댓글 없음

관련 콘텐츠