AWS EC2에서 배포하고 있는 개인 프로젝트의 하나의 페이지가 어느 순간 데이터를 불러오지 못하고 있었습니다. 그래서 몽고 DB에 문제가 있다고 판단해 살펴보았습니다.
해킹을 당했습니다. 27017 포트에 모든 ip를 허용하고 계정 인증을 하지 않았서 누구나 DB에 접근 가능해서 이런 사태가 일어난 것 입니다.
그래서 해결 방법은 계정 인증 설정을 해주면 됩니다. 그 방법을 알아보겠습니다.
먼저 mongoDB shell에 접속해서 계정을 만듭니다. 저는 간단하게 관리자 데이터베이스에 만들겠습니다. 비밀번호 복잡하게 만들어야 합니다. 간단하면 해킹 당할 수 있습니다.
$ mongo
> use admin
> db.createUser({
user: 'username',
pwd: 'password',
roles: ['readWriteAnyDatabase']
})
계정을 성공적으로 만들었다면 성공했다는 메세지가 출력될 것 입니다.
아니면 show users
로 확인하시면 됩니다.
계정 권한에 대한 설명하겠습니다.
이 외에 다른 권한은 MongoDB의 인증과 권한를 참고하세요.
몽고db 설정 파일을 수정하기 위해 sudo로 실행합니다.
sudo vim /etc/mongod.conf
몽고db 설정 파일에 아래와 같이 수정합니다. security
속성 밑에 띄어쓰기 2번 해야 합니다. tab하지 마시고 스페이스바 2번 해야 제대로 설정됩니다. security
앞에 #
을 제거합니다.
security:
authorization: enabled
인증 설정이 완료되면 몽고db를 재시작합니다.
$ sudo systemctl restart mongod
shell에 접근해서 인증에 성공하면 1이 표시됩니다.
$ mongo
> use admin
> db.auth("<username>", "<password>" )
1
계정 인증 없이 db 명령어를 사용하면 접근이 되지 않습니다.
계정 인증된 몽고 DB URI 접속 시 아래와 같이 사용합니다.
mongodb://<아이디>:<비밀번호>@<ip>:27017/?authSource=admin