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

4분 분량
0

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

간략한 설명

Amazon EC2 Linux 인스턴스에서 sudo 명령을 실행하려고 할 때 다음 오류가 발생할 수 있습니다.

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

이 오류는 루트가 아닌 사용자가 /usr/bin/sudo 파일을 소유할 때 발생합니다. /usr/bin/sudo 파일의 소유자는 root:root여야 합니다.

  • 오류 "sudo: /etc/sudoers is world writable"

이 오류는 /etc/sudoers 파일에 잘못된 권한이 있을 때 발생합니다. sudoers 파일은 world-writable일 수 없습니다. 파일이 world-writable인 경우 누구든지 파일에 쓸 수 있습니다. 기본적으로 sudoers 파일의 파일 모드는 0440입니다. 이 경우 소유자와 그룹이 파일을 읽을 수 있지만 누구도 파일에 쓸 수 없습니다.

이러한 오류를 수정하려면 Amazon EC2 직렬 콘솔 또는 사용자 데이터 스크립트를 사용하세요.

해결 방법

EC2 직렬 콘솔 사용

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

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

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

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

사용자 데이터 스크립트를 사용하여 다음 배포판의 sudo 오류를 수정합니다.

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

중요: 이 절차를 수행하려면 EC2 인스턴스를 중지하고 시작해야 합니다. 이로 인해 데이터가 손실되고 다른 인스턴스가 중지되고 퍼블릭 IP 주소가 변경될 수 있습니다. 자세한 내용은 인스턴스를 중지하면 어떻게 되나요?를 참고하세요.

  1. Amazon EC2 콘솔을 연 다음 인스턴스를 선택합니다.

  2. 작업, 인스턴스 상태, 중지를 선택합니다.
    참고: 중지를 선택할 수 없는 경우 인스턴스가 이미 중지되었거나 루트 디바이스가 인스턴스 스토어 볼륨일 수 있습니다.

  3. 작업, 인스턴스 설정, 사용자 데이터 편집을 선택합니다.

  4. 다음 스크립트를 사용자 데이터 편집 필드로 복사하고 붙여 넣은 다음 저장을 선택합니다. 전체 스크립트를 복사해야 합니다. 스크립트를 붙여 넣을 때 추가 공백을 삽입하지 마세요.
    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 기반 배포판

    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 보안 정책 플러그인의 권한, 소유자 및 그룹을 복구합니다.
    중요: /usr/bin/sudo에 대한 권한은 다양한 리눅스 배포판에 따라 다릅니다. 권한을 영구적으로 설정하기 전에 운영 체제가 비슷한 인스턴스에서 권한을 확인하세요. ls -l /usr/bin/sudo를 실행한 다음 이 예제의 권한을 참조로 사용하세요.
    참조 인스턴스가 새로 설치되고 프로덕션 단계에 있지 않은지 확인하여 이 파일이 변경되지 않도록 하세요.

  5. 인스턴스를 시작한 다음 SSH를 통해 인스턴스에 연결합니다.
    참고: 구문 오류가 발생하는 경우 EC2 인스턴스에서 sudoers 파일을 편집했는데 이제 sudo 명령을 실행하려고 할 때 구문 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

AWS 공식
AWS 공식업데이트됨 7달 전