我正在寻找一种可以以只写模式挂载的 Linux 加密文件系统,我的意思是您应该能够在不提供密码的情况下挂载它,但仍然可以写入/附加文件,但您既不能读取您已写入的文件,也不能读取文件系统上已有的文件。只有通过密码挂载文件系统时才允许访问文件。这样做的目的是写入日志文件或类似数据,这些数据只能写入,但不能修改,而不会暴露文件本身。文件权限在这里没有帮助,因为我希望即使系统完全被攻陷,数据也无法访问。
Linux 上存在这样的功能吗?如果没有,创建加密日志文件的最佳替代方案是什么?
我当前的解决方法是简单地通过管道传输数据gpg --encrypt
,这种方法虽然有效,但非常麻烦,因为您无法轻松访问整个文件系统,因此您必须手动通过管道传输每个文件gpg --decrypt
。
答案1
...我希望即使系统完全被攻破,数据也无法访问。
这是不可能的。如果系统完全被攻破,那么“根据定义”系统上的所有内容都可以被访问 - 包括加密密钥。
如果加密/解密数据的密钥与加密数据位于同一系统,则加密在系统运行时无法防止系统被入侵。例如,如果您安装了 LUKS 文件系统,并且有人获得了系统的 root 访问权限,则可以从 RAM 中提取密钥 - 因为它们必须位于 RAM 中才能解密文件系统。在您的情况下,如果您每次加密文件时都输入密码,那么您就受到保护(假设您的系统上没有键盘记录器),否则,您处于相同的情况,入侵您系统的人可以找到该密钥并撤消所有加密。
您需要将要保护的数据发送到系统外部 + 如果您绝对不想让 root 访问它,请不要将其写入该系统上的中间介质。rsyslog
明确支持与日志记录相关的功能,并且您可以使用 OpenVPN、 或类似方式加密源和接收器之间的连接stunnel
。我相信还有其他“单向”传输选项。
答案2
在我看来,你走错了方向。如果你想要一个可以写入但不能读取的文件,那么文件权限就是你要找的。
$ touch log
$ chmod 222 log
$ echo test > log
$ cat log
cat: log: Permission denied
当然,该文件可以位于加密文件系统上。
答案3
完全有可能。我实现了类似的东西,但不是在文件系统级别。
对于任何感兴趣的人,这里都说明了方法。
- 公钥/私钥对是在另一台安全计算机上生成的。
- 仅将公钥复制到可能被盗的计算机。
- 写入时只需使用公钥加密。
- 如果被盗,私钥就不在设备上。
- 当您准备读回时,复制数据离开将设备恢复到安全状态,然后使用私钥在那里解密。
警告:如果您在敏感设备上解密并删除私钥,则存在被恢复的风险。因此,最好在其他设备上解密,以确保私钥位永远不会出现在设备上。
如果设备有数千个随机命名的公钥,并且您告诉它在启动时使用哪个公钥,那么您可以获得加分。假设所有保存的数据都没有保存与之关联的密钥,您现在可以合理地拒绝解密能力,只需承认您或其他人可能选择了错误的公钥即可。
我在跑车的行车记录仪上使用了这样的系统。我希望它能在我被撞或被抢劫时保护我。但如果我开的是跑车,并且有录像记录,万一我出车祸,它不会给我带来任何麻烦。
基本上,这使得证人只是我的朋友,而不是我的敌人。
你打我或者抢我。我解密了正确的密钥,并拿出视频证据。
我撞到什么东西,警察拿走了相机,我会假装无法解密。没有钥匙,等等。目击者保持沉默。
这样,有人就可以带着相机进入恶劣的环境中,拍摄照片证据,而且如果被捕获,敌人也无法确定照片的内容。
享受这些知识:)
答案4
umask 0477 && touch file && echo test > file && cat file
也很有用。在当前进程中创建的任何文件都将具有 0200 模式。