我使用 记录所有 shell 活动script
,但担心这些日志文件中有相当多的密码和其他秘密内容。
有谁知道以加密方式记录 shell 会话的任何方法吗?是否有一些类似的实用程序script
与 GPG 集成?
答案1
您可以将日志文件放入加密的保管库中,而不是加密单个文件。
或者也许让script
写入 fifo,用 gpg 读取该 fifo,然后让 gpg 进行加密并将其写入文件。
答案2
如果您正在使用bash
,您可以使用您的脚本使用 gpg 或其他东西~/.bash_logout
来加密日志文件。script
.bash_logout
需要知道日志的文件名是什么。例如,不只是运行script filename
,而是myscript
运行.bashrc
.
function myscript() {
# Very primitive option handling. This really needs to pass any script
# command-line options on to script.
# Left as an exercise for the reader and the getopts documentation :)
if [ -n "$1" ] ; then
SCRIPT_FILENAME="$1"
else
SCRIPT_FILENAME="$USER-$(tty)-$(date +%s)"
fi
readonly SCRIPT_FILENAME
export SCRIPT_FILENAME
script "$SCRIPT_FILENAME"
}
然后在 .bash_logout 文件中:
if [ -n "$SCRIPT_FILENAME" ] && [ -e "$SCRIPT_FILENAME" ] ; then
gpg --batch --yes -r 'YOUR-EMAIL-OR-ID' -e "$SCRIPT_FILENAME"
shred "$SCRIPT_FILENAME" # or any other file secure-erase tool.
rm -f ""$SCRIPT_FILENAME"
fi
安全警告: 这使得您的系统容易受到任何可以在 shell 环境中设置 SCRIPT_FILENAME 变量的东西(例如源脚本)的影响。攻击者可以将其设置为您的用户 ID 具有写入权限的任何文件。 (当然,如果攻击者可以像您一样运行任何内容,则他们可以自己覆盖该文件)
您可以通过在您的而不是在函数中将$SCRIPT_FILENAME
其设置为只读来避免这种情况。这将使得 myscript 函数无法使用不同的文件名。~/.bashrc
myscript
或者您可以将所有打字稿存储在一个目录中(例如/home/username/typescripts/
)。然后 .bash_logout 脚本可以检查:
- 文件名以该目录的绝对路径开头,
- 文件名不以
.gpg
../
文件名中没有s- 文件名不是符号链接
- 文件名的 inode 计数 = 1
- ETC
在加密、粉碎和删除之前。
另一个安全警告:
谨防。即使自行承担风险,也不要使用代码示例。我的例子仅供参考。
虽然其中的一小部分已经单独测试,但尚未作为一个完整的功能系统进行测试。这个答案是不是旨在提供完整的解决方案。旨在为您提供自己探索和实施的想法。