让 sudoers 使用他们自己的历史文件

Ade*_*sso 5 command-line bash sudo bashrc bash-history

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

HISTFILE="/root/.bash_history.$SUDO_USER"
Run Code Online (Sandbox Code Playgroud)

似乎什么也没有发生。

我已尝试使用上述条目更改/root/.bashrc/etc/skel/.bashrc。没有。我以前在 CentOS 中使用过这个(请参阅make sudoers 使用他们自己的历史文件)。

我什至将条目移到文件的开头,因为我发现一些建议表明它可能会在某一点后被忽略,但无论位置如何,都不会创建历史文件。如果我使用我的箭头键,但是历史条目在那里......它们来自哪里我已经不知道了,这似乎是某种魔法,似乎是巫毒教。

任何帮助,将不胜感激。

gun*_*ert 3

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

~$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

HISTFILE="/root/.bash_history.$SUDO_USER"
Run Code Online (Sandbox Code Playgroud)

作为第一行。

使用 和 重复上述实验,得到sudo -ssudo ls -l $HISTFILE之前相同的结果(如预期)。但sudo -i给了我一个没有历史记录的外壳(也没有历史文件)。

执行后

~$ 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
Run Code Online (Sandbox Code Playgroud)

并注销

~$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)