EC2 Linux 인스턴스에서 sudo 명령을 실행할 수 없는 이유는 무엇입니까?
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. Actions(작업), Instance State(인스턴스 상태), **중지(Stop)**를 선택합니다.
참고: **Stop(중지)**이 활성화되지 않은 경우 인스턴스가 이미 중지되었거나 인스턴스의 루트 디바이스가 인스턴스 스토어 볼륨입니다.
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 find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \; find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \; --//
참고: 마지막 두 명령줄은 ‘/etc/sudoers.d/’ 디렉터리에 있는 사용자 지정 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 /bin/chmod 750 /etc/sudoers.d find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \; find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \; --//
참고: 마지막 두 명령줄은 ‘/etc/sudoers.d/’ 디렉터리에 있는 사용자 지정 sudo 보안 정책 플러그인에 대한 권한, 소유자 및 그룹을 복구합니다.
5. 인스턴스를 시작한 다음, SSH를 사용하여 인스턴스에 연결하십시오.
참고: sudoers 파일을 편집한 이후 SSH를 사용하여 인스턴스에 연결하려고 할 때 구문 오류가 발생할 경우, ‘EC2 인스턴스에서 sudoers 파일을 편집했는데 sudo 명령을 실행하려고 하자 구문 오류가 발생합니다’를 참조하십시오. 이 문제를 해결하려면 어떻게 해야 합니까?
관련 콘텐츠
- 질문됨 24일 전lg...
- 질문됨 2달 전lg...
- 질문됨 2달 전lg...
- 질문됨 5일 전lg...
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 한 달 전
- AWS 공식업데이트됨 9달 전