大多数情况下我们购买 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
[email protected]:~# 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
安装过程如下:
[email protected]:~# 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.
[email protected]:~# 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).
[email protected]:~# apt --fix-broken install
... 省略 ...
[email protected]:~# 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
挂载加密卷
如果目录不存在,请先创建
[email protected]:~# 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]:
查看下挂载情况:
[email protected]:~# df -h
Filesystem 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
[email protected]:~# lsblk
NAME 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 -l
1: /root/veracrypt /dev/mapper/veracrypt1 /mnt/veracrypt
卸载加密卷
veracrypt -t -d /mnt/veracrypt