让 sudoers 使用自己的历史文件

让 sudoers 使用自己的历史文件

我似乎无法让它在 Ubuntu 中工作,这应该是一个简单的答案,也许有人可以帮助我。我所做的就是让 sudoers 使用他们自己的历史文件,但如果我在 root 中设置历史变量.bashrc

HISTFILE="/root/.bash_history.$SUDO_USER"

好像什么也没有发生。

我尝试过用上面的条目更改/root/.bashrc/etc/skel/.bashrc。没有用。我以前在 CentOS 中也用过这个(参见让 sudoers 使用自己的历史文件)。

我甚至将条目移到了文件的开头,因为我发现一些建议指出,在某个点之后可能会忽略它,但无论位置如何,都不会创建历史文件。但是,如果我使用箭头键,历史条目就在那里……它们从何而来,我再也不知道了,这似乎是某种魔法,似乎是巫术。

任何帮助,将不胜感激。

答案1

我只是按照你所描述的进行操作,并进行了一些实验

~$ sudo -s
~# ls -l $HISTFILE
-rw------- 1 g g 44174 Jan  4 16:26 /home/g/.bash_history

~$ sudo -i
~# ls -l $HISTFILE
-rw------- 1 root root 2356 Jan  4 16:23 /root/.bash_history

~$ sudo ls -l $HISTFILE
-rw------- 1 g g 44174 Jan  4 16:26 /home/g/.bash_history

因此当我们运行标准sudo命令时或者当我们使用sudo -s来获取 root shell 时我们已经在使用我们自己的历史文件。

仅当我们调用sudo -i以获取正确的登录 shell 时才会使用原始的 root 历史记录。

现在我按照你的指导进行编辑,/root/.bashrc以包含

HISTFILE="/root/.bash_history.$SUDO_USER"

作为第一行。

重复上述实验,sudo -ssudo ls -l $HISTFILE得到与之前相同的结果(如预期)。但是sudo -i得到的 shell 没有历史记录(也没有历史记录文件)。

执行后

~$ sudo -i
~# ls -l .bash_history*
-rw------- 1 root root 2412 Jan  4 17:16 .bash_history
~# echo $HISTFILE
/root/.bash_history.g
~# ls -l $HISTFILE
ls: cannot access '/root/.bash_history.g': No such file or directory

并注销

~$ sudo -i
~# ls -l .bash_history*
-rw------- 1 root root 2412 Jan  4 17:16 .bash_history
-rw------- 1 root root   52 Jan  4 17:25 .bash_history.g

我得到了预期的结果(包括使用箭头键访问“我的”历史记录。

请记住,的内容/root/.bashrc执行对于交互式的非登录 shell(如sudo -s),对于登录 shell(如sudo -i/root/.bashrc只有来源,并且仅当/root/.profile包含类似

if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi

相关内容