MongoDB 설치하면 최초에 authentication 없다.

그래서 비밀번호나 id없이 접속하여 어떤 database에도 접근할수 있고 심지어 admin database에도 접근 가능하다. (물론 bindIp 설정을 건드리지 않았다면 local에서 만 접근 할수 있지만, 어쨌건 접근만 가능하면 login과정없이 들어가진다.)


설치과정에서 root의 비밀번호를 물어보는 mySql을 보다가 MongoDB를 보면 좀 의아하다..


그리고 그로 인해서 아래와 같은 문제도 발생 가능

 

일주일동안 27,000개 이상의 MongoDB가 랜섬웨어에 감염돼

http://blog.alyac.co.kr/923


-_-)... 잘 모르겠지만 Production에 적용하기 위해서는 DB자체 말고 DB가 설치된 서버에 무엇인가 보안을 위한 조치가 필요할것 같다.


어쨌건 처음에 root나 admin의 개념이 없기때문에 생성해 주어야 하는데, 명시적으로 계정과 비밀번호를 만들고, authentication option enable해주어야 한다.


좀더 자세히 설명하면


1. MongoDB에서 admin 계정 만들기

admin Database에서 createUser 명령어로 admin 계정을 만든다. 계정이름은 admin이 아니어도 상관없음

use admin

db.createUser(
  {
    user
: "admin",
    pwd
: "abc123",
    roles
: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)


2. security.authorization 옵션 enable

sudo로 MongoDB 설정 파일을 수정해야 한다.

$ sudo vi /etc/mongod.conf 


파일이 열렸으면 아래 항목을 추가 한다.

 security:

   authorization: enabled


3. MongoDB 재시작

sudo service mongod restart



Authentication 설정 이후에는 아래와 같은 방법으로 MongoDB에 접근해야 한다.
p옵션 뒤에 비밀번호를 적어주어도 된다.

 $ mongo -u "admin" -p --authenticationDatabase "admin"

MongoDB shell version v3.4.2

Enter password:

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.4.2

>


혹은 shell안에서 login하는 방법은 아래와 같다.

반드시 use admin으로 admin Database로 이동해주어야 한다.

use admin

db.auth("admin", "welcome!" )


그런데... 위와 같이 계정을 만들고 비번을 만들어도 그냥 바로 mongo 라는 명령어로 shell에 접속 가능하다-_- 물론 접근한 이후에 Database에는 접근 불가


비록 admin을 만들었지만, 생성시 role을 admin Database에만 주었으므로, 다른 Database는 접근할 수 없다-_- 

이건 admin도 admin이 아닌것도 아닌.....

다시말하면 위의 과정으로 생성된 계정은 admin Database에 대한 관리 권한을 가지게 되는 것이다.


따라서 실제 data를 저장하기 위한 Database에도 계정을 따로 만들어주어야 한다.

아니면 admin에 다 role을 추가 해주면 되긴 되겠으나..안해봄-_-



'Development > Database' 카테고리의 다른 글

MongoDB 기본 명령어  (0) 2019.10.19
MongoDB에서 Connection Pool 구성 하기  (0) 2017.02.13
MongoDB Ubuntu에 설치하기  (0) 2017.02.10

+ Recent posts