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 使用他们自己的历史文件)。
我什至将条目移到文件的开头,因为我发现一些建议表明它可能会在某一点后被忽略,但无论位置如何,都不会创建历史文件。如果我使用我的箭头键,但是历史条目在那里......它们来自哪里我已经不知道了,这似乎是某种魔法,似乎是巫毒教。
任何帮助,将不胜感激。
我只是按照你的描述进行操作,并进行了一些实验
~$ 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 -s与sudo 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)