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

최종 업데이트 날짜: 2020년 3월 27일

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 명령이나 권한이 있는 사용자 액세스가 필요한 명령을 실행하지 못할 수 있습니다. 이 구문 오류를 수정하려면 인스턴스를 중지하고, 루트 볼륨을 분리하고, 복구 인스턴스에 연결하고, 루트 볼륨을 보조 볼륨으로 마운트한 다음, sudoers 파일의 변경 사항을 되돌립니다.

경고: 이 절차를 시작하기 전에 다음 사항에 유의해야 합니다.

해결 방법

참고: 연결할 수 있는 실행 중인 인스턴스에서 vi, vim 또는 nano와 같은 텍스트 편집기를 사용하여 sudoers 파일을 수동으로 편집하지 마십시오. 항상 visudo를 실행하여 연결할 수 있는 인스턴스에서 /etc/sudoers 파일을 편집하십시오. Visudo는 사용자가 편집할 때 구문 분석 오류를 검사하므로 변경 사항을 저장하기 전에 파일에 발생한 문제를 발견할 수 있습니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 [인스턴스]를 선택하고 손상된 인스턴스를 선택합니다.

3.    [작업]을 선택하고 [인스턴스 상태]를 선택한 다음 [중지]를 선택합니다.

4.    [설명] 탭에서 [루트 디바이스]를 선택한 다음 [EBS ID]를 선택합니다.

5.    [작업]을 선택하고, [볼륨 분리](/dev/sda1 또는 /dev/xvda)를 선택한 다음, [예, 분리]를 선택합니다.

6.    [상태]가 [사용 가능]인지 확인합니다.

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

8.    복구 인스턴스를 시작한 후에 탐색 창에서 [볼륨]을 선택한 다음, 원래 인스턴스의 분리된 루트 볼륨을 선택합니다.

9.    [Actions]를 선택하고 [Attach Volume]을 선택합니다.

10.    복구 인스턴스 ID(1-xxxx)를 선택한 다음, 디바이스 이름(예: /dev/sdf)을 입력합니다.

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

12.    lsblk 명령을 실행하여 연결된 볼륨의 디바이스 이름을 확인합니다.

lsblk

다음은 출력에 대한 예입니다.

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    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

13.    마운트 디렉터리를 생성한 다음 루트 권한으로 마운트합니다.

sudo mount /dev/xvdf1 /mnt

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

14.    마운트된 디렉터리로 Chroot합니다.

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

15.    visudo 명령을 사용하여 sudoers 파일을 편집합니다.

visudo

파일 편집 방법은 두 가지 옵션이 있습니다.

옵션 1: 구문 오류를 생성한 변경 사항을 되돌립니다.

옵션 2: 복구 인스턴스에서 파일을 복사하여 /mnt/etc/sudoers 파일을 복구 인스턴스의 알려진 올바른 파일로 교체합니다.

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

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

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

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

16.    sudoers 파일을 편집하거나 교체한 후, 볼륨의 마운트를 해제합니다.

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

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

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

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


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?