所有用户退出时删除BASH历史记录

6
在使用Red Hat Enterprise Linux时,是否可以设置全局选项,使得每当用户退出SSH连接时,该用户的BASH历史记录被清除?

如果用户已经自定义了他们的bash会话以将历史记录保存在任意文件中,那么你所能做的就不多了。 - chepner
尝试按照我的答案建议将/etc/bash.bash_logout设置为退出文件。 - lurker
以下建议的答案都不起作用。 - user2656114
5个回答

1
/etc/bash.bash_logout 脚本中,您可以放置以下内容:
unset HISTFILE

HISTFILE 的默认值是 ~/.bash_history。用户可以将其设置为任何他们想要的值。如果没有设置,注销过程不会将 RAM 中的历史信息写入历史文件。


这只会清除内存中的历史记录,而且在 shell 退出后也不会保留。 - chepner
默认情况下,bash 没有全局注销文件,尽管似乎可以在编译时启用它。我不知道它是否在可用的 ~/.bash_logout 之前或之后执行。 - chepner
@chepner 我的Fedora 18安装相当“默认”,/etc/bash.bash_logout在我的系统上是可用的。我没有自己编译系统。 - lurker
然而,:),用户可以在全局文件取消设置“HISTFILE”之前始终确保他的历史记录已经写出。 - chepner
@chepner 没错,我同意,最终的“作弊”方法是用户可以将history命令运行到任意文件中,然后在登录后将其复制回来。 - lurker
显示剩余2条评论

1
将以下内容放入~/.bash_logout文件中:
echo > $HISTFILE

这将在用户登出时清除保存的历史记录,但会在用户登录时保留一个有用的运行历史记录。

0
用户可以随时将他们的历史记录保存到非标准文件中,并在下次登录时重新加载它,因此从全局角度来看,你无法做太多事情来阻止它。
例如,Bob 可能会将以下内容放入他的 ~/.bash_login 文件中:
HISTFILE=~/my_secret_history_file

有没有可能全局设置历史记录为 /dev/null 或其他什么东西? - user2656114
不行,因为用户配置文件会在全局配置文件之后加载。你能做的最好的办法是设置一个历史记录不能被存储的策略,但是并没有技术手段来强制执行这样的策略。 - chepner

0

我知道你可以手动运行

history -c

我认为你可以将这个放入你的~/.bash_logout文件中。


0

当需要清空历史记录时 - 我会将它们链接到 /dev/null...

lrwxrwxrwx  1 root root    9 Dez 16 19:10 .ash_history -> /dev/null
lrwxrwxrwx  1 root root    9 Dez 16 19:10 .bash_history -> /dev/null

...然后,键入的命令历史记录仅适用于当前会话。
启动新的 shell,启动新的空临时历史记录。
将它们链接到普通用户的 /dev/null 必须由 root 完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接