Như chúng ta đều biết, an toàn là mỗi quan tâm chính bất kỳ loại dữ liệu nào được lưu trữ trên máy tính mà có kết nối Internet, đặc biệt là máy chủ. Việc đảm bảo an toàn dữ liệu là vô cùng cần thiết có rất nhiều cách để bạn có thể bảo vệ dữ liệu ví dụ có nhiều người mã hoá riêng biệt từng Partitions, Devices hoặc Filesystems. Nhưng đây không phải là cách bảo vệ đối với 1 VPS. Có 1 cách hoàn hảo đó là tạo ra 1 tập tin và sử dụng chúng như 1 thiết bị để lưu trữ dữ liệu được mã hoá.
Trong bài này, chúng ta sẽ sử dụng tool dm-crypt để tạo ra 1 tập tin được mã hoá với dung lượng lớn và dùng nó để lưu trữ dữ liệu mật.

dm-crypt là một cơ chế mã hoá ở mức kernel có nghĩa là tập tin này sẵn sàng hoạt động ngay sau khi mount, do đó nó có thể hoạt động như 1 ổ lưu trữ dữ liệu bình thường.

Install dm-crypt tools

Bạn cần đăng nhập bằng tài khoản root để đảm bảo cài đặt thành công các lệnh dưới đây:

apt-get update
apt-get install cryptsetup

Câu lệnh thứ 2 sẽ cài đặt toàn bộ các gói cần thiết để cài đặt thành công dm-crypt

Create a Non-Sparse Empty File

Để lưu trữ dữ liệu mã hoá, chúng ta cần tạo ra 1 file sẽ đóng vai trò là nơi lưu trữ toàn bộ dữ liệu.
Chúng ta sẽ tạo ra 1 file trống với kích thước tuỳ ý, ở đây chúng ta sẽ tạo ra 1 file có dung lượng nhỏ là 512MB trong thư mục gốc của root để demo:

dd if=/dev/zero of=/root/test1 bs=1M count=512

Creating a dm-crypt LUKS Container in the File

Chúng ta sẽ định dạng file test1 với phân vùng dạng LUKS và dm-crypt cung cấp 1 lệnh rất đơn giản để làm việc này:

cryptsetup -y luksFormat /root/test1

Hệ thống sẽ hỏi xác nhận Yes/No thì bạn chỉ việc chọn Yes để tiếp tục.
Bạn sẽ nhận được yêu cầu  thiết lập 1 mật khẩu để dùng trong việc giải mã dữ liệu
Ghi nhớ: Nếu bạn quên mật khẩu này, bạn sẽ mất mãi mãi dữ liệu, vì thế hãy lưu mật khẩu này ở nơi bạn có thể chắc chắn tìm thấy
Sử dụng option y để chắc chắn việc thiết lập mật khẩu không bị sai sót gì.
Sau đó chúng ta có thể kiểm tra file, lúc này chúng ta sẽ thấy file đã ở định dạng LUKS.

file /root/test1
test1: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 1851db36-3223-4ee1-8e3e-cc65c49e05f3

Bây giờ chúng ta sử dụng lệnh luksOpen để giải mã và map nó thành 1 volume để sử dụng, ví dụ volume1:

cryptsetup luksOpen /root/test1 volume1

Bạn sẽ phải nhập mật khẩu để giải mã, hãy dùng mật khẩu mã bạn đã tạo trước đó.
Sau khi map xong thì sẽ tạo ra 1 file /dev/mapper/volume1. Chúng ta cần định dạng nó để có thể sử dụng như 1 ổ đĩa bình thường.

Creating and Mounting the File System

Chúng ta chọn định dạng mặc định là Ext4

mkfs.ext4 -j /dev/mapper/volume1
```
Như vậy `volume1` đã có thể hoạt động như 1 ổ đĩa bình thường, và giờ ta sẽ mount nó với file hệ thống:
```
mount /dev/mapper/volume1 /mnt/files
```
Check lại với lệnh
```
df -h
```
```
Filesystem           Size  Used Avail Use% Mounted on
/dev/vda              59G  2.7G   54G   5% /
udev                 2.0G   12K  2.0G   1% /dev
tmpfs                791M  216K  791M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 2.0G     0  2.0G   0% /run/shm
/dev/mapper/volume1  486M  2.3M  459M   1% /mnt/files
```
Bây giờ ta có thể copy dữ liệu mật vào trong ổ đĩa mới.
##Unmounting the Filesystem and Closing the LUKS Container
Sau khi copy dữ liệu cần mã hoá xong, chúng ta tiến hành mã hoá và unmount lại file này, đầu tiên là unmount `/dev/mapper/volume1` ra khỏi `/mnt/files`: 
```
cd 
unmount /mnt/files
```
Tiếp theo là mã hoá lại với lệnh `luksClose`:
```
cryptsetup luksClose volume1
```
Lúc này file của chúng ta đã được mã hoá hoàn toàn.

##Conclusion
Bây giờ bạn có thể tạo ra 1 tập tin được mã hoá để lưu trữ các dữ liệu nhạy cảm của bạn. Tuy nhiên hãy nhớ rằng không được làm mất mật khẩu, nếu không sẽ không có cách nào khôi phục được.