Docker 기반 mongodb

Docker 기반 mongodb

Official : https://hub.docker.com/_/mongo/
참조: https://github.com/dockerfile/mongodb

로컬에 “mongo_data” 라는 데이터 저장소가 있고 29817 포트로 실행하기를 한다면 다음 같다:

1
$ docker run -d -p 29817:27017 -v /home/its/mongo_data:/data/db --name mongodb mongo

그리고 docker로 시작한 mongodb 컨테이너에 있는 mongo 를 사용해서 데이터베이스에 접속할 수 있다.

1
$ docker exec -it mongodb mongo

인증 이용

1
$ docker run -d -p 29817:27017 -v /home/its/mongo_data:/data/db --name mongodb mongo --auth

admin 데이터에이스에서 사용자 관리 계정 등록

1
2
$ docker exec -it mongodb mongo admin
> db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

MongoDB 구성 설정과 사용자 인증 사용

MongoDB에 관련 글

MongoDB Community Edition Installations 시리즈:ㅇ

  1. MongoDB Community Edition 4.2 설치 - ARM64 Ubuntu/Debian Armbian
  2. MongoDB 구성 설정 과 사용자 인증 사용

MongoDB Tutorials 시리즈:

  1. MongoDB Tutorials: collections
  2. MongoDB Tutorial

MongoDB와 Middleware Platform:

  1. NodeJS Mongoose
  2. Mongodb mongoose-middleware

이전 버전과 기타 자료:

  1. MongoDB User Authentication
  2. MongoDB Community Edition 3.6 on Ubuntu(ARM64)
  3. Mongodb 3.4 install on Armv8
  4. Raspberry Pi 3 64bit OS openSUSE: Build MongoDB 3.4


Mongo Database 설정과 사용자 인증 사용

이 문서는 MongoDB Community Edition 를 리눅스 플랫폼에서 시작과 운영에 필요한 구성 파일 mongod.conf 의 설정을 다루고 있다. 이를 통해 데이터베이스 서비스를 동작시키고, 인증한 사용자로서 클라이언트 프로그램으로 접속하기 위한 기본 인증방식을 구성하는 것을 정리하고 있다.

  1. Mongo Database 설정
  2. 기본인증 구성

이 글의 내용은 MongoDB Community Edition 3.6 이후 4.2 까지 사용이 가능하다.

자세히 보기

MongoDB Community Edition 4.2 설치 - ARM64 Ubuntu/Debian Armbian

MongoDB에 관련 글

MongoDB Community Edition Installations 시리즈:ㅇ

  1. MongoDB Community Edition 4.2 설치 - ARM64 Ubuntu/Debian Armbian
  2. MongoDB 구성 설정 과 사용자 인증 사용

MongoDB Tutorials 시리즈:

  1. MongoDB Tutorials: collections
  2. MongoDB Tutorial

MongoDB와 Middleware Platform:

  1. NodeJS Mongoose
  2. Mongodb mongoose-middleware

이전 버전과 기타 자료:

  1. MongoDB User Authentication
  2. MongoDB Community Edition 3.6 on Ubuntu(ARM64)
  3. Mongodb 3.4 install on Armv8
  4. Raspberry Pi 3 64bit OS openSUSE: Build MongoDB 3.4


Install MongoDB 4.2 Community edition 설치

이 문서는 Arm64 기반 CPU를 사용하는 Raspberry Pi, Odroid, PINE64, OrangePi 등 SBC 지원 보드 계열 위에서 Ubuntu/Debian 에서 설치 및 사용 가능한 MongoDB Community Edition 4.2 버전을 설치하고 구성하는 과정을 정리하고 있다.

MongoDB Community Edition 버전 Amd64, Arm64 의 설치는 Install MongoDB Community Edition on Debian 에서 제공하고 있다.

하지만 Arm64를 지원하는 Odroid C2, PINE64, OragePi 등 SBC 브드의 Armbian, Ubuntu 오에스에서 MongoDB Community Edition 을 저장소에서 apt 명령으로 직접 설치가 안되서 작은 트릭 이 필요하다.

  • MongoDB Community Edition 4.2 설치
  • systemd 사용이 가능한 mongod Unit 파일 구성
자세히 보기

MongoDB Community Edition 3.6 on Ubuntu

2018-06-22 내용 정리, User auth 링크
{:.right-history}

이 문서는 Ubuntu/Debian 계열 정규 배포본에 3.x 버전을 지원하지 않는 플랫폼에 MongoDB Community Edition 3.6 버전을 설치하는 과정을 정리하고 있다. 내용의 기초는 MongoDB Community Edition 3.6 버전을 Amd64, Arm64 지원하는 64bit OS에 설치해 사용하기 위해서 Install MongoDB Community Edition, on-ubuntu를 따라서 진행하고 경험상 필요한 부분을 추가로 정리했다.

  • MongoDB Community Edition 3.6 설치
  • Mongo Database 구성
자세히 보기

Monitoring fail2ban

Monitoring fail2ban

Install

로그를 검사해 의심스런 IP 를 찾아 Firewall rule을 관리하기 어렵다 Fail2ban은 정규표현식을 사용해서 로그에서 의심스런 IP를 찾아 Firewall 등록할 수 있도록 해준다.

Fail2ban

로그를 검사해 의심스런 IP 를 찾아 Firewall rule에 등록해 관리하는 것은 어려운 과정이다. Fail2ban은 정규표현식을 사용해서 로그에서 의심스런 IP를 찾아 Firewall 등록 할 수 있도록 해준다.

설치

fail2baniptables 패키지와 함께 설치한다.

1
$ sudo apt install iptables fail2ban

그리고 systemctl 로 재대로 서비스가 시작되는지 확인해 본다.

1
2
$ sudo systemctl restart fail2ban.service    # 재시작
$ sudo systemctl status fail2ban.service # running 상태 확인

설정을 위해서 fail2ban 설정 파일인 fail2ban.conf, 그리고 jail 파일 jail.conf 파일을 .local 파일로 복사한 사용자 정의 파일에서 사용한다.

1
2
3
$ cd /etc/fail2ban
$ sudo cp fail2ban.conf fail2ban.local # 설정파일
$ sudo cp jail.conf jail.local # jail 설정

/etc/fail2ban 디렉토리

설치된 후 관련된 설정 파일은 /etc/fail2ban 디렉토리에 저장됩니다. 관련한 로그 기록은 /etc/logratate.d/fail2ban에 정의되어 /var/log/fail2ban.log 로 저장됩니다.

다음은 설정 디렉토리 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tree -L 2 fail2ban/
fail2ban/
├── action.d
│   ├── ...
│   ├── ufw.conf
│   └── xarf-login-attack.conf
├── fail2ban.conf
├── fail2ban.local
├── fail2ban.d
├── filter.d
│   ├── ...
│   ├── sshd.conf
│   └── xinetd-fail.conf
├── jail.conf
├── jail.d
│   └── defaults-debian.conf
├── jail.local
├── paths-common.conf
└── paths-debian.conf
  • jail.conf: jail 이라 불리는 모니터링할 대상에 대한 기본 옵션과 행위를 선언한다.
  • action.d/iptables-multiport.conf: fila2ban 이 jail에 맞게 거부(Ban)한 IP를 다루는 기본 액션이다.
  • fail2ban.local : fail2ban 주요 설정 파일
  • jail.local: jail 설정 파일
  • jaild.d/defaults-debian.conf: jail enable/disable
  • paths-common.conf: 로그 파일 경로
  • paths-debian.conf: 로그 파일 경로

설정

fail2ban은 jail 을 구성하고 jail의 filter 그리고 action으로 나뉘어 있다.

fail2ban.conf 구성

fail2ban.conf는 기본 구성 변수로 loggin, socket 그리고 PID 파일 등등이 설정된다. 별도의 파일로 Jail을 구성할 때 fail2ban.local 같은 이름을 사용하고 새로 설정되는 값은 기본 설정 값을 재정의 하게 된다.

단 같은 [default] 섹션이 존재하면 구성된 내용 적용이 잘 안된다.

다음 스크립을 사용하면 모둔 변수를 주석 처리하고 수정할 옵션만 복사해 준다.

1
sed 's/\(^[[:alpha:]]\)/# \1/' fail2ban.conf | sudo tee fail2ban.local 1&> /dev/null

fail2ban.local 파일은 다음과 같은 내용을 담을 것이다.

  • loglevel: The level of detail that Fail2ban’s logs provide can be set to 1 (error), 2 (warn), 3 (info), or 4 (debug).
  • logtarget: Logs actions into a specific file. The default value of /var/log/fail2ban.log puts all logging into the defined file. Alternately, you can change the value to STDOUT, which will output any data; STDERR, which will output any errors; SYSLOG, which is message-based logging; and FILE, which outputs to a file.
  • socket: The location of the socket file.
  • pidfile: The location of the PID file.

jail.conf

/etc/fail2ban/jail.conf 는 데몬, 서비스에 대한 jail을 구성한다. jail은 log를 읽어 불필요한 것을 찾아 낸다.
다음은 jail.conf에서 주석이 달린 jail.local을 생성해 준다.

1
sed 's/\(^[[:alpha:]]\)/# \1/' jail.conf | sudo tee jail.local 1&> /dev/null

If using CentOS or Fedora open jail.local and set the backend to systemd. This is not necessary on Debian 8, even though it is a SystemD system.

/etc/fail2ban/jail.local

1
backend = systemd

화이트리스트 IP

먼저 검출된 IP 중에 무시할 영역, 화이트리스트를 선언해 줍니다. 리스트는 ‘,’로 구분하고 서브넷 혹은 IP주소를 입력한다.

1
2
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.0.1/24

차단 시간과 재시도 횟수

bantime, findtime, maxretry 은 차단 시간에 대한 구성이다.

1
2
3
bantime = 2592000
findtime = 600
maxretry = 3
  • bantime: 검출된 IP가 접속 차단 시간을 초단위로 선언해 준다. -1 이면 영속적으로 밴 된다.
  • findtime: ban이 설정 전에 로그인 간격 시간
  • maxretry: 최대 횟수

https://arno0x0x.wordpress.com/2015/12/30/fail2ban-permanent-persistent-bans/

로컬 시스템의 이메일 주소를 sendmail -t user@email.com, replacing user@email.com with your email address.

이메일

fail2ban에 검출되는 jail이 있으면 이메일 설정에 따라 메일로 경고를 받을 수 있다.

  • destemail: The email address where you would like to receive the emails.
  • sendername: The name under which the email shows up.
  • sender: The email address from which Fail2ban will send emails.

그리고 action 설정을 조절할 필요가 있다, 이것은 ban 상황이 기준점에 닿으면 발생한다. 기본 액션 %(action_)s은 사용자만 ban 한다. action_mw 액션은 ban을 실행하고 WhoIS 리포트로 메일을 보내준다. action_mwl은 모든 로그까지 함께 보내준다.

You will also need to adjudst the action setting, which defines what actions occur when the threshold for ban is met. The default, %(action_)s, only bans the user. action_mw will ban and send an email with a WhoIs report; while action_mwl will ban and send an email with the WhoIs report and all relevant lines in the log file. This can also be changed on a jail-specific basis.

1
action = %(action_)s
1
$ sudo service fail2ban restart

각 서버스에 대한 Jail 설정

필터를 이용해 Jail을 만들어 의심스런 접근을 막아 보자. 앞서 복사한 jail.local 파일에는 주요 서비스가 모두 선언되어 있고 sshd 만 활성화 되어 있다.

Jail은 다음 같이 구성된다.

1
2
3
4
5
6
7
8
[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

  • enabled: Determines whether or not the filter is turned on.
  • port: The port Fail2ban should be referencing in regards to the service. If using the default port, then the service name can be placed here. If using a non-traditional port, this should be the port number. For example, if you moved your SSH port to 3456, you would replace ssh with 3456.
  • filter: The name of the file located in /etc/fail2ban/filter.d that contains the failregex information used to parse log files appropriately. The .conf suffix need not be included.
  • logpath: Gives the location of the service’s logs.
  • maxretry: Will override the global maxretry for the defined service. findtime and bantime can also be added.
    action: This can be added as an additional setting, if the default action is not suitable for the jail. Additional actions can be found in the action.d folder.

각 서비스에 대한 jail은 jail.d에 설정 파일을 구성해도 된다.

(1) sshd

Brute-force Attack과 같은 접근을 차단하는 필터로 로그에 아래와 유사한 패턴이 나오면 IP를 검출한다.

Jul 22 06:56:50 foo sshd[14984]: Failed password for invalid user a from xxx.xxx.xxx.xxx port 55452 ssh2

jail.config 혹은 jail.local 에서 기본으로 활성화 되어 있다.

(2) ssh-ddos

sshd-ddos Filter를 사용해 SSH Service를 Scanning하거나 telnet으로 접속할 떄 발생하는 Message를 검사하여 해당 IP의 접근을 차단할 수 있습니다.

이 Filter로 검출되는 /var/log/auth.log의 Message는 다음과 같습니다.

Jul 23 13:16:25 foo sshd[21989]: Did not receive identification string from xxx.xxx.xxx.xxx

Jail 설정을 위해서 다음과 같이 입력합니다.

1
2
[sshd-ddos]
enabled = true

혹은 $ sudo vi /etc/fail2ban/jail.d/sshd-ddos.conf

1
$ sudo service fail2ban restart

Failregrexs

다양한 필터를 사용할 수있다. 의심스런 동작을 Filter로 선언해서 사용하는데 해당 필터를 점검해야할 필요가 있다. 다음

1
$ sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

이 필터를 사용자가 작성할 수 있는데 파이썬의 정규식을 사용해서 사용자 지정 필터를 작성한다.

access.log 필터 작성해 보기

nginx 로그를 대상으로 200 에러를 검출해 보자

1
91.134.232.57 - - [28/Nov/2016:07:30:23 +0900] "GET / HTTP/1.1" 200 1125 "http://hundej

123.143.201.75 - - [28/Nov/2016:17:29:18 +0900] “HEAD / HTTP/1.1” 200 0 “-“ “python-requests/2.10.0”

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-test.conf

Ban 관리

fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE

Use iptables -L -n to find the rule name…
…then use fail2ban-client status to get the actual jail names.

룰 이름이 표시된다 f2b- 으로 시작하는 룰을 찾는다

그리고 fail2ban-status 는

fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE

HOW to fail2ban

basic usages

1
2
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

1
sudo iptables -L --line-numbers

Nginx

기본으로 /etc/fail2ban/jail.conf 에 [nginx-http-auth] jail이 하나 선언되어 있다.

[nginx-http-auth]

enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log

nginx jail

nginx-noscript

웹 사이트에서 실행되고 침투할 수 있는 코드를 찾아 준다. php 등이 웹 사이트와 연동되지 않았다면 아래 제일을 추가해서 이런 임의의 실행코드 형식 실행을 방지할 수 있다

1
2
3
4
5
6
7
8
[nginx-noscript]

enabled = true
port = http,https
filter = nginx-noscript
logpath = /var/log/nginx/access.log
maxretry = 6

nginx-badbots

웹 요청에 악의적인 봇을 호출하는 것을 방지한다.

1
2
3
4
5
6
7
[nginx-badbots]

enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 2

filter

추가한 jail 이 동작할 필터를 작업해 주어야 한다. 필터는 /etc/fail2ban/filter.d 디렉토리에 있다.

nginx-http-auth.conf

기본으로 제공하는 nginx-http-auth.conf 필터에 하나를 더 추가해 준다. 아래는 사용자가 아이디와 비밀번호를 입력하지 않는 경우에 대해 필터한다. 아래의 no user/password 패턴을 추가한다.

1
2
3
4
5
6
7
[Definition]


failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$

ignoreregex =

nginx-badbots.conf

1
sudo cp apache-badbots.conf nginx-badbots.conf

nginx-noscript

[nginx-noscript] jail 은 다음 내용을 입력한다:

1
2
3
4
5
[Definition]

failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)

ignoreregex =

nginx-nohome

1
2
3
4
5
[Definition]

failregex = ^<HOST> -.*GET .*/~.*

ignoreregex =

nginx-noproxy

1
2
3
4
5
[Definition]

failregex = ^<HOST> -.*GET http.*

ignoreregex =

Jail 실행 확인

1
2
3
4
$ sudo fail2ban-client status
Status
|- Number of jail: 6
`- Jail list: nginx-noproxy, nginx-noscript, nginx-nohome, nginx-badbots, ssh-ddos, ssh

그리고 iptable의 서비스로 방화벽 규칙에 fail2ban 규칙이 동작중인지 확인한다.

1
2
3
4
5
6
7
8
9
10
11
12
 $ sudo iptables -S
...

-A fail2ban-nginx-badbots -j RETURN
-A fail2ban-nginx-nohome -j RETURN
-A fail2ban-nginx-noproxy -j RETURN
-A fail2ban-nginx-noscript -j RETURN
-A fail2ban-ssh -j RETURN
-A fail2ban-ssh-ddos -j RETURN

...

그리고 fail2ban 의 jail 실행 상태를 자세히 보고 싶므면 status 뒤에 jail 이름을 주면 된다.

1
2
3
4
5
6
7
8
9
10
$ sudo fail2ban-client status nginx-badbots
Status for the jail: nginx-badbots
|- filter
| |- File list: /var/log/nginx/access.log
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0

Testing

의심스런 동작을 Filter로 선언해서 사용하는데 해당 필터를 점검해야할 필요가 있다. 다음

1
$ sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Ban 관리

nginx 인증 요구시 잘못된 인증을 시도하면 fail2ban 규칙에 따라 접근이 금지당한다. 그리고 jail 규칙이 잘 적용 됐는지 결과를 다음 같이 확인할 수 있다:

1
2
3
4
5
6
7
8
9
10
11
$ sudo fail2ban-client status nginx-http-auth
Output
Status for the jail: nginx-http-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| \- Total failed: 12
\- action
|- Currently banned: 1
| \- IP list: 111.111.111.111
\- Total banned: 1

인증 규칙에 어긋나는 접근을 시도한 IP인 111.111.111.111을 확인 할 수 잇다.
금지된 IP는 해당 jail을 이용해 다음 같이 해제할 수 있다.

1
$ sudo fail2ban-client set nginx-http-auth unbanip 111.111.111.111

nginx-req-limit

http://blog.ricardomacas.com/index.php?controller=post&action=view&id_post=3

fail2squared

https://supine.com/posts/2012/08/fail2ban-monitoring-itself-recursively/

TO COMPLETELY FLUSH THE FAIL2BAN LOG FILE AND CLEAR OUR BLACKLIST FILE

sudo service fail2ban stop
sudo truncate -s 0 /var/log/fail2ban.log
sudo truncate -s 0 /etc/fail2ban/ip.blacklist
sudo rm /var/lib/fail2ban/fail2ban.sqlite3
sudo service fail2ban restart

https://ubuntu101.co.za/security/fail2ban/fail2ban-persistent-bans-ubuntu/

sqlite3

fail2ban.conf file, I found the following:

1
dbfile = /var/lib/fail2ban/fail2ban.sqlite3

So, I did a little research to try to find out how access the database.

To open or connect to the database:

1
$ sqlite3 /var/lib/fail2ban/fail2ban.sqlite3

To list all the tables in the database:

1
2
sqlite> .tables
bans fail2banDb jails logs

To query a table:

1
sqlite> SELECT * FROM logs;

Another table:

sqlite> SELECT * FROM bans;

To disconnect from the database:

sqlite> .quit

참조

참조: https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-debian-7

fail2ban log

fail2ban log

fail2ban 로그는 아래 형태로

1
2
3
4
5
6
7
8
9
2016-08-28 12:35:56,163 fail2ban.actions[860]: WARNING [ssh] Ban 103.237.147.19
2016-08-28 12:36:09,215 fail2ban.actions[860]: WARNING [ssh] Ban 115.248.186.3
2016-08-28 17:39:47,806 fail2ban.actions[860]: WARNING [ssh] Ban 117.3.120.94
2016-08-28 23:06:21,291 fail2ban.actions[860]: WARNING [ssh] Ban 155.94.163.64
2016-08-29 19:50:51,400 fail2ban.actions[860]: WARNING [ssh] Ban 182.75.249.110
2016-08-31 14:26:54,093 fail2ban.actions[860]: WARNING [ssh] Ban 103.207.36.36
2016-09-01 02:23:23,790 fail2ban.actions[860]: WARNING [ssh] Ban 45.32.60.93
2016-09-01 17:44:35,854 fail2ban.filter [860]: WARNING Determined IP using DNS Lookup: 61-216-182-218.hinet-ip.hinet.net = ['61.216.182.218']
2016-09-01 17:47:18,004 fail2ban.actions[860]: WARNING [ssh] Ban 61.216.182.218

awk 이용 ip 주소 추출

awk 를 사용해서 로그에서 ip주소를 추출해 보자. 로그 내용에서 ‘Ban’을 포함한 줄을 만나면 $NF 변수에 각 컨럼을 저장한다.

1
2
3
4
5
$sudo awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log
103.237.147.19
115.248.186.3
117.3.120.94

IP주소를 정렬

1
2
3
4
$sudo awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n
1 103.207.36.36
1 103.237.147.19
1 115.248.186.3
  • 각 거부당한 IP 주소는 최대 실패 횟수 이후 ban 하므로 30회 이상의 시도가 있을

모든 백업 로그에서 IP 주소 추출

백업된 로그 파일을 모두 사용하려면 zgrep 명령을 사용해도 좋다

1
$sudo zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | sort | uniq -c | sort -n

다음은 아주 위험한 서브넷을 출력한다.

1
2
3
4
5
6
7
8
9
10
11
$sudo zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | awk -F\. '{print $1"."$2"."}' | sort | uniq -c  | sort -n | tail
2 222.186.
3 111.74.
3 116.100.
3 182.100.
3 195.154.
3 42.117.
7 115.239.
8 91.224.
14 103.207.
39 221.229.
1
2
3
4
5
6
$sudo zgrep -c 221.229 /var/log/fail2ban.log*
/var/log/fail2ban.log:0
/var/log/fail2ban.log.1:2
/var/log/fail2ban.log.2.gz:0
/var/log/fail2ban.log.3.gz:2
/var/log/fail2ban.log.4.gz:68

전체 로그에 순위 매기기

1
2
3
4
5
zcat /var/log/auth.log* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c

161 Mar 20
202 Mar 21

참조
Multiple log file

http://serverfault.com/questions/486301/how-to-set-up-fail2ban-to-read-multi-log-in-a-jail

MongoDB - Database와 User Authentication

2018-06-21 설치 링크로 대체
{:.right-history}

MongoDB 설치후 데이터베이스 위치, 로그, 인증 등에 관련한 서버 구성과 설정을 정리한다.

MongoDB 2.6 과 MongoDB Community Edition 3.x 버전을 사용했다.

mongoDB 접근제어

mongoDB 는 설치과정 중에 인증과 관련해 설정하는 부분이 없어서 설치 후 누구나 DB에 접속 할 수 있다. 인증을 추가해 데이터베이스 관리자와 데이터베이스 사용자로 구분해서 이용하고, 각 데이터베이스의 사용자는 허가된 역할(Role)을 가지고 데이터베이스에 접근 가능하도록 구성한다.

자세히 보기

mongodb 3.4 on Armbian

2018-06-22 내용 정리, User auth 링크
{:.right-history}

이 문서는 MongoDB Community Edition 3.4 버전을 64bit OSAmd64, Arm64 지원 OS에 설치해 사용하기 위해서 Install MongoDB Community Edition, on-ubuntu를 따라서 진행했다.

여기서는 Arm을 사용하는 SBC[^2] 컴퓨터에 mongodb 3.4 버전을, Hardkernel Odroid C2를 사용해서 설치를 진행했다.

자세히 보기

Cloud Drives 마운트 사용하기

리눅스 ( 아마 Armbian 서버에서 사용하려고 했었던 것 같다?!)에서 Cloud drive를 사용하고자 한다.

Odroid C2 그리고 Orange-pi 시스템에서 사용할, 데스크탑 환경의 Armbian Xenial에서 사용하기 위해 클라우드 드라이브를 사용할 목적으로 사용했었다.

Google Drive

Google drive는 grive 패키지로 제공되고 있다. 최근 (아마 2016년 이후) Google의 REST API가 바뀌어 grive2 패키지를 사용해야 한다. 패키지 제공이 되지 않으면 소스 빌드해서 사용했다.

grive2 소스 기반 설치

Debian/Ubuntu/Linux Mint 에서 다음 라이브러리가 필요하다:

  • yajl 2.x
  • libcurl
  • libstdc++
  • libgcrypt
  • Boost (Boost filesystem, program_options, regex, unit_test_framework and system are required)
  • expat

다음 같이 cmake 와 필요한 라이브러리를 apt로 설치한다.

1
2
sudo apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev \
libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev pkg-config

빌드

소스 다운로드:

1
2
git clone https://github.com/vitalif/grive2
cd grive2

CMake 로는 다음 같이 빌드 환경을 구성한다

1
2
3
mkdir build
cd build
cmake ..

그리고 Make 로 다음 같이 빌드한다:

1
make -j4

그리고 설치한다:

1
sudo make install

Updates

소스는 git pull 로 최신 소스를 얻고 다시 빌드한다:

1
2
3
4
5
6
cd /path/to/yourGriveSourceCodeDir/grive2
git pull
cd build
cmake ..
make -j4
sudo make install

Usage

인증

1
2
3
4
5
6
7
8
9
10
$ grive -a
-----------------------
Please go to this URL and get an authentication code:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%....client_id=22314510474.apps.googleusercontent.com
-----------------------
Please input the authentication code here:
5/dTdVFy9xBd2cKLYvkcvJlYhwfht4IPuyJdri2Vv3sKA
Reading local directories
Reading remote server file list

참조


## OneDrive, for Linux

OneDrive, for Linux를 설치해서 사용한다.

설치

https://github.com/skilion/onedrive 와 같이 다운로드해서 설치하거나 apt로 unstable apt로 설치할 수 있다.

source 설치

git-hub 가이드에 따라,

1
2
3
4
5
sudo apt-get install libcurl-dev
sudo apt-get install libsqlite3-dev
sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list
wget -qO - http://dlang.org/d-keyring.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install dmd-bin

그런데 Armbian 에서 llibcurl-dev 패키지를 요구해서,

1
2
3
4
5
6
7
$ sudo apt-get install libcurl-dev
Reading state information... Done
Package libcurl-dev is a virtual package provided by:
libcurl4-openssl-dev 7.38.0-4+deb8u5
libcurl4-nss-dev 7.38.0-4+deb8u5
libcurl4-gnutls-dev 7.38.0-4+deb8u5
You should explicitly select one to install.

그래서 libcurl-dev을 설치했다

1
2
$ sudo apt-get install libcurl4-openssl-dev
$ sudo apt-get install libsqlite3-dev

설정

1
2
3
4
$ cat ~/.config/onedrive/config
sync_dir = "~/OneDrive"
skip_file = ".*|~*|thumbs.db|Games/*.iso"
skip_dir = ".*|Music|Movies/FullHD"

사용은

1
2
3
4
5
6
7
$ onedrive -h
Usage: onedrive [OPTION]...
no option Sync and exit.
-m --monitor Keep monitoring for local and remote changes.
--resync Forget the last saved state, perform a full sync.
-v --verbose Print more details, useful for debugging.
-h --help This help information.

참조

Linux - X Forwarding

SBC 보드 (raspberry pi, odroid c2 등)를 Terminal 기반으로 사용하려고 할 때 GUI에서 Programming을 확인해야 할 경우 X11, VNC 등을 이용할 수 있다. 여기서는 X Forwarding 기법을 정리하고 있다.

[^1]: Single Board Computer

X11 Forwarding

X11은 유닉스/리눅스의 전통적 데스크탑 프로토콜로 GUI 데스크탑 환경을 X11 Protocol을 사용해서 로컬 혹은 원격지 컴퓨터에서 이용할 수 있게 설계되어 있다.

X Windows: X ming

윈도우즈에서 X ming 환경을 구축하면 X window system을 사용할 수 있다.

자세히 보기