当我在 Linux(Ubuntu) 服务器上通过 ssh 登录时,我注意到服务器上其他用户执行的所有 bash 命令都保存在命令历史记录中。有没有一种方法可以让我对服务器上的其他用户隐藏我在命令行中键入的命令?
答案1
有很多方法可以隐藏命令历史记录,但完全关闭历史记录不是一个好主意,因为它非常有用。以下是暂时关闭它的三种好方法。
最快的解决方案: 类型
unset HISTFILE
这将防止在您注销时将当前登录会话中运行的所有命令保存到 .bash_history 文件中。请注意,HISTFILE 将在您下次登录时重置,因此历史记录将照常保存。另请注意,这会删除全部来自会话的命令,包括在键入 unset HISTFILE 之前运行的命令,这可能不是您想要的。另一个缺点是,在注销之前您无法确定是否正确执行,因为 bash 仍然允许您使用向上箭头查看以前的命令。
最佳解决方案: 在命令前输入一个空格
尝试一下,然后点击向上箭头查看它是否已添加到您的历史记录中。有些网站已经设置好这样的命令不会被保存。如果它不起作用,请将该行添加
export HISTCONTROL=ignoreboth
到您的 .bashrc 文件中。当您以后登录时,以空格开头的命令将立即被忘记。最容易记住: 类型
sh
这将使用原始 Bourne shell 启动一个子 shell。其中写入的任何命令(直到您
exit
)都不会保存在您的历史记录中。任何查看您的历史文件的人都可以看到您运行了 sh(这是可疑的),但看不到您之后运行的内容。
还有许多其他方法可以做到这一点。您甚至可以告诉 bash 永远不要记住哪些命令 (HISTIGNORE)。请参阅 bash(1) 的手册页并搜索 HIST 以查看许多可能性。
答案2
shell 会话的命令行历史记录bash
存储在该~/.bash_history
文件中。如果该文件不存在,则创建该文件时其他用户没有读取权限。
bash
您可以通过设置环境变量来更改保存到该文件中的命令数量HISTFILESIZE
。将其设置为零会将历史文件截断为零大小。默认值为 500。取消设置HISTFILE
( unset HISTFILE
) 变量还将阻止在历史文件中存储命令。
但是,您所描述的服务器(在评论中)的当前设置是完全错误的。
没有理由允许多个用户登录并在root
帐户上使用交互式 shell。请考虑使用sudo
多个私人用户帐户来代替!
命令历史记录root
,无论是交互式会话还是使用时sudo
,都是极其宝贵的,尤其如果您有多个有权root
访问系统的用户。
您的团队会想知道确切地root
最好调查并修复该用户执行任何错误配置或其他事故后所做的事情。通过命令行历史记录,可以更轻松地查找出现问题的原因。由于这个原因,该sudo
实用程序还会将每次调用记录到系统日志工具中,并带有时间戳、完整的命令行以及执行的用户的用户名sudo
。
编辑:我们最近开始在工作中的 Linux 机器集群上的光纤网络出现问题。事实证明,当一个有sudo
访问权限的愚蠢用户不小心进行了软件包升级时,某些驱动程序或其他驱动程序被替换为错误的版本。我们能够通过查看系统日志和sudo
其中的时间戳找到这一点。原来这个“傻用户”不是别人,正是我自己!
答案3
登录后发出以下命令:
HISTFILE=
这将阻止任何后续命令被记录到历史文件中。