본문 바로가기
코딩과 알고리즘

몽고DB, 계정 보안! 최고관리자 계정 만들기

이번 시간에는 몽고DB 의 계정 보안에 대해 살펴보겠습니다.
관계형 데이터베이스 대부분은 데이터베이스에 로그인할 때 관리자 계정이라는게 있습니다.
보통 mysql(or mariadb)과 mssql 계열은 root, 오라클은 sys이지요.

몽고DB도 관리자 계정이란게 있긴 하지만 처음 몽고DB를 설치하면 관리자 계정 없이 로그인이 됩니다.
계정 인증 기능이 없는게 아니라 기본으로 비활성화(disable) 되어 있기 때문이지요.
이는 사실 외부 해킹의 소지가 있습니다. 그것도 매우 큽니다.

만일 해커가 몽고 DB의 진입 입구까지만 도달할 수 있다면
그 후부터는 아무런 비밀번호 없이 들어갈 수 있으니
아파트 문을 열어둔 셈이나 마찬가지입니다.

그래서 처음에는 이 보안설정을 해주어야 합니다.
연습하는 수준이라면 상관없겠지만 추후 회원개인정보를 보관하는 용도라든가
기밀 정보를 보관할 목적이라면 꼭 필요한데요.

몽고DB콘솔 창에서 이를 작업할 수 있습니다. 하나씩 살펴볼까요?
이 글은 AWS(Amazone Web Service) 환경 에서 몽고db4.4 ( 2020. 11. 20 최신버전 )을 기준으로 합니다.


몽고 db는 여러개의 데이터베이스를 가질 수 있습니다.
다양한 목적에 따라 각각의 데이터베이스마다 관리자 아이디를 설정할 수 있고,
이 모든 데이터베이스를 총괄 관리할 수 있는 최고 관리자 아이디를 설정할 수 도 있습니다.

몽고DB 의 보안 기능을 활성화하기 전에 먼저 이 최고 관리자 아이디를 하나 생성해 주어야 하는데요.
보안 기능을 먼저 활성화하면 로그인할 수 있는 아이디가 전혀 없어 로그인할 수 없기 때문입니다.

AWS에 로그인 한 다음 sudo su - root 를 이용, root 계정으로 변신해 봅시다.

그리고 몽고DB에 로그인합니다.

mongo

최고 관리자 아이디는 몽고DB의 시스템 데이터베이스인 admin 에서 추가해주어야 합니다.
use admin 명령을 입력하여 admin 데이터 베이스로 전환해 주세요.

그리고 나서 최고 관리자 계정을 추가하는데요. mysql이나 mssql 처럼 꼭 root 를 사용할 필요는 없습니다.
하지만 편의성을 위해서 root 라는 명칭으로 관리자 계정 아이디명을 사용하도록 하겠습니다.

db.createUser({
    user:'root',
    pwd:passwordPrompt(),
    roles:['root']
})

db.createUser 는 DB에 계정을 추가하는 명령인데요.
파라미터로 주어지는 내용중 user 는 추가할 아이디를 의미하고
pwd 는 패스워드를 의미하며,
roles 는 계정의 권한을 의미합니다. ['root'] 라고 적어주면 최고관리자가 되는 것이지요.
pwd 에서는 패스워드 문장 대신 passwordPrompt() 를 입력했는데요.
이런 경우 명령어를 내린 후에는 바로 패스워드 입력 화면이 나옵니다.

여기서 패스워드를 입력하면 되는데 입력하는 패스워드는 화면에 전혀 보이지 않습니다.
누군가가 내 모니터 화면을 주시하고 있을 때 패스워드를 보여주지 않기 위해서 매우 유용하겠지요?
패스워드를 입력하면 사용자가 제대로 추가되었다고 나옵니다. 이 패스워드는 최고 관리자 패스워드이니만큼
꼭 기억해 두세요.

만일 패스워드를 잘못 타이핑하셨는데 계정이 추가가 되었거나,
입력한 패스워드가 기억이 안 나신다면
다음 명령으로 패스워드를 변경하실 수 있습니다.

db.changeUserPassword("root", passwordPrompt())

또한 만일 아이디를 잘못 타이핑하신 경우라면 아이디 삭제 후 다시 추가해 주셔야 하는데요.
아이디를 삭제하는 명령은 아래와 같습니다. 그리고 나서 다시 앞의 추가 과정을 거쳐 주시면 됩니다

db.dropUser('root')

우선 이 것으로 관리가 계정이 추가되었습니다.
제대로 추가되었는지 확인해 볼까요?
로그인 계정을 확인하는 명령은 아래와 같습니다.

db.getUsers()

이제 계정 로그인 설정을 활성화할 차례입니다.

exit 명령으로 몽고 DB 콘솔창을 나간 다음에

이제 vi 에디터로 몽고DB 환경설정 파일을 열어 로그인 기능을 활성화해봅시다.

vi /etc/mongod.conf

그리고 조금 만 내려와 보시면, 아래와 같은 부분이 있을텐데요.
화살표 키로 커서를 #security 앞에 놓고 'x'를 눌러 # 1글자를 삭제합니다. 

그리고 바로그 아랫줄로 이동, i 키를 눌러 삽입모드로 전환한 다음에, 아래 내용을 입력합니다.

  authorization: enabled

ESC, :wq!, Enter 키를 순차 입력하여 파일을 저장해 줍니다.
그리고 변경 사항을 적용하기 위해 몽고 DB 데몬을 다시 시작합니다.

service mongod restart

이제 mongo 명령으로 몽고DB에 로그인하면 로그인은 됩니다.
하지만 show dbs 명령을 내리면 아무 데이터베이스도 조회되지 않습니다.
데이터베이스가 없는게 아니라, 아무 권한이 없기 때문입니다.
이 상태에서는 데이터베이스를 선택할 수도 없고 컬렉션에 도큐먼트를 삽입할 수도 없습니다.

권한을 얻기위해 exit 명령으로 몽고DB 콘솔창을 빠져 나갑니다.

그리고 아래 명령으로 로그인을 시도합니다.
만일 최고관리자 아이디를 root 가 아닌 다른 아이디로 입력하신 경우 다른 아이디를 사용하시면 됩니다.

mongo -u root

그리고 패스워드 입력란에는 root 계정의 패스워드를 입력해주시면 됩니다. 역시 입력과정은 화면에 보이지 않습니다.

그리고 나서 show dbs 명령을 내리면 모든 데이터 베이스가 보일 것입니다.

축하드립니다! 이로써 몽고DB의 최고 관리자 아이디 생성을 마쳤습니다.
이제 다음에는 각각의 데이터베이스별 아이디에 대해 다루어 보도록 하겠습니다.

여기까지 따라와주신 분들 수고하셨습니다.
오늘도 여기까지 읽어주신 분들께도 모두 감사 말씀 드립니다.


하나님의 말씀을 마음에 담아두면 영혼의 양식이 풍성해 집니다.

나 여호와가 말하노라 
사람이 내게 보이지 아니하려고 누가 자기를 은밀한 곳에 숨길 수 있겠느냐 
나 여호와가 말하노라 나는 천지에 충만하지 아니하냐

- 예레미야 23장 24절 말씀 -