Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

Ubuntu 16.04에서 MongoDB를 보호하는 방법

<시간/>

이 기사에서는 Ubuntu 16.04에서 Mongo DB를 보호하는 방법을 배웁니다. 이전 버전에서 Mongo DB는 기본적으로 데이터베이스와 상호 작용할 수 있는 인증이 없기 때문에 자동화된 익스플로잇에 취약합니다. 모든 사용자는 데이터베이스와 콘텐츠를 생성, 읽기, 수정 및 파괴할 수 있습니다. 모든 인터페이스를 기본 설정으로 들을 수 있는 Mongo DB 데몬입니다.

인증 활성화 및 관리자 추가

이 문제는 버전 3.x 릴리스 이후 최신 버전의 Mongo DB에서 완화되었지만 인증은 기본 설정으로 여전히 비활성화되어 있으므로 모든 사용자가 데이터베이스에 대한 전체 액세스 권한을 가질 수 있습니다. 이를 보호하기 위해 관리 사용자를 만들고 인증을 활성화하고 관리 사용자로 인증을 테스트합니다.

관리자 추가

관리자를 추가하기 위해 먼저 Mongo 셸에 연결합니다.

$ 몽고

Mongo DB 셸을 열면 데이터베이스에 대한 액세스 제어가 활성화되지 않고 데이터베이스 및 구성에 대한 읽기 또는 쓰기 액세스가 제한되지 않는다는 경고가 많이 표시됩니다.

출력:MongoDB 셸 버전 v3.4.4연결 대상:MongoDB://127.0.0.1:27017MongoDB 서버 버전:3.4.4MongoDB 셸에 오신 것을 환영합니다.대화형 도움말을 보려면 "help"를 입력하세요. 보다 포괄적인 설명서는 https://docs.mongodb.org/질문? 지원 그룹을 시도해보세요https://groups.google.com/group/mongodb-userServer has startup warnings:2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten]2017-05-16T12:33:46.819+0530 I 스토리지 [initandlisten] ** 경고:WiredTiger 스토리지 엔진과 함께 XF S 파일 시스템을 사용하는 것이 좋습니다.2017-05-16T12:33:46.819+0530 I STORAGE [initandlisten] ** https://d ochub.mongodb.org/ 참조 core/prodnotes-filesystem2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** 경고:데이터베이스에 대한 액세스 제어가 활성화되어 있지 않습니다. 2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** 데이터 및 구성에 대한 읽기 및 쓰기 액세스에 제한이 없습니다.2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]2 16T12:33:46.850+0530 I CONTROL [initandlisten]2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** 경고:/sys/kernel/ mm/transparent_hugepage/enabled는 '항상' -16T12:33:46.850+0530 내가 제어 [initandlisten] ** 'never'로 설정하는 것이 좋습니다. /sys/kernel/ mm/transparent_hugepage/defrag는 '항상'입니다.2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten] ** 'never'로 설정하는 것이 좋습니다.2017-05-16T12:33:46.850+0530 I CONTROL [initandlisten]>

권한 수준은 변수 userAdminAnyDatabase에서 나오므로 관리자 계정의 사용자 이름을 선택하는 데 제한이 없습니다. 데이터베이스 관리자가 자격 증명을 저장합니다.

우리는 우리가 선택한 사용자 이름을 선택하고 아래 명령을 사용하여 보안 암호를 선택해야 합니다.

> admin.switched를 db admin으로 사용

데이터베이스가 전환되면 관리자를 생성합니다.

> db.createUser(... {... 사용자:"DBAdmin",... pwd:"DBAdmin'sSecurePassword",... 역할:[ { 역할:"userAdminAnyDatabase", db:"admin" } ]... }... )출력:사용자 추가 성공:{ "user" :"DBAdmin", "roles" :[ { "role" :"userAdminAnyDatabase", "db" :"admin" }]}> 

보안 암호를 사용하여 DBAdmin이라는 관리자 사용자를 생성했기 때문입니다.

방금 관리자 사용자를 생성했지만 Mongo DB 구성에서 인증을 활성화하기 전까지는 필요하지 않습니다.

MongoDB에 대한 인증 활성화

/etc에 있는 구성 파일 mongod.conf에서 인증을 활성화하고 Mongo DB 데몬을 다시 시작해야 합니다.

이제 mongod.conf 파일을 편집하고 $security 섹션에서 수정합니다.

$ sudo vi /etc/mongod.conf

구성 파일은 아래와 같습니다.

# mongod.conf# 모든 옵션에 대한 문서는 다음을 참조하십시오.# https://docs.mongodb.org/manual/reference/configuration-options/# data.storage:dbPath:/var/를 저장하는 위치 및 방법 lib/mongodbjournal:enabled:true# 엔진:# mmapv1:#wiredTiger:# 로깅 데이터를 쓸 위치.systemLog:destination:filelogAppend:truepath:/var/log/mongodb/mongod.log# network interfacesnet:port:27017bindIp:127.0 .0.1#processManagement:#security:#operationProfiling:#replication:#sharding:## 엔터프라이즈 전용 옵션:

섹션을 활성화하기 위해 보안(#) 앞에 주석을 제거해야 했으며 아래에 권한 부여 설정을 추가해야 하는 설정입니다.

#processManagement − 보안 − 권한 부여 − "활성화" #operationProfiling − #replication − #sharding −

보안 줄에는 공백이 없으며 두 개의 공백으로 시작해야 하는 권한 부여 줄에 유의하십시오. 구성 파일에 행을 추가했으면 mongod 데몬을 다시 시작해야 했습니다.

다음은 MongoDB 서비스를 다시 시작하는 명령입니다. –

$ sudo systemctl 다시 시작 mongod

일단, 우리는 아래 명령을 사용하여 MongoDB 서비스의 상태를 확인할 수 있는 서비스를 다시 시작합니다 –

$ sudo systemctl status mongodOutput:mongod.service - 고성능, 스키마 없는 문서 지향 데이터베이스 로드됨:로드됨(/lib/systemd/system/mongod.service; 비활성화됨, 공급업체 사전 설정:활성화됨) 활성:활성(실행 중) ) 2017년 5월 16일 화요일 12:52:09 IST; 48초 전문서:https://docs.mongodb.org/manualMain PID:3281 (mongod)Tasks:20메모리:33.3MCPU:734msC그룹:/system.slice/mongod.service└─3281 /usr/bin/mongod --quiet - -config /etc/mongod.conf5월 16일 12:52:09 ubuntu-16 systemd[1]:스키마가 없는 고성능 문서 지향 데이터베이스 시작

Mongo DB에서 인증 확인

먼저 자격 증명 없이 MongoDB에 연결합니다.

$ mongoOutput:MongoDB 쉘 버전 v3.4.4연결 대상:mongodb://127.0.0.1:27017MongoDB 서버 버전:3.4.4>

이제 과거에 표시되었던 모든 경고 메시지가 해결되었음을 알 수 있으며 이제 테스트 데이터베이스에 연결을 시도하여 인증을 테스트합니다.

> show dbs2017-05-16T12:56:17.306+0530 E QUERY [thread1] 오류:listDatabases 실패:{ "ok":0, "errmsg":"관리자가 { listDatabases:1.0 } 명령을 실행할 권한이 없습니다. ", "코드":13, "코드 이름":"무단"} :_getErrorWithCode@src/mongo/shell/utils.js:25:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1shellHelper .show@src/mongo/shell/utils.js:769:19shellHelper@src/mongo/shell/utils.js:659:15@(shellhelp2):1:1

인증 없이는 데이터베이스를 생성하거나 사용할 수 없다는 것을 알 수 있습니다. 이제 인증으로 쉘을 종료하십시오.

관리자 액세스 확인

이제 Admin 사용자 인증을 사용하여 Admin 데이터베이스에 연결을 시도합니다. 다음은 사용자 인증을 사용하여 데이터베이스에 연결하는 명령입니다. –

$ mongo -u DBAdmin -p --authenticationDatabase adminMongoDB 쉘 버전 v3.4.4비밀번호 입력:연결 대상:mongodb://127.0.0.1:27017MongoDB 서버 버전:3.4.4>show dbsadmin 0.000GBlocal 0.000GB> <블록 인용> 

이 기사에서는 admin 사용자를 추가하고 기본 설정으로 인증을 활성화하여 Mongo DB를 보호하는 방법을 배웠습니다. Mongo DB는 사용자가 데이터베이스를 생성, 삭제 및 수정할 수 있는 사용자 인증을 활성화하지 않았습니다.