web-dev-qa-db-ja.com

sudoersが独自の履歴ファイルを使用するようにします

私はそれをUbuntuで動作させることができないようです、それは簡単な答えでなければなりません、誰かが私を助けるかもしれません。私がやろうとしているのは、独自の履歴ファイルを使用するようにsudoersを取得することですが、rootで.bashrcにhistory varを設定すると:

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

何も起こらないようです。

上記のエントリで/root/.bashrc/etc/skel/.bashrcを変更しようとしました。なし。以前にCentOSで動作するようにしたことがあります( sudoersが独自の履歴ファイルを使用する を参照)。

エントリをファイルの先頭に移動しました。特定のポイントの後に無視される可能性があると述べたいくつかの提案が見つかりましたが、位置に関係なく、履歴ファイルは作成されていません。矢印キーを使用しても、履歴エントリはそこにあります...それらがどこから来たのか、私にはもう手がかりがありません、それはある種の魔法のようです、Voodooのようです。

任意の助けをいただければ幸いです。

5
Willem P. Botha

いくつかの実験を伴って、あなたが説明したものに従った

~$ 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 -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

ログアウト

~$ 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/.bashrcsourced =、および/root/.profileに次のようなものが含まれる場合のみ

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