mportant; max-width: 100%; user-select: none;"/>

大多数情况下我们购买 VPS,用来部署网站,存储个人数据等等。都是直接购买后连接到服务器直接安装环境,部署项目开始产生存储数据。

这种大部分场景都是比较安全的,因为没有人关注你的数据。如果你的服务器到期了并不打算续费,服务商也只想着如何把你快速清出去释放掉资源。

但如果你的数据有价值或者有人就是想恶意获取数据,是完完全全可以做到的:

比如服务商可以通过控制面板重置你的 root 密码,登录系统获取数据,又或者直接把你的硬盘挂载到另外一个系统中,也可以直接读取数据,这些都是我们不想的。

VeraCrypt

本文通过使用 VeraCrypt 加密软件将 VPS 服务器硬盘数据加密存储起来,有效保护数据安全。

VeraCrypt 是一个开源的加密软件,你可以利用它对整个硬盘设备进行加密、或者对分区进行加密,也可以创建一个虚拟的加密磁盘文件挂载在某个路径下。VeraCrypt 的前身是 TrueCrypt,并完全兼容 TrueCrypt 的加密数据盘。

加密方案

这里需要简单说明下加密方案的做法

操作系统内置加密方案

利用手工重装系统,在创建操作系统时,比如 CentOS 安装图形化界面,分区选择下方会有勾选:【加密我的数据】

如果你选择此种加密方式,意味着你的服务商必须支持 VNC 登录控制,然后你才能在图形化这里设置密码。

而且,你之后服务器每次重启系统,都需要通过服务商的 VNC 远程进行输入硬盘密码,才能进入系统

使用 VeraCrypt 创建虚拟硬盘文件

这种方式和利用 VeraCrypt 创建加密分区是一样的,区别在于,如果服务商有给你 2 块以上的硬盘,1 块系统盘,1 块数据盘,你可以将数据盘进行加密。

这里只假设你只有 1 块盘且是系统盘的情况下,且没有 VNC 登录的方式。

通过 VeraCrypt 创建一块虚拟硬盘文件,你可以将挂载某个位置,比如 /mnt/veracrypt 目录,又或者是任意你喜欢的目录。

之后你可以安装一些软件到  /mnt/veracryp 目录中,如果是建立网站,保证你的网站数据存放到到 /mnt/veracryp 下,这样你的数据才是安全的。

需要注意,如果是安装 nginx、msyql、等程序也需要将其数据及重要配置指向到该目录中,比如 nginx 配置文件、日志文件,mysql 数据、日志文件。

保护数据的前提

1.如果你在 VNC 中创建系统时,设置了密钥,那么以后每次开机都要连接进 VNC 输入密码。

在这种情况下,只要确保硬盘不被人恶意做手脚,就相对安全。比如替换系统加密盘的引导扇区,植入一个窃取密码的伪装程序(Boot Loader),你如常一样的输入硬盘密码进行开机,实际上你的密码已经被窃取了。这种情况在云服务商那边也很难避免。

2.如果是加密虚拟硬盘的形式,或者只有数据盘分区加密了,此时你的操作系统所在分区是公开没有加密的。

你每次都需要在操作系统运行后,通过 ssh 连接的服务器,手动挂载硬盘到指定位置中,这样做的前提是,操作系统是安全可靠的,没有被入侵的现象。否则你输入的密码都会被窃取。

避免一些软件产生漏洞风险,建议后续将软件都安装部署再 docker 中,会更好一些。

无论哪种脚本开机启动脚本都将失效,都需要人工干预。

操作系统的安全

在购买完 VPS 服务器,建议要做的第一件事,就是将你的操作系统进行重装系统,无论是手动重装系统(有 VNC 的情况下),还是一键 DD 从网络安装系统。

都要选择纯净的操作系统,确保没有服务商植入的程序,比较常见的是一些监控统计程序,比如内存、CPU 运行状态、带宽上下行速率,都很好理解。

但此类程序在某些服务商那边还会做出超出本职范围内的事情,比如收集监控你的进程,收集分析网络流量特征情况。这些都是在你同意服务协议后,合法的收集你的隐私数据。

一键 dd 系统为 debian10

此类 dd 安装方法网络上非常多,可以寻找适合自己的:

bash <(wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh') -d 10 -v 64 -a -p yourpassword

重装完系统后,系统默认的密码为:yourpassword

切记,之后修改掉自己的系统密码

正式开始通过 VeraCrypt 加密数据

安装 VeraCrypt

当前采用 debian10,其他系统需要找到自己的系统及 CPU 架构。

下载地址:https://sourceforge.net/projects/veracrypt/files/VeraCrypt%201.24-Update7/

比如我在这里下载的是:https://sourceforge.net/projects/veracrypt/files/VeraCrypt%201.24-Update7/veracrypt-1.24-Update7-Debian-10-amd64.deb/download

通过 wget 下载到服务器:

wget https://sourceforge.net/projects/veracrypt/files/VeraCrypt%201.24-Update7/veracrypt-1.24-Update7-Debian-10-amd64.deb/download -O veracrypt.deb

通过 dpkg -i 安装包:

dpkg -i veracrypt.deb

如果提示类似的错误:Package sudo is not installed

root@debian:~# dpkg -i veracrypt.deb 
Selecting previously unselected package veracrypt.
(Reading database ... 20133 files and directories currently installed.)
Preparing to unpack veracrypt.deb ...
Unpacking veracrypt (1.24.23-1) ...
dpkg: dependency problems prevent configuration of veracrypt:
 veracrypt depends on libwxgtk3.0-gtk3-0v5; however:
  Package libwxgtk3.0-gtk3-0v5 is not installed.
 veracrypt depends on sudo; however:
  Package sudo is not installed.

dpkg: error processing package veracrypt (--install):
 dependency problems - leaving unconfigured
Processing triggers for mime-support (3.62) ...
Errors were encountered while processing:
 veracrypt

需要在这里安装一下 sudo 命令:

# 更新源
apt update -y

# 安装 sudo
apt install -y sudo

# 修复安装
apt --fix-broken install

# 再回来安装 veracrypt.deb 
dpkg -i veracrypt.deb

安装过程如下:

root@debian:~# apt update -y
Hit:1 http://deb.debian.org/debian buster InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.

root@debian:~# apt install -y sudo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 veracrypt : Depends: libwxgtk3.0-gtk3-0v5 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

root@debian:~# apt --fix-broken install
... 省略 ...

root@debian:~# dpkg -i veracrypt.deb 
(Reading database ... 29161 files and directories currently installed.)
Preparing to unpack veracrypt.deb ...
Unpacking veracrypt (1.24.23-1) over (1.24.23-1) ...
Setting up veracrypt (1.24.23-1) ...
Processing triggers for mime-support (3.62) ...

创建加密虚拟硬盘

veracrypt -t -c

选择卷类型,[ 1: 默认 2:隐藏 ],选择 1

Volume type: 1) Normal 2) Hidden
Select [1]: 1

输入卷存储位置:/root/veracrypt

Enter volume path: /root/veracrypt

输入卷大小:5G

你可以输入多种单位,比如 1024K,或者 50M,或者 10G。

Enter volume size (sizeK/size[M]/sizeG): 5G

选择加密算法,【选择 1 AES 加密】

Encryption Algorithm: 1) AES 2) Serpent 3) Twofish 4) Camellia 5) Kuznyechik 6) AES(Twofish)
 7) AES(Twofish(Serpent))
 8) Camellia(Kuznyechik)
 9) Camellia(Serpent)
 10) Kuznyechik(AES)
 11) Kuznyechik(Serpent(Camellia))
 12) Kuznyechik(Twofish)
 13) Serpent(AES)
 14) Serpent(Twofish(AES))
 15) Twofish(Serpent)Select [1]: 1

选择哈希算法,选择 1 SHA-512

Hash algorithm: 1) SHA-512 2) Whirlpool 3) SHA-256 4) Streebog
Select [1]: 1

选择格式化卷的文件系统,建议选择 EXT4,是比较常用的 linux 文件系统格式:

Filesystem: 1) None 2) FAT 3) Linux Ext2 4) Linux Ext3 5) Linux Ext4 6) NTFS 7) exFAT 8) Btrfs
Select [2]: 5

输入两遍用于加密卷的密码,这里输入密码不会回显,只需要输入完按回车就行。将密码设置复杂点。

Enter password: 
Re-enter password:

 对于 PIM 和 keyfile,我们可以按回车留空跳过。

Enter PIM: 

Enter keyfile path [none]:

输入 320 个任意字符,以此为程序增强密钥随机性:

Please type at least 320 randomly chosen characters and then press Enter:

Done: 100.000%  Speed: 393 MiB/s  Left: 0 s 

The VeraCrypt volume has been successfully created.

如果你看到类似的报错,目前阶段不影响使用,其原因我也不清楚:

(process:13567): GLib-GObject-WARNING **: 06:56:31.173: invalid (NULL) pointer instance

(process:13567): GLib-GObject-CRITICAL **: 06:56:31.174: g_signal_handlers_disconnect_matched: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(process:13567): GLib-GObject-WARNING **: 06:56:31.174: invalid (NULL) pointer instance

(process:13567): GLib-GObject-CRITICAL **: 06:56:31.174: g_signal_handlers_disconnect_matched: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

挂载加密卷

如果目录不存在,请先创建

root@debian:~# mkdir /mnt/veracrypt

使用命令挂载加密虚拟盘 (/root/veracrypt) 到 (/mnt/veracrypt) 位置

veracrypt -t /root/veracrypt /mnt/veracrypt

输入硬盘密码,其他全部留空按回车:

Enter password for /root/veracrypt: 
Enter PIM for /root/veracrypt: 
Enter keyfile [none]: 
Protect hidden volume (if any)? (y=Yes/n=No) [No]:

查看下挂载情况:

root@debian:~# df -hFilesystem              Size  Used Avail Use% Mounted on
udev                    480M     0  480M   0% /dev
tmpfs                    99M   12M   88M  12% /run
/dev/vda1               8.9G  6.2G  2.3G  74% /
tmpfs                   494M     0  494M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   494M     0  494M   0% /sys/fs/cgroup
tmpfs                    99M     0   99M   0% /run/user/0
/dev/mapper/veracrypt1  4.9G   20M  4.6G   1% /mnt/veracrypt
root@debian:~# lsblkNAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0          7:0    0    5G  0 loop 
└─veracrypt1 253:0    0    5G  0 dm   /mnt/veracrypt
vda          254:0    0   10G  0 disk 
├─vda1       254:1    0    9G  0 part /
├─vda2       254:2    0    1K  0 part 
└─vda5       254:5    0  975M  0 part [SWAP]

列出加密卷

# veracrypt -t -l1: /root/veracrypt /dev/mapper/veracrypt1 /mnt/veracrypt

卸载加密卷

veracrypt -t -d /mnt/veracrypt