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

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

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 파일을 루트 사용자가 아닌 사용자가 소유할 때 "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입니다. 이렇게 하면 소유자와 그룹이 파일을 읽을 수 있고 아무도 파일에 쓸 수 없게 됩니다.

사용자 데이터 스크립트를 사용하여 Red Hat 기반 배포(예: SUSE, CentOS, Amazon Linux 1, Amazon Linux 2)와 RHEL 또는 Debian 기반 배포(예: Ubuntu)의 오류를 모두 수정할 수 있습니다.

해결 방법

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

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

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

3.     [작업], [인스턴스 설정], [사용자 데이터 보기/변경]을 선택합니다.

4.     다음 스크립트를 복사해서 [사용자 데이터] 필드에 붙여 넣은 다음, [저장]을 선택합니다. 스크립트 전체를 복사하십시오. 스크립트를 붙여 넣을 때 추가 공백을 삽입하지 마십시오.

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 명령을 실행하려고 하자 구문 오류가 발생합니다’를 참조하십시오. 이 문제를 해결하려면 어떻게 해야 합니까?


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

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


도움이 필요하십니까?