标题说 Linux 就是不限发行版啦,目前研究了好几天了,有几个硬性要求:
1 、加密(这个自然不用说了) 2 、免输入磁盘密码进入系统(密码告诉他人就白加密啦,但也不能因此而阻碍正常引导) 3 、密钥文件不可读(因为在尝试把 boot 分区加密后发现过完 bios 后就会要求输入磁盘密码,所以退而求其次,暂时不加密 boot 分区了,之前研究的方案是一些密钥文件放在 boot 分区和 initramfs 中,现在 boot 分区不加密这个方案也否决了)
现在最接近成功的方案是使用 U 盘做密钥,插上 U 盘就可以正常启动,否则提示输入密码,但这个有一个关键配置是在 /etc/crypttab 中配置 keyscript 参数,而几个主流发行版(我测试了 centos7 、ubuntu 18 、ubuntu 20 、Debian 10 )都使用了 systemd,而 systemd 下无法使用 keyscript 参数,所以请教有大佬有相关经验的么?
1
Jeansh 2021-01-06 14:33:58 +08:00
tpm
|
2
watara OP @Jeansh #1 我有去了解过 TMP,目前没有相关硬件,也用这个作为关键词进行过搜索,我目前的想法是:这个在配置上应该和 U 盘基本类似吧?
|
3
cmostuor 2021-01-06 14:49:34 +08:00
@watara 没有相关硬件可以用 tpm 模拟器修改一下也能达到用硬件的效果 https://github.com/PeterHuewe/tpm-emulator
|
4
cmostuor 2021-01-06 14:58:33 +08:00
想要实现效果估计最好还是折腾一下 uefi (现在这年代估计没有不支持 uefi 的电脑了吧 以下都是默认电脑支持 uefi ) 把电脑的 uefi 备份下来把里面不需要的驱动删了然后在添加自己写好并编译好的加密驱动 只要想折腾还是能达到效果的 但如果不想折腾达到效果那我就不知道有啥方案了 那只能请楼下继续
|
5
watara OP @cmostuor #4 多谢指明思路,其实折腾的不是电脑啦,是服务器来着,目前是针对物理机的,但下一步目标是针对云主机,那个我感觉更麻烦。
|
6
tomychen 2021-01-06 15:47:03 +08:00
veraCrypt 可以对非引导分区加密,进入系统后再挂载加密盘。而难题在于,你怎么去保证这个密码,来实现自动化挂载,当然简单的办法就是重启后,由管理员去输密码。但是,,,有点酸爽,如果用脚本,那密码就必然要留着脚本里,加密就没任何意义了
veraCrypt 是不是支持加密引导,没研究过。 |
7
watara OP @tomychen #6 目前用的是 luks 加密,解决引导时解密用的脚本( keyscript 配置后面配置的脚本)中并没有记录明文密码,而是去 usb 块设备中读取特定块作为密钥文件(非传统概念中的文件),而且经测试,这个脚本进行转成二进制文件后也是可以的,不过二进制文件加壳加密我没试过,或许也是可行的
|
8
ysc3839 2021-01-06 15:56:06 +08:00
大概只有 TPM 这一种方案,把密钥放 U 盘什么的都解决不了可以随意读取的问题。
|
9
Cooky 2021-01-06 15:56:43 +08:00 via Android
pxe 启动从网络加载 initramfs ?
|
11
cmostuor 2021-01-06 16:12:46 +08:00
@ysc3839 密钥存放的地址可以在源代码里改 如果是 uefi 的方式可以把密钥直接嵌入在固件、efi 文件里或 u 盘里 如果是其他方式可以放在 U 盘里或云上服务器里
|
13
ziseyinzi 2021-01-06 17:22:23 +08:00
你既然想全盘加密又不想输密码,肯定要在硬盘之外的地方存储密钥吧。这个硬盘之外的地方可以是 Yubikey 、U 盘、TPM 这类外置硬件,也可以是主板 UEFI 的 nvram 条目,也可以靠 PXE 网络启动。
|
14
watara OP @ziseyinzi #13 很有道理,现在考虑用 USB 设备,也是临时不成熟的方案,对物理机还可以用,但未来还要考虑云主机,那就不行了
|
15
tomychen 2021-01-06 20:40:51 +08:00
@watara 二进制里放密码和脚本里放没什么太大的区别,只不过是不是 cat 能看,但架不住 strings 来看,当然也可以用一些加壳的,但这还是防君子不防小人,真的到了这种需求,还是考虑硬件加密吧。硬件加密,主要有自己的存储来放密钥之类的东西,而且从售后上,也是有相应的保障的。
|
16
zingl 2021-01-07 01:17:28 +08:00
Mandos, set to "approve by default"
|