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나 권한이 있는 사용자 액세스가 필요한 명령을 실행하지 못할 수 있습니다. 이 구문 오류를 수정하려면 인스턴스를 중지하고, 루트 볼륨을 분리하고, 복구 인스턴스에 연결하고, 루트 볼륨을 보조 볼륨으로 마운트한 다음, 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. 마운트 디렉터리를 생성한 다음 루트 권한으로 마운트합니다.
Amazon Linux, Ubuntu, Debian:
sudo mount /dev/xvdf1 /mnt
Amazon Linux 2, CentOS 7 또는 8, SUSE Linux 12, RHEL 7.x 또는 8.x:
sudo mount -o nouuid /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 명령을 실행해봅니다.
관련 정보
EC2 Linux 인스턴스에 대해 sudo 명령을 실행할 수 없는 이유는 무엇입니까?