kid*_*ose 4 arch-linux encryption crypttab
设置:我使用的是一个USB硬盘树莓PI,运行拱Linux和syncthing为自己的“云”同步。
问题:如果发生物理入侵,其中 HDD pi 和 HDD 被盗,我想确保 HDD 上的文件保密。
当前的高级想法:加密硬盘,将密钥存储在网络服务器上。在启动时,下载密钥、解密和挂载。不要将密钥存储在 HDD/SD 卡上。如果被盗,请停止从网络服务器提供密钥。
问题:如何去实现这个?
(crypttab 可以解决这个问题吗?编写我自己的 systemd 单元是要走的路吗?任何其他想法,甚至可能的解决方案都是受欢迎的)
设置它的最简单方法是拥有一个明文系统分区(我认为在 SD 卡上)和一个加密数据分区。使用 dmcrypt 加密数据分区,密钥存储在从服务器下载的密钥文件中。
首先设置服务器基础设施,然后下载密钥文件并cryptsetup luksFormat /dev/sdb1 /run/data.keyfile
使用cryptsetup luksAddKey /dev/mapper/encrypted /run/data.keyfile
. 请注意,您可以安排使用密码或密钥文件解锁卷,这可能便于管理(即使服务器不可用,您也可以键入密码)。
密钥文件不必采用任何特定格式。只需在服务器上生成一些随机字节;16 个字节就足够了(更多的不会给你更好的安全性,但更少的不会给你更好的性能):</dev/urandom head -c 16 >pi.keyfile
.
使用 HTTPS 提供密钥以避免被窥探。如果您没有经过 CA 验证的证书,请创建您自己的证书并将其添加到/etc/ssl/certs
,或将其传递给下载命令(wget --ca-certificate /etc/local/my.cert
或curl --cacert /etc/local/my.cert
)。
您需要在激活加密卷之前下载密钥。您可以通过其中之一一步完成此操作
wget -nv -O - https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
curl https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
Run Code Online (Sandbox Code Playgroud)
或者您可以将密钥下载到临时文件,然后激活该卷,最后(不是必需的,但可能会稍微提高安全性)删除临时文件。这个临时文件的自然位置是 in /run
,它在 RAM 中并且只能由 root 写入(不要将密钥下载到持久存储)。您应该使文件只能由 root 读取(您可以umask 700
在下载前进行设置以进行安排),尽管这仅在您不控制启动时运行的所有代码时才重要。
如果将密钥下载到临时文件中,可以将密钥文件放入/etc/crypttab
,并添加一个systemd单元下载在激活加密卷之前运行的密钥文件(但在网络可用之后)和另一个单元删除密钥文件然后。把wget … | cryptsetup …
在/etc/rc.local
外观更容易建立。
您可能希望在客户端下载密钥时对其进行身份验证。身份验证令牌必须以明文形式存储在 Pi 上。您可以使用 SSL 客户端证书:
curl --cert /etc/keyfile.cert https://myserver.example.com/pi.keyfile
wget --certificate /etc/keyfile.cert https://myserver.example.com/pi.keyfile
Run Code Online (Sandbox Code Playgroud)
或具有 HTTP 基本身份验证的密码,存储在/root/.netrc
:
curl -n --user=pi https://myserver.example.com/pi.keyfile
wget --user=pi /etc/keyfile.cert https://myserver.example.com/pi.keyfile
Run Code Online (Sandbox Code Playgroud)
在服务器端设置基本身份验证可能更容易。使用随机生成的没有特殊字符的密码(例如</dev/urandom | head -c 16 | base64
)。
请注意,无论您做什么,窃取 Pi 的人都会获得密码,并且如果您不先在发送方阻止它,就可以下载密钥。此外,可以物理访问 Pi 的人可以快速拔出 SD 卡,进行复制,然后将其插回;如果您不监控正常运行时间以外的任何内容,这看起来像是电源故障。没有办法完全防止这种情况发生。您可以将密钥放在智能卡中,这样可以防止攻击者复制它,但不能窃取智能卡或当场使用它来下载密钥文件。
再一次,您无法防止具有物理访问权限的人快速下载密钥文件,然后窃取磁盘并在闲暇时对其进行解密。如果你想防止这种情况发生,你需要研究防篡改硬件,它的价格范围不同。