22

Elastix backup-guide

Embed Size (px)

Citation preview

Page 1: Elastix backup-guide

An Essential Guide

Remote DataBacking-up With

RSync

Page 2: Elastix backup-guide

ELASTIX BACKUP — How-toSynology NAS, RSync, Crontab→ Perfect!

↪→ samdx – 2017 ✓

Mục lục1 Roadmap 31.1 Quick&Dirty Guide . . . . . . . . . . . . . . . . . . . . . . . 3

2 Chuẩn bị người dùng và thư mục lưu trữ 42.1 Các thao tác trên NAS . . . . . . . . . . . . . . . . . . . . . 4

2.1.1 NAS: Tạo người dùng . . . . . . . . . . . . . . . . . 42.1.2 NAS: Tạo thư mục . . . . . . . . . . . . . . . . . . . 42.1.3 Terminal & SNMP . . . . . . . . . . . . . . . . . . . 5

2.2 Các thao tác trên Elas x . . . . . . . . . . . . . . . . . . . . 52.2.1 Login vào server với tài khoản root . . . . . . . . . 52.2.2 Tạo người dùng mới . . . . . . . . . . . . . . . . . . 52.2.3 Thử đăng nhập vào NAS . . . . . . . . . . . . . . . . 6

2

Page 3: Elastix backup-guide

3 Cấu hình SSH 73.1 Tạo SSH key cho người dùng . . . . . . . . . . . . . . . . . 73.2 Copy public key vào NAS . . . . . . . . . . . . . . . . . . . 7

3.2.1 ssh-copy-id . . . . . . . . . . . . . . . . . . . . . . . 73.2.2 Các cách khác . . . . . . . . . . . . . . . . . . . . . . 8

3.3 Đăng nhập bằng public key . . . . . . . . . . . . . . . . . . 83.4 A bit tweak for SSHD . . . . . . . . . . . . . . . . . . . . . . 9

4 Elas x Auto-backup 114.1 Các công cụ cần thiết . . . . . . . . . . . . . . . . . . . . . . 114.2 Tuỳ chỉnh công cụ . . . . . . . . . . . . . . . . . . . . . . . . 11

4.2.1 Tạo thư mục lưu trữ . . . . . . . . . . . . . . . . . . 114.2.2 Tạo bản sao các công cụ . . . . . . . . . . . . . . . . 124.2.3 Cấp quyền đọc cho tập n elas x.conf . . . . . . . 12

4.3 Chỉnh sửa backupengine . . . . . . . . . . . . . . . . . . . . 134.4 Chỉnh sửa automa c_backup.php . . . . . . . . . . . . . . . 14

5 Đồng bộ với RSync 155.1 Thử rsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.2 Các thư mục cần sao lưu . . . . . . . . . . . . . . . . . . . . 165.3 Kịch bản sao lưu . . . . . . . . . . . . . . . . . . . . . . . . 17

5.3.1 automa c_sync.sh . . . . . . . . . . . . . . . . . . . 17

6 Crontab 196.1 Các ví dụ về lập lịch . . . . . . . . . . . . . . . . . . . . . . . 19

7 TODO 21

3

Page 4: Elastix backup-guide

1 Roadmap• Tạo người dùng mới đủ phân quyền chạy sao lưu, trên NAS lẫnServer.

• Tạo thư mục nhằm mục đích dùng lưu trữ sao lưu trên NAS.

• Cấu hình SSH cho người dùng: Passwordless login with publick key.

• ///////Script////để/////sao/////lưu////dữ/////liệu//////‘sql‘:////////////////‘mysqldump‘//////////////////‘asteriskcdrdb‘////////////database.

• Chỉnh sửa automatic_backup dựa vào backupengine.

• Script để đồng bộ dữ liệu lên NAS: rsync.

• Cho vào Crond với crontab.

1.1 Quick&Dirty Guide• Tạo người dùng và thư mục lưu trữ bộ công cụ sao lưu.

• Sao chép các công cụ vào thư mục trên dữ nguyên cấu trúc.

• Cấp quyền đọc cho người dùng vừa tạo đối với tập n /etc/elastix.conf.

• Gọi crontab với tập n lên lịch định sẵn trong $backupdir/bin/cron.

4

Page 5: Elastix backup-guide

2 Chuẩn bị người dùng và thư mục lưu trữTại mục này chúng ta sẽ hoàn thành việc khởi tạo người dùng mới cho

mục đích chạy tác vụ sao lưu. Thực tế, có thể sử dụng ngay tài khoản roottrên hệ thống, nhưng điều này có thể không ện. Tất nhiên cũng có thểsử dụng người dùng đã tồn tại, thì có thể bỏ qua bước này.Tương tự đối với không gian lưu trữ.

2.1 Các thao tác trên NAS2.1.1 NAS: Tạo người dùng

Các bước:

1. Control Panel > User

2. Create > Create User

Tại đây thực hiện các lựa chọn về tên, nhóm, phân quyền của ngườidùng để hoàn thành.Tạo mới người dùng để đồng bộ lên từ Elas x. Người dùng này bắt

buộc phải đáp ứng:

• Có quyền ghi vào thư mục chỉ định.

• Có quyền sử dụng SSH (Terminal & SNMP).

Thực tế, có thể sử dụng tài khoản admin hiện có của NAS.Lưu ý: Người dùng thuộc nhóm Administrator có quyền SSH.

2.1.2 NAS: Tạo thư mục

Các bước:

1. Control Panel > Shared Folder

5

Page 6: Elastix backup-guide

2. Create hoặc Edit

Các tuỳ chọn nên thực hiện:

• Ẩn thư mục trên My Network Places.

• Ẩn thư mục con và tập n khỏi những người dùng không có quyền.

Lưu ý cấp quyền Đọc+Ghi cho người dùng vừa tạo nhằm vào mụcđích chạy sao lưu.

2.1.3 Terminal & SNMP

Control Panel > Terminal & SNMP:

• SSH Enabled.

• Specify port or leave it default (22).

2.2 Các thao tác trên Elas x2.2.1 Login vào server với tài khoản root

$ ssh -l root elastixhtroot@elastixht's password:

2.2.2 Tạo người dùng mới

Bước này tạo mới một người dùng, đồng thời gán mật khẩu, tạo thưmục nhà (home) và gán shell mặc định.

• Tên (tham số cuối của lệnh dưới): tốt nhất nên trùng với người dùngvừa tạo trên NAS.

6

Page 7: Elastix backup-guide

• Mật khẩu không bắt buộc tương tự, nhưng có thể dùng chung mậtkhẩu, dễ nhớ.

[root@elastixht ~]# useradd -c elastix -m -p daylamatkhau samdx[root@elastixht ~]# su samdx[samdx@elastixht ~]$ pwd/home/samdx

2.2.3 Thử đăng nhập vào NAS

Thử đăng nhập vào NAS với nguời dùng vừa tạo, sử dụng SSH. Mậtkhẩu là mật khẩu đã tạo trên NAS.

[samdx@centos-01 ~]$ ssh backuphtsamdx@backupht's password:Last login: Sun Mar 12 17:26:04 2017 from 10.0.0.82

BusyBox v1.16.1 (2015-05-12 15:50:32 CST) built-in shell (ash)Enter 'help' for a list of built-in commands.

BackupHT>

7

Page 8: Elastix backup-guide

3 Cấu hình SSHMục đích: Cài đặt SSH để người dùng có thể đăng nhập sử dụng mã

khoá công khai thay vì sử dụng mật khẩu → ện lợi và an toàn hơn, sẽkhông cần parse mật khẩu vào cho script rsync dùng để đồng bộ.TODO:

• Tạo mới keygen

• Cho public key vừa tạo vào file ∼/.ssh/authorized_keys trên NAStương ứng người dùng.

3.1 Tạo SSH key cho người dùngSử dụng ssh-keygen như ví dụ dưới: tạo mới một mã khoá RSA.Mục đích sử dụng publick key để đăng nhập vào NAS mà không cần

mật khẩu, nên tại dòng Enter passphrase sẽ bỏ trống, đơn giản là bấmEnter để ếp tục.

[admin@elastixht ~]$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/admin/.ssh/id_rsa):Created directory '/home/admin/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/admin/.ssh/id_rsa.Your public key has been saved in /home/admin/.ssh/id_rsa.pub.The key fingerprint is:58:82:5c:ff:65:20:3d:af:1f:87:aa:10:5c:e7:e2:d4 [email protected]

3.2 Copy public key vào NAS3.2.1 ssh-copy-id

Sử dụng ssh-copy-id theo cú pháp như dưới, mặc định ssh-copy-idsẽ sử dụng file ∼/.ssh/id_rsa.pub. Trường hợp muốn chỉ định public keykhác, sử dụng tuỳ chọn -i /path/to/pub_file khi gọi lệnh.

8

Page 9: Elastix backup-guide

[samdx@centos-01 ~]$ ssh-copy-id backupht/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s),to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed --if you are prompted now it is to install the new keyssamdx@backupht's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'backupht'"and check to make sure that only the key(s) you wanted were added.

[samdx@centos-01 ~]$

3.2.2 Các cách khác

Ngoài ra, có thể sử dụng những cách khác để thực hiện việc trên. Mụcđích là để copy nội dung của public key vào file ∼/.ssh/authorized_keycủa người dùng tương ứng trên SSH server, ở đây là NAS.

• Từ WEBUI, dùng Text Editor tạo mới và thêm nội dung cho fileauthorized_key.

• SSH vào NAS với người dùng tương ứng và thêm nội dung cho file.

• SSH vào NAS với một tài khoản khác, chuyển đổi người dùng (su)vàthực hiện việc thêm nội dung cho file.

Hãy lưu ý về phân quyền của thư mục ∼/.ssh và authorized_key, cáclỗi đăng nhập có thể phát sinh từ đây. Phân quyền 700 cho ∼/.ssh và600 cho authorized_key.

3.3 Đăng nhập bằng public keyThử login:

9

Page 10: Elastix backup-guide

[samdx@centos-01 ~]$ ssh backuphtLast login: Sun Mar 12 17:42:36 2017 from 10.0.0.82

BusyBox v1.16.1 (2015-05-12 15:50:32 CST) built-in shell (ash)Enter 'help' for a list of built-in commands.

BackupHT>

Như vậy là đã có thể đăng nhập bằng public key, mà không sử dụngtrực ếp mật khẩu của người dùng. Điều này tạo thuận ện cho việc gọirsync về sau.

3.4 A bit tweak for SSHDChúng ta sẽ làm một vài thay đổi cho SSHD trên Server, áp dụng cho

sshd cả trên NAS hay trên Elas x.

• Đổi cổng mặc định.

• Tắt đăng nhập bằng người dùng root.

• Giới hạn người dùng có thể đăng nhập bằng SSH.

• Tắt xác thực bằng mật khẩu, bắt buộc dùng Public key.

Sử dụng vim hoặc bất kỳ trình soạn thảo nào bạn thuận tay, và sửa filenhư dưới:

[root@elastixht ~]# vim /etc/sshd/sshd_config

# Use 8822 insteadPort 8822

# Disable root loginRootPermitLogin no

10

Page 11: Elastix backup-guide

# Allowed usersAllowUsers samdx

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

# To disable tunneled clear text passwords, change to no here!PasswordAuthentication no

# Change to no to disable s/key passwordsChallengeResponseAuthentication no

11

Page 12: Elastix backup-guide

4 Elas x Auto-backup

4.1 Các công cụ cần thiếtElas x cung cấp công cụ phục vụ cho việc sao lưu dữ liệu, bao gồm

từ cơ sở dữ liệu tới các file ghi âm.Công cụ này gọi là backupengine, nằm tại:

/usr/share/elastix/privileged/backupengine

Công cụ này định nghĩa các thành phần (components) của hệ thốngElas x và thực hiện sao lưu theo chỉ định, các thành phần hoặc mặc địnhlà tất cả.Đồng thời, Elas x cũng cung cấp công cụ mục đích thực hiện tự động

sao lưu, được lưu trữ tại:

/var/www/backup/automatic_backup.php

Đây là thư mục mặc định chứa các tập n sao lưu khi thực hiện saolưu từ WEBUI.

4.2 Tuỳ chỉnh công cụChúng ta phải tuỳ chỉnh một chút các công cụ này cho mục đích sao

lưu theo ý.

4.2.1 Tạo thư mục lưu trữ

Đầu ên, tạo một thư mục để làm việc. Mục đích lưu trữ các công cụvà các tập n chứa dữ liệu sao lưu.Thư mục lưu trữ có thể đặt bất kỳ đâu, tuỳ ý (trừ /{b,r}oot). Giả sử

đặt trong /var.

12

Page 13: Elastix backup-guide

Do người dùng mới tạo ra không có quyền ghi (w) trong thư mục /var,nên phải sử dụng quyền root của hệ thống để tạo thưmục, sau đó chuyểnquyền qua cho người dùng này.Có thể trực ếp sử dụng tài khoản root hoặc sudo (Trường hợp sudo

phải thêmngười dùng vào file sudoers, sửa trực ếp hoặc sử dụng visudo).Dưới đây là ví dụ:

[root@elastixht bak]# sudo mkdir /var/backup[root@elastixht bak]# sudo chown -R samdx: /var/backup/[root@elastixht bak]# ls -l !$drwxr-xr-x 2 samdx samdx 4096 Mar 12 18:34 /var/backup/[root@elastixht bak]#

4.2.2 Tạo bản sao các công cụ

Sao chép các công cụ ở mục 4.1 (Các công cụ cần thiết).

[samdx@elastixht /var/backup]$ cp /usr/share/elastix/privileged/backupengine .[samdx@elastixht /var/backup]$ cp /var/www/backup/automatic_backup.php .

4.2.3 Cấp quyền đọc cho tập n elas x.conf

Tập n automatic_backup.php gọi tập n backupengine để thực hiệnsao lưu.Quá trình sao lưu yêu cầu phải có mật khẩu root của MySQL, vốn

được lưu trong file /etc/elastix.conf.

// backupengine

define('PASSWD_PATH', '/etc/elastix.conf');

Tập n được thiết lập chỉ đọc/ghi đối với người dùng asterisk vốnkhông nằm trong /etc/group, nên không thể cấp quyền sử dụng chmod.

• Trước:

13

Page 14: Elastix backup-guide

ls -l /etc/elastix.conf-rw------- 1 asterisk asterisk 71 Aug 14 2016 /etc/elastix.conf

Vì vậy, cần cấp quyền đọc cho người dùng trên file này sử dụng côngcụ khác (ACL control):

$ sudo setfacl -m u:samdx:r /etc/elastix.conf

• Sau:

ls -l /etc/elastix.conf-rw-r-----+ 1 asterisk asterisk 71 Aug 14 2016 /etc/elastix.conf

4.3 Chỉnh sửa backupengineDo backupengine được giả định sẽ thực thi sử dụng quyền root, nên

sau khi thực hiện sao lưu, script cần phân quyền lại thư mục/tập n saolưu vừa được tạo bởi root cho người dùng asterisk, tại dòng 716–717của script, như dưới:

// Switch tarball file permission to asterisk:asteriskchown($sBackupPath, 'asterisk');chgrp($sBackupPath, 'asterisk');

Để loại bỏ hành vi này, vì chúng ta sẽ thực thi script này bằng ngườidùng bình thường (không sudo), đơn giản là ta xoá/comment 2 dòng này,thành:

// Switch tarball file permission to asterisk:asterisk//chown($sBackupPath, 'asterisk');//chgrp($sBackupPath, 'asterisk');

14

Page 15: Elastix backup-guide

$ sed -i '716s+chown+//chown+' backupengine$ sed -i '717s+chgrp+//chgrp+' backupengine

4.4 Chỉnh sửa automa c_backup.phpMặc định, script này sẽ gọi file backupengine trên từ trong /usr/share,

và thư mục sao lưu mặc định là /var/www/backup.

$sBackupDir = '/var/www/backup';

system('/usr/share/elastix/privileged/backupengine --backup --backupfile '. );

Một vài thay đổi:

• Thư mục sao lưu mới là /var/backup/elastix_backup

• backupengine đã sửa nằm trong PATH khi đưa vào crond (mục 6 trang19) sau này, nên dùng đường dẫn tuyệt đối hoặc không là tuỳ chọn.

• Chỉ định các thành phần (components) cần sao lưu, thay vì sao lưutất cả như trên.

Vì vậy, automatic_backup.php sau khi đã sửa sẽ như dưới. Các thànhphần được định nghĩa trong backupengine. Có thể lựa chọn tất cả ngoạitừ as_monitor và as_voicemail vì mục sau (Đồng bộ với RSync trang 15)sẽ thực hiện sao lưu các dữ liệu nặng này.

// automatic_backup.php

$sBackupDir = '/var/backup/elastix_backup';

system('backupengine --backup --components as_db,as_config_files --backupfile '. );

15

Page 16: Elastix backup-guide

5 Đồng bộ với RSyncMục này sẽ thực hiện đồng bộ tất cả những dữ liệu cần sao lưu lên

server khác, trường hợp này là NAS.Ở mục Tạo thư mục lưu trữ (trang 11) chúng ta đã tạo thư mục dành

cho công việc sao lưu, và mục Các công cụ cần thiết (trang 11) chúng tađã chuẩn bị các công cụ cho việc sao lưu.Ta chuyển thư mục làm việc đến /var/backup/ cùng các công cụ ở

mục trước.Các việc ến hành:

• Thử rsync với public key đã có.

• Lên danh sách các thư mục/item cần sao lưu.

• Tạo script cho việc sao lưu.

5.1 Thử rsyncSau khi có thể ssh sử dụng public key (Đăng nhập bằng public key

trang 8), thử sử dụng rsync để đảm bảo rằng không lỗi nào phát sinh liênquan đến việc xác thực khi đăng nhập.

[samdx@elastixht /var/backup]$ echo -e "## WELCOME\n" > README.md[samdx@elastixht /var/backup]$ rsync -av README.md backupht:/volume1/elastix-bak/sending incremental file listREADME.md

sent 104 bytes received 31 bytes 90.00 bytes/sectotal size is 12 speedup is 0.09[samdx@elastixht /var/backup]$ ssh backuphtLast login: Sun Mar 12 18:23:42 2017 from 10.0.0.12

BusyBox v1.16.1 (2015-05-12 15:50:32 CST) built-in shell (ash)Enter 'help' for a list of built-in commands.

BackupHT> ls /volume1/elastix-bak/README.md

16

Page 17: Elastix backup-guide

BackupHT> ls -l /volume1/elastix-bak/total 8-rw-rw-r-- 1 samdx users 12 2017-03-12 18:28 README.md

5.2 Các thư mục cần sao lưuDanh sách các thư mục cần sao lưu, sẽ được cho vào một tập n, tạm

gọi là included-items.txt.Mục đích sao lưu những thành phần của Elas x, nội dung tập n sẽ

tương tự:

/var/spool/asterisk/monitor/var/www/backup/var/log/asterisk/cdr-csv/var/backup

Trong đó:

• /var/spool/asterisk/monitor: Thưmục chứa các bản ghi âm, thườngrất nặng.

• /var/www/backup: Những tập n sao lưu được lệnh từ WEBGUI sẽlưu tại đây.

• /var/log/asterisk/cdr-csv: Bản ghi danh sách cuộc gọi, từ bảngcdr của asteriskcdrdb.

• /var/backup: Thư mục hiện hành, bao gồm các công cụ sao lưu vàcác bản sao lưu được tạo bởi automatic_backup.php đã nói ở trên.

Có thể thêm các thành phần nằm trong thưmục /var/spool/asterisk,ví dụ voicemaill nếu cần.

17

Page 18: Elastix backup-guide

5.3 Kịch bản sao lưuMục này chúng ta tạo thư mục lưu các kịch bản và các file dành cho

việc sao lưu.

• Tạo thư mục bin trong /var/backup.

• Tạo mới file automatic_sync.sh trong thư mục trên.

• Di chuyển các tập n bao gồm automatic_backup.php, backupengine,và included-items.txt.

[samdx@elastixht /var/backup]$ mkdỉr bin[samdx@elastixht /var/backup]$ mv *.{php,txt} bin/[samdx@elastixht /var/backup]$ vim bin/automatic_sync.sh

5.3.1 automa c_sync.sh

Tập n kịch bản này thực hiện việc đồng bộ các thư mục chỉ định đếnđích là một thư mục trên NAS đã được định trước, đủ quyền đọc/ghi.

#!/bin/env bash

# THIS VERY SIMPLE AND UGLY SCRIPT

# Chỉ định tên người dùng và hostname của NASSSH_USER=samdxSSH_SERVER=backupht

# Các tuỳ chọn cho rsync:# Thư mục lưu trên NAS# Giới hạn băng thông nếu cần (Hà Tĩnh 100MB based)# Các tuỳ chọn khác nếu có# The destination is on the SSH_SERVER not localRSYNC_DEST_DIR="volume1/elastix-bak"RSYNC_BWLIMIT="5120" # 5MB, unit in KBPSRSYNC_OPT=""

if [ -n $RSYNC_BWLIMIT ]then

RSYNC_OPT="${RSYNC_OPT} --bwlimit=$RSYNC_BWLIMIT"

18

Page 19: Elastix backup-guide

fi

# Get current datetimeCURRENT_TIME=$(date +%Y-%m-%d-%H-%M-%Z)

# The path where this script and/or some other file lives onBACK_DIR="/var/backup"# The folder that holds rsync log filesSYNC_LOG_DIR="synclog"

# Specify the file that contains all the location need to be syncedINCLUDE_FILE_NAME="included-items.txt"INCLUDE_FILE=$BACK_DIR/bin/$INCLUDE_FILE_NAME

# The sync log file name and pathSYNC_LOG_FILE="$BACK_DIR/$SYNC_LOG_DIR/$CURRENT_TIME.log"

# Then syncrsync -ar $RSYNC_OPT --files-from=$INCLUDE_FILE \/ $SSH_USER@$SSH_SERVER:/$RSYNC_DEST_DIR \> $SYNC_LOG_FILE 2>&1

19

Page 20: Elastix backup-guide

6 CrontabSau khi các thành phần khác đã sẵn sàng, ta sử dụng crontab để lên

lịch đồng bộ tự động.Xác định thời điểm cần thực hiện sao lưu và đồng bộ, sau đó chỉnh

sửa với crontab -e. crontab gọi vi để sửa tập n, :wq để lưu và thoát.

PATH=/var/backup/bin:/bin:/usr/bin:/usr/local/binSHELL=/bin/bashMAILTO=""0 19 * * * automatic_sync0 12 * * * automatic_backup

Trong đó:

• PATH: chỉ định các đường dẫn chứa các tập n thực thi mà đã đượcchuẩn bị ở trên, bao gồm /var/backup/bin.

• SHELL: chỉ định shell sẽ được sử dụng, mặc định crontab sử dụng/bin/sh.

• Bên dưới là lịch và lệnh gọi các công cụ tương ứng. Đồng bộ vàolúc 19h mỗi ngày, sao lưu vào lúc 12h mỗi ngày.

Các tập n kịch bản đã được đổi tên và loại bỏ phần mở rộng. Chúngta không cần lo lắng, Linux sẽ nhận dạng dựa trên kiểu MIME và header củatập n.

6.1 Các ví dụ về lập lịch

@daily

• Mỗi ngày, nh từ lúc thêm vào lịch.

20

Page 21: Elastix backup-guide

0 */2 * * *

• Mỗi 2 ếng một, tất cả các ngày.

0 0 * * 6

• Vào lúc 00:00 mỗi thứ 7.

0 12 * */3 SAT

• Vào lúc 12:00 thứ 7mỗi 3 tháng một (theo quý). Đặt Ngày 13 tháng3 năm 2017 đến 01/04 là thứ 7 kế ếp thực thi.

21

Page 22: Elastix backup-guide

7 TODOCác nội dung khác cần hoàn thiện và bổ sung, như:

• Email thông báo mỗi khi sao lưu/đồng bộ xong. Tuỳ loại sao lưu,theo ngày, tuần.

• Tìm kiếm, loại bỏ hoặc phân tách các gói sao lưu quá lâumột khoảngthời gian nào đó (60 ngày chẳng hạn), xoá hoặc thông báo choAdmin.

• Tương tự đối với các tập n log của kịch bản đồng bộ.

22