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