该问题出现在最新的 12.04 中,似乎是最近才出现的。
我已将 .bash_history 文件设置为只读。最近我注意到尽管如此,文件仍在被修改!情况如下。在新终端中,以下是文件的尾部:
$ tail -5 .bash_history
mkdir -p ttt ; gs -dNOPAUSE -sDEVICE=png16m -r180 -sOutputFile=ttt/p%03d.png *.pdf
rsync -av /home/u1204 /media/SEAGATE/u1204
gnote.late.reminders|GREP_COLOR='1;32' egrep -i "is overdue"
pvr_iplayer -x -HD /home/u1204/Documents/pvr/tv-hd ; pvr_iplayer -x -STD /home/u1204/Documents/pvr/tv-std
exit
打开具有提升权限的 shell
$ sudo bash [sudo]
password for u1204:
# ls -l ~/.bash_history
-r-------- 1 u1204 u1204 1266 Feb 23 19:52 /home/u1204/.bash_history
因此 .bash_history 仍然是只读的。执行某些操作,然后退出升级后的 shell:
# echo "written to history file"
written to history file
# exit
exit
瞧,历史文件已被修改!
$ ls -l ~/.bash_history
-r-------- 1 u1204 u1204 1324 Feb 23 20:10 /home/u1204/.bash_history
打开另一个终端确认:
$ tail -5 .bash_history
pvr_iplayer -x -HD /home/u1204/Documents/pvr/tv-hd ; pvr_iplayer -x -STD /home/u1204/Documents/pvr/tv-std
exit
ls -l ~/.bash_history
echo "written to history file"
exit
我很确定它以前不会这样做(至少在 10.04 中不会)。
不管怎样,这都不是一个正确的行为,不是吗?
答案1
Root 对所有事物都有通用的读/写权限。就是这样。
Windows 的支持者喜欢声称它的身份验证系统更强大,因为它没有“上帝”账户,甚至可以明确拒绝本地管理员。
您不能拒绝 root 对本地系统上任何内容的访问。
经过一些评论,我开始思考你可能正在寻找一种根本不写入 bash 历史记录的方法。你可以这样做:http://www.commandlinefu.com/commands/view/7041/dont-save-commands-in-bash-history-only-for-current-session
对于那些不想跟踪链接的用户,请将未设置的 HISTFILE 放入您的 bashrc 中。
答案2
是的,您最终可以拒绝访问。
chattr +i
答案3
@雷神
我很确定它以前不会这样做(至少在 10.04 中不会)。
确实如此。
我认为如果你使用sudo
,你仍然可以保留你的身份但如果你提升了权限,sudo su -
另一方面,你就会成为“真正的根”。因此就有了差异。
答案4
只要您是 root 或文件所有者,程序就无法覆盖 RO。因此,正确的方法不是将文件设置为 r--,而是执行
取消设置 HISTFILE
对于“sudo -s”,这应该有效(环境被复制,这正是使用用户的 .bash_history 的原因),对于“sudo -i”(如“su -”),无论如何你都在使用 /root/.bash_history。如果你不想这样做,你需要在 root 的 .bashrc/.bash_profile 中取消设置 HISTFILE。
顺便说一句:正如已经提到的,获取 root-shell 的正确方法是 sudo -s / sudo -i。“sudo su”或“sudo bash”可以工作,但这是一种相当不干净的方法。