尽管这个问题是由想要记录自己的会话的个人提出的,但另一个用例可能是系统管理员,他想跟踪各种用户的行为。
我担心,如果机器的用户不愿意记录自己的会话,则可能无法script
在系统范围内运行bashrc
。
希望保持隐身状态的用户可以通过要求sshd打开其他外壳程序(例如zsh
)或运行bash --rcfile ___
以防止/etc/bash.bashrc
加载来绕过日志记录。
另一种方法
2008年的本指南(已存档)使用了一种不同的方法来强制script
用户使用ssh登录时运行,该方法要求用户使用公钥/私钥登录。
这是通过在脚本.ssh/authorized_keys
前面的用户文件中添加脚本来完成的:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
然后,log-session
(存档的)脚本决定是否运行/usr/bin/script
以记录该用户的会话。
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
为了防止用户删除添加的命令,管理员将需要承担用户authorized_keys
文件的所有权。
chown root:root ~user/.ssh/authorized_keys
不幸的是,这意味着用户将无法自己添加任何其他密钥,或者更重要的是,如果现有密钥被泄露,则将其撤销是很不理想的。
注意事项
sshd的默认配置通常允许用户通过其ssh登录名执行SFTP。这为用户提供了一种在不记录更改的情况下编辑文件的方法。如果管理员不希望用户能够执行此操作,则他应该为SFTP启用某些日志记录,或者禁用该服务。尽管即使那样,用户仍然可以通过在其终端中运行以下内容来对文件进行看不见的更改:
curl "http://users.own.server/server/new_data" > existing_file
通过使用记录所有文件历史记录的写时复制文件系统,可以监视类似的更改。
但是类似的技巧可以使用户在不记录命令的情况下执行命令:
curl "http://users.own.server/server/secret_commands_824" | sh
我不知道有什么简单的解决方案。可能是:
- 记录所有网络数据(并在以后对其进行整理)。
- 记录所有系统调用。
使用auditd可能会发生这种情况。
但不管怎么说...
记录用户会话不太可能为管理员提供任何真正的安全性。默认情况下,用户只能操作自己的文件,而不会损害系统。如果恶意用户确实设法提升了权限,则他可以禁用日志记录并删除日志(除非管理员已将日志配置为以仅追加方式存储在单独的计算机上)。
自动记录用户会话的管理员可能应该通知用户这已完成。在某些辖区,这种形式的数据收集可能违反数据或隐私法。至少,要让用户知道它们是尊重的。
管理员更有可能对记录sudo
用户的会话感兴趣。也许可以用不同的答案或不同的问题来解决。
exec
在行的开头添加。它应该script -f
在相同的Shell PID中启动。