заставить sudoers использовать свой собственный файл истории

5

Я просто не могу заставить его работать в Ubuntu, это должен быть простой ответ, может быть, кто-то может мне помочь. Все, что я пытаюсь сделать, - это заставить sudoers использовать свой собственный файл истории, но если я установлю историю var в .bashrcкорне for с помощью:

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

кажется, ничего не происходит.

Я попытался изменить /root/.bashrcи /etc/skel/.bashrcс вышеупомянутой записью. Ничего. Я получил это для работы в CentOS раньше (см. Сделать, чтобы sudoers использовать свой собственный файл истории ).

Я даже переместил запись в начало файла, так как нашел некоторые предложения, в которых говорилось, что она может игнорироваться после определенного момента, но независимо от позиции файлы истории не создаются. Если я использую свою клавишу со стрелкой, однако записи истории там ... откуда они берутся, я больше не имею понятия, это похоже на какую-то магию, кажется, Вуду.

Любая помощь будет оценена.

Виллем П. Бота
источник
Вероятно, ваша проблема: Ubuntu использует dash, а CentOS использует bash.
Rinzwind
Вы запускаете оболочку sudo, используя sudo -i? Что echo $HISTFILEдает, когда вы находитесь на сессии sudo?
Муру
Я только что попробовал sudo -i и вывел $ HISTFILE с выводом: /root/.bash_history. <Username>, но файл не существует. Где в мире находится файл .bash_history ???
Виллем П. Бота
dashне должен вступать в игру здесь - он используется только как замена bashпри вызове как /bin/sh. Интерактивные оболочки не подвержены влиянию.
Гюнтберт

Ответы:

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

Поэтому, когда мы выполняем стандартные sudoкоманды или когда мы используем, sudo -sчтобы получить корневую оболочку, мы уже используем наш собственный файл истории.

Только когда мы вызываем sudo -iдля получения правильной оболочки входа в систему, используется оригинальная история корня.

Теперь я последовал вашему примеру и отредактировал, /root/.bashrcчтобы содержать

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

как первая строка

Повторение вышеописанных экспериментов с 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

и выход

~$ 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только выполняется для интерактивного нерегистрированной оболочки (как sudo -s), для входа в скорлупе (как sudo -i) /root/.bashrcтолько источников , и только тогда , когда /root/.profileесть что - то вроде

if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi
guntbert
источник
sudo ls -l $HISTFILEна самом деле не имеет смысла, потому что $ HISTFILE будет развернут до фактического запуска команды.
Брайан Гордон