Thứ năm, 19/09/2013 | 00:00 GMT+7

Cách sử dụng tính năng trùng lặp với GPG để tự động hóa an toàn các bản backup trên Ubuntu

Tính năng trùng lặp là một chương trình backup local và từ xa linh hoạt có thể triển khai một số giao thức truyền và các giải pháp lưu trữ của bên thứ ba.


Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt tính năng lặp trên VPS Ubuntu 12.04. Ta sẽ cài đặt từ nguồn và sau đó cấu hình nó để tận dụng mã hóa GPG.

Để làm theo, bạn cần quyền truy cập vào hai máy, một VPS Ubuntu 12.04, sẽ được backup và một máy Linux thứ hai hoặc VPS thuộc bất kỳ loại nào có thể được SSH truy cập.

Cách cài đặt tính năng trùng lặp từ nguồn trên Ubuntu


Ta đang sử dụng VPS Ubuntu 12.04 cho hướng dẫn này. Gói trùng lặp trong repository lưu trữ mặc định đã lỗi thời và thực sự gặp một số vấn đề khi kết nối với server từ xa do thay đổi trong phần backend .

Ta sẽ tránh những vấn đề này bằng cách lấy các file nguồn và cài đặt theo cách thủ công.

Đăng nhập vào VPS Ubuntu 12.04 mà bạn sẽ backup , dưới dạng root .

Cài đặt các Gói tiên quyết


Mặc dù ta đang cài đặt trùng lặp từ nguồn, ta sẽ nhận được các yêu cầu từ repository mặc định của Ubuntu.

Cập nhật database nguồn và sau đó cài đặt các gói cần thiết bằng hai lệnh sau:

apt-get update apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev 

Điều này sẽ cài đặt một số trình xử lý khác nhau để truyền dữ liệu đến máy tính từ xa. Ta sẽ không sử dụng hầu hết những thứ này trong hướng dẫn này, nhưng chúng là những lựa chọn tốt để có.

Download và cài đặt tính năng trùng lặp từ nguồn


Các file nguồn trùng lặp được đặt tại Launcpad.net . Ta sẽ tải chúng xuống folder chính của user root.

cd /root wget http://code.launchpad.net/duplicity/0.6-series/0.6.22/+download/duplicity-0.6.22.tar.gz 

Extract nguồn và chuyển vào folder gói được tạo:

tar xzvf duplicity* cd duplicity* 

Tiếp theo, ta sẽ hoàn thành cài đặt thực tế bằng lệnh sau:

python setup.py install 

Vì đây là gói được cài đặt từ nguồn nên nó sẽ được đặt trong folder /usr/local/bin/ .

Tạo SSH key và GPG


Cấu hình trùng lặp của ta sẽ sử dụng hai loại khóa khác nhau để đạt được sự giao thoa giữa sự tiện lợi và bảo mật.

Ta sẽ sử dụng SSH key để xác thực an toàn với hệ thống từ xa mà không cần phải cung cấp password . Ta cũng sẽ sử dụng GPG để mã hóa dữ liệu trước khi chuyển đến vị trí backup .

Tạo SSH key


Ta sẽ tạo SSH key được mã hóa RSA cho user root của ta để cho phép đăng nhập không cần password vào máy sẽ lưu trữ các bản backup .

Nếu bạn chưa làm như vậy, hãy đảm bảo bạn đã cấu hình password root trên máy mà bạn sẽ chuyển dữ liệu sang. Bạn có thể thực hiện việc này bằng cách đăng nhập vào máy bằng quyền root (thông qua SSH hoặc nút Truy cập Control panel trên trang server nếu đây là VPS) và ra lệnh sau:

passwd 

Quay lại server với sự trùng lặp, ta sẽ tạo một cặp khóa bằng lệnh sau:

ssh-keygen -t rsa 

Nhấn Enter tại dấu nhắc để tạo SSH key không cần password với cài đặt mặc định.

Chuyển nó vào hệ thống sẽ lưu trữ các bản backup của bạn bằng lệnh sau:

<pre>
ssh-copy-id root @ <span class = “highlight”> backupHost </span>
</pre>

Trả lời để chấp nhận server chưa được xác minh, sau đó nhập password root của hệ thống từ xa để chuyển public key của bạn.

Kiểm tra xem bây giờ bạn có thể đăng nhập mà không cần password từ server trùng lặp của bạn bằng cách phát hành:

<pre>
ssh root @ <span class = “highlight”> backupHost </span>
</pre>

Bạn sẽ được đăng nhập mà không cần phải cung cấp thêm bất kỳ thông tin đăng nhập nào.

Trong khi bạn đăng nhập qua SSH, hãy tạo cấu trúc folder chứa các file backup của ta :

<pre>
mkdir -p / remotebackup / <span class = “highlight”> lặp lại tình huống </span>
</pre>

Bạn có thể đặt tên folder bạn muốn , nhưng hãy nhớ giá trị để bạn có thể chỉ định nó sau này.

Khi bạn hoàn tất, hãy thoát ra trở lại vào server trùng lặp của bạn:

exit 

Tạo khóa GPG


Ta sẽ sử dụng GPG để tăng cường bảo mật và mã hóa. Các lệnh sẽ lưu trữ các khóa của ta trong một folder ẩn tại /root/.gnupg/ :

gpg --gen-key 

Bạn sẽ được hỏi một loạt câu hỏi sẽ cấu hình các thông số của cặp khóa.

Please select what kind of key you want:    (1) RSA and RSA (default)    (2) DSA and Elgamal    (3) DSA (sign only)    (4) RSA (sign only) Your selection?  RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)  Requested keysize is 2048 bits Please specify how long the key should be valid.          0 = key does not expire       <n>  = key expires in n days       <n>w = key expires in n weeks       <n>m = key expires in n months       <n>y = key expires in n years Key is valid for? (0)  Key does not expire at all Is this correct? (y/N) y 

Nhấn enter để chấp nhận các phím “RSA và RSA” mặc định. Nhấn enter hai lần nữa để chấp nhận kích thước phím mặc định và không có ngày hết hạn.

Nhập y để xác nhận các thông số của bạn.

<pre>
Bạn cần một ID user để xác định khóa của bạn ; phần mềm xây dựng ID user
từ Tên thật, Comment và Địa chỉ Email trong biểu mẫu này:
“Heinrich Heine (Der Dichter) < heinrichh@duesseldorf.de >”

Tên thật: <span class = “highlight”> Tên của bạn </span>
Địa chỉ email: <span class = “highlight”> email@example.com </span>
Comment :
Bạn đã chọn USER-ID này:
“<Span class =" highlight "> Tên của bạn <your
email@example.com > </span>“

Thay đổi (N) ame, © omment, (E) mail hay (O) kay / (Q) uit? o
</pre>

Nhập tên, địa chỉ email và tùy chọn, comment sẽ được liên kết với khóa này. Gõ O để xác nhận thông tin của bạn.

Tiếp theo, bạn sẽ cài đặt một passphrase (password bảo vệ) để sử dụng với GPG. Không giống như với các SSH key , nơi ta mặc định không có passphrase (password bảo vệ) nào cho phép tính năng trùng lặp hoạt động trong nền, bạn nên cung cấp passphrase (password bảo vệ) cho bước này để cho phép mã hóa và giải mã an toàn dữ liệu .

Enter passphrase: Repeat passphrase: 

Đến đây, bạn cần tạo entropy. Entropy về cơ bản là một từ mô tả mức độ khó đoán trong một hệ thống. VPS của bạn cần entropy để tạo một khóa thực sự ngẫu nhiên.

We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy.  Not enough random bytes available.  Please do some other work to give the OS a chance to collect more entropy! (Need 280 more bytes) 

Nếu bạn cần trợ giúp tạo entropy, có một hướng dẫn về cách sử dụng Haveged để tạo entropy ở đây. Theo kinh nghiệm của tôi, chỉ cần cài đặt một số gói từ apt là đủ để tạo ra entropy cần thiết. SSH với một terminal mới để thực hiện việc này.

Khi bạn đã tạo đủ thông tin ngẫu nhiên, khóa của bạn sẽ được tạo:

<pre>
gpg: /root/.gnupg/trustdb.gpg: trustdb đã tạo
gpg: key 05AB3DF5 được đánh dấu là cuối cùng tin cậy
public key và bí mật được tạo và ký.

gpg: kiểm tra Trustdb
gpg: cần 3 (các) lề, cần 1 (các) hoàn chỉnh, mô hình tin cậy PGP
gpg: depth: 0 hợp lệ: 1 đã ký: 0 tin cậy: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R / <span class = "highlight"> 05AB3DF5 </span> 2013-09-19
Dấu fingerprint chính = AF21 2669 07F7 ADDE 4ECF 2A33 A57F 6998 05AB 3DF5
uid Tên của bạn <your_email@example.com>
phụ 2048R / 32866E3B 2013-09-19
</pre>

Phần được đánh dấu ở trên là ID public key của bạn. Bạn cần điều này sau này để mã hóa dữ liệu bạn sẽ chuyển.

Nếu bạn quên ghi lại ID public key của bạn , bạn có thể lấy lại bằng cách truy vấn khóa gpg:

gpg --list-keys 

/root/.gnupg/pubring.gpg ------------------------ pub   2048R/05AB3DF5 2013-09-19 uid                  Your Name <your_email@example.com> sub   2048R/32866E3B 2013-09-19 

Bây giờ ta có tất cả các thành phần cần thiết để backup an toàn bằng cách sử dụng tính năng lặp lại.

Cách sử dụng tính năng trùng lặp


Chạy thử nghiệm ban đầu


Ta sẽ chạy thử nghiệm ban đầu đối với hệ thống trùng lặp của bạn bằng cách tạo một folder chứa các file giả để backup . Chạy các lệnh sau:

cd ~ mkdir test touch test/file{1..100} 

Điều này tạo ra một folder được gọi là test trong folder chính root . Sau đó, nó sẽ lấp đầy folder với các file được đánh số 1-100.

Ta sẽ di chuyển các file đến server từ xa, trước tiên mà không có khóa GPG mà ta đã tạo. Ta sẽ sử dụng “sftp”, là một giao thức an toàn có trong SSH để tái tạo chức năng của ftp.

<pre>
Duplicity / root / test sftp: // root @ <span class = “highlight”> backupHost </span> // remotebackup / <span class = “highlight”> lặp lại chính xác </span>
</pre>

Lưu ý dấu gạch chéo kép giữa server từ xa và đường dẫn file . Điều này là do ta đang chỉ định một đường dẫn tuyệt đối. Nếu đó là một đường dẫn tương đối từ folder mặc định mà sftp đưa ta vào, ta chỉ có thể sử dụng một dấu gạch chéo.

Bạn cần chấp nhận server từ xa, sau đó được yêu cầu tạo và xác nhận một khóa để sử dụng để mã hóa dữ liệu. Như bạn thấy , GPG sẽ vẫn được sử dụng trừ khi ta yêu cầu cụ thể là không. Sự khác biệt duy nhất là ta không sử dụng các khóa ta đã tạo, ta có thể nhập bất kỳ password nào tại đây.

Import of duplicity.backends.dpbxbackend Failed: No module named dropbox The authenticity of host '162.243.2.14' can't be established. SSH-RSA key fingerprint is 1f:4b:ae:1c:43:91:aa:2b:04:5b:a4:8e:cd:ea:e6:60. Are you sure you want to continue connecting (yes/no)? yes Local and Remote metadata are synchronized, no sync needed. Last full backup date: none GnuPG passphrase:  Retype passphrase to confirm: 

Sau đó, bản backup sẽ chạy và bạn sẽ được hiển thị các số liệu thống kê khi hoàn tất :

No signatures found, switching to full backup. --------------[ Backup Statistics ]-------------- StartTime 1379614581.49 (Thu Sep 19 18:16:21 2013) EndTime 1379614581.60 (Thu Sep 19 18:16:21 2013) ElapsedTime 0.11 (0.11 seconds) SourceFiles 101 SourceFileSize 4096 (4.00 KB) NewFiles 101 NewFileSize 4096 (4.00 KB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 101 RawDeltaSize 0 (0 bytes) TotalDestinationSizeChange 1022 (1022 bytes) Errors 0 ------------------------------------------------- 

Nếu ta SSH vào hệ thống từ xa của bạn , ta có thể thấy rằng quá trình backup đã hoàn tất thành công:

<pre>
ssh root @ <span class = “highlight”> backupHost </span>
cd / remotebackup / <span class = “highlight”> lặp lại nhiều lần </span>
ls
</pre>
<pre>
coppy-full.20130919T181705Z.manifest.gpg
Coppy-full.20130919T181705Z.vol1.difftar.gpg
sự trùng lặp-đầy đủ-chữ ký.20130919T181705Z.sigtar.gpg
</pre>

Các file này chứa thông tin backup . Vì đây chỉ là một thử nghiệm, ta có thể xóa chúng bằng lệnh:

rm duplicity* 

Thoát trở lại server trùng lặp:

exit 

Bây giờ ta có thể xóa folder thử nghiệm và tất cả nội dung của nó:

rm -r /root/test 

Tạo bản backup đầu tiên của bạn


Ta sẽ tạo bản backup thực sự đầu tiên của bạn bằng cách sử dụng cú pháp chung sau:

<pre>
trùng lặp –encrypt-key <span class = “highlight”> key từ GPG </span> –exclude <span class = “highlight”> các file cần loại trừ </span> –include <span class = “highlight”> các file cần bao gồm </span> <span class = “highlight”> đường dẫn đến back_up </span> sftp: // root @ <span class = “highlight”> backupHost </span> // remotebackup / <span class = “highlight”> sự trùng lặpServer </span>
</pre>

Ta sẽ backup toàn bộ folder root của bạn , ngoại trừ /proc , /sys/tmp . Ta sẽ sử dụng khóa GPG mà ta đã tạo. Ta thực hiện việc này bằng cách chỉ định ID trong lệnh và đặt trước lệnh bằng passphrase (password bảo vệ) :

<pre>
PASSPHRASE = “<span class =" highlight "> passphrase (password bảo vệ) dành cho GPG </span>“ Coppy –encrypt-key <span class = "highlight"> 05AB3DF5 </span> –exclude / proc –exclude / sys –exclude / tmp / sftp: // root @ <span class = “highlight”> backupHost </span> // remotebackup / <span class = “highlight”> lặp lại với nhau </span>
</pre>

Lệnh trên sẽ mất một chút thời gian. Vì đây là lần đầu tiên ta chạy bản backup , sự trùng lặp sẽ tạo ra một bản backup đầy đủ. Tính trùng lặp chia các khối dữ liệu thành các khối để đơn giản hóa việc truyền file .

--------------[ Backup Statistics ]-------------- StartTime 1379621305.09 (Thu Sep 19 20:08:25 2013) EndTime 1379621490.47 (Thu Sep 19 20:11:30 2013) ElapsedTime 185.38 (3 minutes 5.38 seconds) SourceFiles 33123 SourceFileSize 813465245 (776 MB) NewFiles 33123 NewFileSize 813464221 (776 MB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 33123 RawDeltaSize 802133584 (765 MB) TotalDestinationSizeChange 369163424 (352 MB) Errors 0 ------------------------------------------------- 

Trên một server mới, cấu hình của tôi đã tạo 15 tập được chuyển đến hệ thống từ xa.

Bởi vì ta hiện có một bản backup đầy đủ trên hệ thống từ xa, bản backup tiếp theo của ta sẽ tự động là một bản backup gia tăng. Chúng nhanh hơn và ít yêu cầu truyền dữ liệu hơn. Lần chạy đầu tiên của tôi mất hơn ba phút, trong khi bản backup gia tăng của tôi mất chưa đến tám giây.

--------------[ Backup Statistics ]-------------- StartTime 1379621776.23 (Thu Sep 19 20:16:16 2013) EndTime 1379621783.80 (Thu Sep 19 20:16:23 2013) ElapsedTime 7.57 (7.57 seconds) SourceFiles 33128 SourceFileSize 820560987 (783 MB) NewFiles 11 NewFileSize 12217723 (11.7 MB) DeletedFiles 3 ChangedFiles 1 ChangedFileSize 600 (600 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 15 RawDeltaSize 12197851 (11.6 MB) TotalDestinationSizeChange 12201207 (11.6 MB) Errors 0 ------------------------------------------------- 

Để buộc một bản backup đầy đủ khác, bạn có thể thêm lệnh "đầy đủ" vào lệnh gọi trùng lặp trước bất kỳ tùy chọn nào:

<pre>
PASSPHRASE = “mật khẩu cho GPG” trùng lặp <span class = “highlight”> full </span> –encrypt-key 05AB3DF5 –exclude / proc –exclude / sys –exclude / tmp / sftp: // root @ backupHost // remotebackup / sự trùng lặp
</pre>

Khôi phục bản backup


Tính trùng lặp giúp khôi phục dễ dàng. Bạn có thể khôi phục bằng cách đảo ngược các tham số từ xa và local .

Ta không cần tùy chọn khóa mã hóa vì ta chỉ giải mã dữ liệu. Ta cũng không cần các tham số loại trừ vì chúng không có trong bản backup ngay từ đầu.

Ví dụ: nếu ta muốn khôi phục toàn bộ dữ liệu mà ta vừa backup , ta có thể sử dụng lệnh này:

<pre>
PASSPHRASE = “<span class =" highlight "> passphrase (password bảo vệ) dành cho GPG </span>“ Coppy sftp: // root @ <span class = "highlight"> backupHost </span> // remotebackup / <span class = “highlight” > sự trùng lặpServer </span> /
</pre>

Có lẽ một lựa chọn an toàn hơn chỉ là khôi phục các file hoặc folder mà bạn cần. Bạn có thể thực hiện việc này bằng cách thêm một tùy chọn vào lệnh trên:

<pre>
PASSPHRASE = “mật khẩu cho GPG” lặp lại –tệp-to-khôi phục <span class = “highlight”> / path / to / file </span> sftp: // root @ backupHost // remotebackup / DupreadyServer <span class = “highlight ”> / Path / to / restore / file </span>
</pre>

Đảm bảo rằng bạn kiểm tra khả năng khôi phục chính xác để không gặp sự cố khi ở trong tình huống nghiêm trọng.

Tự động hóa backup


Ta có thể tự động hóa sự trùng lặp bằng cách tạo một vài công việc cron. Nhấp vào đây để tìm hiểu thêm về cách cấu hình cron .

Tạo file passphrase (password bảo vệ)


Ta sẽ tạo một file được bảo vệ để lưu trữ passphrase (password bảo vệ) GPG của ta để ta không phải đặt nó trực tiếp vào tập lệnh tự động hóa của bạn .

Đi tới folder chính của user root và tạo một file ẩn mới bằng editor của bạn:

cd /root nano .passphrase 

Điều duy nhất ta cần đưa vào file này là đặc tả passphrase (password bảo vệ) mà bạn đã thực hiện trước các lệnh trùng lặp của bạn với:

<pre>
PASSPHRASE = “<span class =" highlight "> passphrase (password bảo vệ) cho GPG </span>“
</pre>

Lưu và đóng file .

Làm cho nó chỉ có thể đọc được bởi root bằng cách thực thi:

chmod 700 /root/.passphrase 

Cài đặt backup tăng dần hàng ngày


Ta sẽ cài đặt tính năng trùng lặp để tạo các bản backup gia tăng hàng ngày. Điều này sẽ giúp các bản backup của ta luôn được cập nhật.

Các tập lệnh được liệt kê trong /etc/cron.daily được chạy một lần mỗi ngày, vì vậy đây là nơi hoàn hảo để tạo tập lệnh backup của ta .

Điều hướng đến folder đó và tạo một file có tên là duplicity.inc :

cd /etc/cron.daily nano duplicity.inc 

Sao chép tập lệnh bash sau vào file . Thay thế lệnh trùng lặp bằng lệnh bạn muốn sử dụng để backup hệ thống của bạn .

#!/bin/sh  test -x $(which duplicity) || exit 0 . /root/.passphrase  export PASSPHRASE $(which duplicity) --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityServer 

Lưu và đóng file .

Làm cho nó có thể thực thi được bằng lệnh lệnh sau:

chmod 755 duplicity.inc 

Kiểm tra nó bằng cách gọi nó:

./duplicity.inc 

Nó sẽ hoàn thành mà không có bất kỳ lỗi nào.

Cài đặt backup đầy đủ hàng tuần


Các bản backup tăng dần dựa trên các bản backup đầy đủ. Điều này nghĩa là chúng sẽ ngày càng khó sử dụng khi các thay đổi chồng lên nhau. Ta sẽ cấu hình các bản backup đầy đủ hàng tuần để làm mới cơ sở.

Ta sẽ thực hiện việc này bằng cách tạo một tập lệnh tương tự trong folder /etc/cron.weekly .

Điều hướng đến folder và tạo một file mới:

cd /etc/cron.weekly nano duplicity.full 

Sao chép tập lệnh bash sau vào file . Lưu ý ta đã bao gồm lệnh "full" để buộc chạy một bản backup đầy đủ.

#!/bin/sh  test -x $(which duplicity) || exit 0 . /root/.passphrase  export PASSPHRASE $(which duplicity) full --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityServer 

Ta cũng sẽ thêm một lệnh trùng lặp bổ sung vào cuối để xóa các file backup cũ. Ta sẽ giữ tổng cộng ba bản backup đầy đủ và các bản backup gia tăng liên quan của chúng.

Thêm cái này vào cuối file

$(which duplicity) remove-all-but-n-full 3 --force sftp://root@backupHost//remotebackup/duplicityServer 

Lưu và đóng file .

Làm cho nó có thể thực thi được bằng lệnh sau:

chmod 755 duplicity.full 

Kiểm tra nó bằng cách gọi:

./duplicity.full 

Nó sẽ thực hiện backup đầy đủ và sau đó xóa các file nào cần thiết.

Kết luận


Đến đây bạn sẽ có một giải pháp backup tự động, hoạt động hoàn toàn tại chỗ. Đảm bảo thường xuyên xác nhận các bản backup của bạn để không trở thành nạn nhân của cảm giác an toàn sai lầm.

Có rất nhiều công cụ backup khác có sẵn, nhưng tính năng backup là một giải pháp linh hoạt, đơn giản sẽ đáp ứng nhiều nhu cầu của user .

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan

Cách cấu hình một cụm đa node với Cassandra trên VPS Ubuntu
2013-09-11
Cách theo dõi log xác thực hệ thống trên Ubuntu
2013-09-05
Cách bắt đầu với Jekyll trên VPS Ubuntu
2013-08-28
Cách sử dụng Dig, Whois và Ping trên Ubuntu VPS để truy vấn dữ liệu DNS
2013-08-23
Cách thiết lập Sass trên VPS của bạn đang chạy trên Ubuntu
2013-08-14
Cách cài đặt Cassandra và chạy một cụm node đơn trên VPS Ubuntu
2013-08-08
Cách cài đặt CouchDB từ nguồn trên VPS Ubuntu 13.04 x64
2013-08-06
Cách quản lý gói trong Ubuntu và Debian với Apt-Get & Apt-Cache
2013-08-06
Bắt đầu với LXC trên VPS Ubuntu 13.04
2013-08-06
Cách cài đặt Go and Revel trên VPS Ubuntu 13.04 x64
2013-07-31