내용으로 건너뛰기

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

4분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에서 sudo 명령을 실행하면 오류가 발생합니다.

간략한 설명

/usr/bin/sudo 파일의 소유자는 반드시 root:root여야 합니다. /usr/bin/sudo 파일 소유자가 루트 사용자가 아닌 경우, EC2 Linux 인스턴스에서 sudo 명령을 실행하면 다음 오류 메시지가 표시됩니다.

‘/usr/bin/sudo must be owned by uid 0 and have the setuid bit set’

sudoers 파일은 world-writable 파일일 수도 없습니다. 파일이 world-writable인 경우 누구나 파일에 작성할 수 있고 다음 오류 메시지가 표시됩니다.

‘sudo: /etc/sudoers is world writable’

참고: 기본적으로 sudoers 파일의 파일 모드는 0440입니다. 이 구성은 소유자와 그룹이 파일을 읽도록 허용하지만 아무도 파일에 쓸 수는 없게 합니다.

앞의 오류를 해결하려면 Linux용 EC2 직렬 콘솔을 사용해 연결하고 문제를 해결하십시오. 또는 인스턴스의 사용자 데이터 스크립트를 열어 파일 권한을 재설정합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

EC2 직렬 콘솔을 사용해 연결 및 문제 해결

전제 조건: EC2 직렬 콘솔에 대한 액세스를 구성합니다. 직렬 콘솔은 AWS Nitro System 기반 인스턴스 및 지원되는 베어 메탈 인스턴스에서만 사용할 수 있습니다.

Amazon EC2 콘솔 또는 AWS CLI를 SSH 클라이언트 명령과 함께 사용해 직렬 콘솔로 인스턴스에 연결합니다. 직렬 콘솔에는 네트워크 연결이 필요하지 않습니다. 연결하고 나서 인스턴스의 부팅, 네트워크 구성 또는 SSH 구성 문제를 해결합니다.

연결하는 데 직렬 콘솔을 사용할 수 없는 경우, 사용자 데이터 스크립트를 사용해 sudo 오류를 해결해야 합니다.

사용자 데이터 스크립트 업데이트

참고: 사용자 데이터 스크립트로 문제를 해결하려면 인스턴스를 중지했다가 시작해야 합니다.

인스턴스 중지 및 시작 구성

참고: 인스턴스를 중지하고 시작하면 인스턴스의 퍼블릭 IP 주소가 변경됩니다. 퍼블릭 IP 주소 대신 탄력적 IP 주소를 사용하여 외부 트래픽을 인스턴스로 라우팅하는 것이 좋습니다. Amazon Route 53을 사용하는 경우 퍼블릭 IP 주소가 변경될 때 Route 53 DNS 레코드를 업데이트해야 할 수 있습니다. 중지 및 시작은 인스턴스 재부팅과는 다릅니다. 자세한 내용은 EC2 인스턴스 중지 및 시작 작동 방식을 참조하십시오.

인스턴스를 중지하고 시작하기 전에 다음 작업을 수행하십시오.

사용자 데이터 스크립트 업데이트

다음 단계를 완료하십시오.

  1. 인스턴스를 중지합니다.
    참고: Stop(중지)을 선택할 수 없는 경우 인스턴스가 이미 중지되었거나, 인스턴스의 루트 디바이스가 인스턴스 저장소 볼륨인 것입니다.
  2. 인스턴스를 선택하고 Actions(작업)를 선택합니다.
  3. Instance settings(인스턴스 설정)를 선택하고 Edit User Data(사용자 데이터 편집)를 선택합니다.
  4. (선택 사항) 필요한 권한을 모르는 경우, /usr/bin/sudo에서 올바른 권한을 확인하십시오. 운영 체제가 동일한 작동 중인 인스턴스에서 다음 명령을 실행합니다.
    ls -l /usr/bin/sudo
    참고: /usr/bin/sudo의 권한은 Linux 배포마다 다릅니다. 명령 출력의 권한을 참조용으로 사용할 수 있습니다. 명령을 실행하는 인스턴스가 오류 없는 설치이고 프로덕션 환경에 속하지 않아야 합니다. 이 구성은 파일이 변경되지 않고 유지된다는 의미입니다.
  5. Linux 배포에 따라 다음 사용자 데이터 스크립트를 입력하십시오.
    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 {} \;
    --//
    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 보안 정책 플러그인의 권한, 소유자 및 그룹을 복구합니다.
  6. Save(저장)를 선택합니다.
  7. 인스턴스를 시작합니다.
  8. SSH를 사용해 인스턴스에 연결한 다음, 테스트 명령을 실행해 sudo가 예상대로 작동하는지 확인합니다.
    명령 예시:
    sudo whoami
    참고: 앞의 명령 예시에 대한 출력은 root여야 합니다. 여전히 권한 오류가 발생하는 경우, /var/log/cloud-init-output.log에서 해결해야 하는 사용자 데이터 스크립트 실행 오류를 확인하십시오. 구문 오류가 발생하는 경우, Amazon EC2 또는 Amazon Lightsail 인스턴스에서 sudo 명령을 실행할 때 발생하는 sudo 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
AWS 공식업데이트됨 7달 전