해커들은 더욱 정교해지고 취약점을 이용하는 방법을 알고 있습니다. 만약 MongoDB 데이터베이스에 민감한 데이터가 있다면, 보안에 심각하게 신경 써야 합니다. 걱정하지 마세요! 이 튜토리얼이 여러분을 도울 것입니다!
이 튜토리얼에서는 MongoDB 데이터베이스를 보호하고 보안 조치를 통해 해커로부터 방어하는 방법을 배우게 됩니다.
계속 읽어보고 MongoDB 보안을 철저히 관리해보세요!
준비 사항
- 이 튜토리얼은 실습 중심입니다. 따라가려면 다음이 필요합니다:
- 리눅스 기계에 설치된 MongoDB.
- A non-root user with
sudo
privileges.
전용 관리 사용자 생성
MongoDB에는 기본 인증 시스템이 없습니다. 기본적으로 데이터베이스에 액세스할 수 있는 누구나 완전한 관리 권한을 가지고 있습니다. 너무 위험하죠! 데이터베이스를 안전하게 유지하려면 관리 권한을 가진 사용자를 생성하고 해당 관리 사용자로 데이터베이스를 잠그는 것이 필요합니다.
이 설정을 사용하면 데이터베이스 내에서 각 사용자가 수행할 수 있는 작업을 제한하면서 관리자 권한을 가진 단일 사용자 액세스 지점을 제공할 수 있습니다. 예를 들어, 개발자는 데이터베이스에 대해 읽기 전용 액세스를 가져야 하며, 관리자는 데이터를 생성하고 편집할 수 있어야 합니다.
1. 터미널을 열고 아래의 mongo
명령어를 인수 없이 실행하세요. 이 명령어를 사용하면 기본 관리자 사용자로 MongoDB 쉘에 연결할 수 있습니다.
이 관리자 사용자는 서버의 모든 데이터베이스에 대한 완전한 읽기/쓰기 액세스 권한을 가지므로, 일상적인 작업에는 이 사용자를 사용하지 않는 것이 좋습니다.
아래와 같이 “접근 제어가 활성화되지 않음”이라는 경고가 표시됩니다. 이 경고는 MongoDB 서버에 액세스할 수 있는 모든 사용자가 데이터베이스에서 원하는 작업을 수행할 수 있다는 것을 나타냅니다. 이 작업에는 데이터베이스 삭제, 삭제, 업데이트 등이 포함됩니다.
이 경고는 아직 접근 제어를 활성화하지 않았기 때문에 표시됩니다. 일단 걱정하지 마세요. 다음 섹션에서 접근 제어를 활성화하는 방법을 배우게 될 것입니다.

2. 그다음, show dbs
명령어를 실행하여 서버의 모든 데이터베이스를 표시하세요. 이 명령은 일반 사용자가 볼 수 없는 admin 데이터베이스를 포함합니다.

3. 아래의 use admin
명령을 실행하여 관리자 데이터베이스로 전환하세요. 전용 관리자 사용자를 생성하는 중이므로 이 명령은 현재 데이터베이스 컨텍스트를 admin 데이터베이스로 변경합니다. 아래에서 보여지는 것처럼.
MongoDB는 액세스 제어 규칙을 저장하고 사용자와 역할에 대한 기본 인증, 사용자 이름 및 암호를 제공하기 위해 admin 데이터베이스를 사용합니다. admin 데이터베이스를 삭제하거나 이름을 바꿀 수 없습니다. 이는 데이터베이스의 기능에 필수적입니다.

4. 이제 아래의 코드를 mongo 셸에 복사하여 붙여넣고 Enter 키를 누르세요. 이 코드는 AdminATA
라는 사용자를 생성하고 암호를 LDWbPf6Fy9Ezs3Mv
로 설정합니다. 다른 자격 증명을 원하는 대로 사용할 수 있습니다.
이 새로운 사용자는 모든 데이터베이스에 대한 읽기/쓰기 (readWriteAnyDatabase
) 액세스와 모든 컬렉션에 대한 관리자 액세스를 갖습니다. 그러나 이 사용자는 데이터베이스를 삭제하거나 이름을 변경할 수 없으며 다른 사용자의 권한을 삭제하거나 변경할 수 없습니다.
명령을 실행한 후 오류가 발생하면 코드를 다시 확인하고 다시 시도하세요.
5. 암호를 안전하게 제공하고 Enter를 누릅니다.

아래에서는 성공적으로 사용자가 추가되었다는 메시지를 볼 수 있습니다. 이 출력은 관리자 권한을 가진 사용자를 성공적으로 생성했으며 필요한 최소한의 권한으로 제한하였음을 확인합니다.
이 시점에서 모든 접근을 허용하지 않고 데이터베이스에서 필요한 작업을 수행할 수 있는 관리자 사용자인 AdminATA가 이미 생성되었습니다.

6. 마지막으로 exit 명령을 실행하여 mongo 쉘을 종료합니다.

인증을 활성화하여 보안 강화하기
이제 관리자 사용자가 있으므로 인증을 활성화하여 또 다른 보안 레이어를 추가합니다. 이렇게 하면 올바른 자격 증명을 가진 사용자만 데이터베이스에 액세스할 수 있습니다.
인증은 연결을 확인하는 프로세스를 나타냅니다. 일반적으로 사용자 이름 및 비밀번호를 제공하거나 인증 토큰을 사용하여 이루어집니다. 인증은 당신이 말하는 대로 당신 자신이며 리소스에 액세스하려는 사칭자가 아니라는 것을 보장합니다.
1. 다음을 사용하여 MongoDB 구성 파일을 편집하고 변경 사항을 저장하여 인증을 활성화하십시오:
- 즐겨 사용하는 텍스트 편집기에서 /etc/mongod.conf 파일을 엽니다. /etc/mongod.conf 파일에는 MongoDB 클러스터의 구성이 포함되어 있습니다.
- #security 지시문의 주석 처리를 제거하여 아래에 표시된 대로 MongoDB가 구성 파일에서 보안 설정을 찾도록합니다. 이 지시문은 MongoDB에게 구성 파일에서 보안 설정을 찾도록 지시합니다.
- security 지시문 아래에 새로운 줄을 추가하고 authorization: enabled라고 적어주세요. authorization: enabled 라인은 들여쓰기되어 있습니다(시작 부분에 두 개의 공백이 있음) 아래에 표시된 것처럼.

2. 다음으로 변경 사항이 적용되도록 MongoDB 서버를 다시 시작하기 위해 다음 systemctl
명령을 실행하십시오.
3. 마지막으로 MongoDB 서비스의 상태를 확인하려면 아래 명령을 실행하십시오.
아래에서 MongoDB 서버가 실행되고 연결을 수락할 준비가 되었음을 나타내는 녹색 텍스트로 활성: 활성 (실행 중)이라고 쓰여진 줄을 볼 수 있습니다.

인증이 작동하는지 테스트하기
인증을 활성화했지만 작동 여부를 어떻게 확인할 수 있을까요? 데이터베이스를 보고 인증이 작동하는지 확인하기 위해 관리자 사용자로 로그인합니다.
1. 다음 명령을 실행하여 “전용 관리 사용자 만들기” 섹션(단계 하나)에서 한 것처럼 mongo
셸에 액세스합니다.
아래에서 인증을 활성화하지 않았다는 경고인 Access control is not enabled…을 더 이상 받지 않게 됩니다. 대신, MongoDB 서버 및 MongoDB 셸 버전을 알려주는 메시지가 표시됩니다.

2. 그 다음, show dbs
명령을 다시 실행하여 데이터베이스에 여전히 액세스할 수 있는지 확인합니다.
이 명령은 관리자 사용자에게만 예약된 데이터베이스 목록을 표시해야 합니다. 하지만 아래에서 보시다시피 아무것도 나타나지 않습니다. 왜 그럴까요? 데이터베이스 목록을 보는 것은 관리자 사용자에게만 허용된 권한입니다.
mongo 셸을 Admin 역할로 인증하지 않았으므로 데이터베이스 목록을 볼 권한이 없습니다.

인증이 활성화되면 올바른 자격 증명을 포함하지 않은 연결 문자열을 사용하여 데이터베이스에 액세스하려고 하면 연결이 실패합니다.
MongoDB 보안의 핵심 부분은 연결 문자열을 인증하는 것이며, 응용 프로그램의 모든 레이어에서 인증을 구현해야 합니다. MongoDB로의 모든 연결은 자격 증명으로 구성된 인증 문자열을 사용해야 합니다. 이 자격 증명에는 올바른 사용자 이름과 암호가 포함됩니다.
3. exit
명령을 실행하여 MongoDB 셸을 종료합니다.
4. 이제 아래 명령을 실행하여 새로 생성된 관리 사용자의 사용자 이름(-u
)과 암호(-p
)로 MongoDB 셸에 로그인합니다. AdminATA
를 “전용 관리 사용자 만들기” 섹션(단계 네)에서 생성한 사용자 이름으로 대체합니다.
--authenticationDatabase
매개변수는 MongoDB 셸에게 admin
데이터베이스에 대해 인증하도록 지시합니다.
5. 프롬프트에서 관리자 사용자의 암호를 제공하세요.


6. 마지막으로 show dbs
명령을 다시 실행하여 모든 데이터베이스를 볼 수 있는지 확인하세요.
이번에는 관리자 사용자이므로 데이터베이스 목록이 표시됩니다.

결론
이 튜토리얼에서는 관리 사용자를 만들고 인증을 활성화하는 방법을 배웠습니다. MongoDB 보안을 제어하고 서버에서 데이터베이스에 액세스할 수 있는 사용자를 제한하는 방법을 배웠습니다.
이 시점에서 누가 무엇에 액세스할 수 있는지를 결정할 차례입니다. 그럼 다음 단계는 무엇인가요? 어쨌든 어떻게 MongoDB 컨테이너를 안전하게 사용하는지 배워보는 것일까요?