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

최종 업데이트 날짜: 2021년 5월 12일

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에서 sudo 명령을 실행할 때 ‘sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set’ 또는 ‘sudo: /etc/sudoers is world writable’ 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

/usr/bin/sudo 파일을 루트 사용자가 아닌 사용자가 소유할 때 ‘/usr/bin/sudo must be owned by uid 0 and have the setuid bit set’이라는 오류가 발생합니다. /usr/bin/sudo 파일은 소유자로서 root:root가 있어야 합니다.

/etc/sudoers 파일에 잘못된 권한이 있을 때 ‘sudo: /etc/sudoers is world writable’ 오류가 발생합니다. sudoers 파일은 전 세계에서 쓰기가 가능해야 합니다. 파일이 전 세계에서 쓰기가 가능할 경우, 모든 사람이 파일에 쓸 수 있습니다. 기본적으로 sudoers 파일의 파일 모드는 0440입니다. 이렇게 하면 소유자와 그룹이 파일을 읽을 수 있고 아무도 파일에 쓸 수 없게 됩니다.

EC2 직렬 콘솔 또는 사용자 데이터 스크립트를 사용하여 이러한 오류를 수정할 수 있습니다.

해결 방법

방법 1: EC2 직렬 콘솔 사용

Linux용 EC2 직렬 콘솔을 활성화한 경우 이 콘솔을 사용하여 지원되는 Nitro 기반 인스턴스 유형의 문제를 해결할 수 있습니다. 직렬 콘솔을 사용하면 부팅 문제, 네트워크 구성 및 SSH 구성 문제를 해결할 수 있습니다. 직렬 콘솔은 작동 중인 네트워크 연결 없이 인스턴스에 연결됩니다. Amazon EC2 콘솔 또는 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 직렬 콘솔에 액세스할 수 있습니다.

직렬 콘솔을 사용하기 전에 계정 수준에서 콘솔에 대한 액세스 권한을 부여합니다. 그런 다음 IAM 사용자에게 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 생성합니다. 또한 직렬 콘솔을 사용하는 모든 인스턴스에는 암호 기반 사용자가 한 명 이상 포함되어야 합니다. 인스턴스에 연결할 수 없고 직렬 콘솔에 대한 액세스를 구성하지 않은 경우 다음 섹션인 방법 2: 사용자 데이터 스크립트 사용의 지침을 따릅니다. Linux용 EC2 직렬 콘솔 구성에 대한 자세한 내용은 EC2 직렬 콘솔에 대한 액세스 구성을 참조하세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

방법 2: 사용자 데이터 스크립트 사용

사용자 데이터 스크립트를 사용하여 다음에서 이러한 오류를 수정합니다.

  • SUSE, CentOS, Amazon Linux 1, Amazon Linux 2 및 RHEL과 같은 Red Hat 기반 배포판
  • Debian 기반 배포판(예: Ubuntu)

1.    Amazon EC2 콘솔을 열고 사용자의 인스턴스를 선택하십시오.

2.    [작업], [인스턴스 상태], [중지]를 선택합니다.

참고: [중지]가 비활성화된 경우 인스턴스가 이미 중지되었거나 해당 루트 디바이스가 인스턴스 스토어 볼륨이 됩니다.

3.    [작업(Actions)], [인스턴스 설정(Instance Settings)], [사용자 데이터 편집(Edit User Data)]을 선택합니다.

4.    다음 스크립트를 복사해서 [사용자 데이터 편집(Edit User Data)] 필드에 붙여 넣은 다음, [저장(Save)]을 선택합니다. 스크립트 전체를 복사하세요. 스크립트를 붙여 넣을 때 추가 공백을 삽입하지 마세요.

Red Hat 기반 배포판

Red Hat 기반 배포판의 경우, 다음 사용자 데이터 스크립트를 사용하세요.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

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

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
rpm --setugids sudo && rpm --setperms sudo
--//

Debian 기반 배포판

Debian 기반 배포판의 경우, 다음 사용자 데이터 스크립트를 사용하세요.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

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

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/chown root:root /usr/bin/sudo
/bin/chmod 4111 /usr/bin/sudo
/bin/chmod 644 /usr/lib/sudo/sudoers.so
/bin/chmod 0440 /etc/sudoers
--//

5.    인스턴스를 시작한 다음, SSH를 사용하여 인스턴스에 연결하십시오.

참고: sudoers 파일을 편집한 이후 SSH를 사용하여 인스턴스에 연결하려고 할 때 구문 오류가 발생할 경우, ‘EC2 인스턴스에서 sudoers 파일을 편집했는데 sudo 명령을 실행하려고 하자 구문 오류가 발생합니다’를 참조하십시오. 이 문제를 해결하려면 어떻게 해야 합니까?


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?