“sudo bash”忽略.bash_history 文件的只读权限

“sudo bash”忽略.bash_history 文件的只读权限

该问题出现在最新的 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”可以工作,但这是一种相当不干净的方法。

相关内容