自动加密日志文件的 Bash 脚本

自动加密日志文件的 Bash 脚本

我有一些日志用作 GDPR 隐私问题的证据。该应用程序处理个人数据并记录谁使用它来做什么。除非正在进行滥用调查,否则任何人都不应阅读这些日志。

我如何以安全加密的方式(本地)存储这些每天轮换的日志?我正在考虑 root crontab 作业,但密码不应该是纯文本。非常感谢所有建议。

$ ls -ltrh
-rw-r----- 1 appuser appuser  83K May 27 23:55 gdpr.log.2018-05-27
-rw-r----- 1 appuser appuser 905K May 28 23:55 gdpr.log.2018-05-28
-rw-r----- 1 appuser appuser 3.0M May 29 23:40 gdpr.log.2018-05-29
-rw-r----- 1 appuser appuser 462K May 30 09:49 gdpr.log

答案1

您可以使用服务器上的公钥对文件进行加密,而该公钥只能使用不在服务器上的私钥进行解密。这样,即使服务器受到威胁,加密的日志仍然应该是安全的。

例子:

创建一个工作目录并创建一个新的公钥和私钥对:

$ mkdir /tmp/1
$ cd /tmp/1
$ ssh-keygen -f key
$ ls
key
key.pub

将公钥转换为以下pem格式:

$ openssl rsa -in key -pubout > key.pub.pem

创建一个名为 的测试文件file,其内容为hello

$ echo hello > file

使用格式公钥加密文件pem并将输出写入名为的文件encrypted

$ cat file | openssl rsautl -encrypt -pubin -inkey key.pub.pem > encrypted_file

使用私钥解密文件:

$ cat encrypted_file | openssl rsautl -decrypt -inkey key
hello

显然,您希望将私钥移出服务器,并且可以将加密命令放入 cronjob 中。就像是:

for file in /var/log/dir/*;do
    cat "${file}" | openssl rsautl -encrypt -pubin -inkey /path/to/key.pub.pem > "${file}.encrypted" && rm "${file}"
done

答案2

任何稍微熟悉这个主题的人都可能会问上百个问题,以确定解决方案的现实框架。话虽如此,你考虑过全盘加密吗?这真的,真的与构建任何类型的自动化或程序的开销相比,这很简单,并且可能足以承担您的责任(我不是律师),除非您是远程root。

相关内容