現在、各ユーザーのBash履歴をそのホームフォルダに即座に保存するサーバーが設定されており、現在のユーザーを切り替えて「history」Orderを実行する設定された間隔で実行されるスクリプトを作成したいと思います。
コマンドラインでsuとsudoのすべてのバリエーションを試しましたが、スクリプトで他のユーザーに対して "history"コマンドを実行したり、su / doを使用したりするたびに何も出力されません。
スクリプトでは、次のようにsuとsudoのすべてのバリエーションを試しました。
su <user>
history
しかし、それがすることはそのユーザーとしてシェルを開くだけで、「記録」の出力を返しません。
現在、RHEL6.9とBash 4.1.2を使用しています。
編集する:
現在、すべての.bash_historyファイルを監視するログコレクタがありますが、フィールドを割り当てて各コマンドの正確な実行時間を記録できるように、タイムスタンプとユーザーを追加するように/ etc / bashrcを設定しました。 .bash_historyにコマンドライン履歴を保存するためのBashの内部形式は、単にエポック時間を追加するだけであるため、個々のユーザーごとに「記録」を実行できる必要があります。
コマンドラインとスクリプト(別々)で以下を試しました。
su -c "history" <user>
sudo -i -u <user> history
sudo -S -u <user> -i /bin/bash -l -c 'history'
私はスクリプトでこれをやろうとしています。
su -i <user>
history
しかし、彼らは何の結果も返しません。
答え1
スクリプトを生成し、すべてのユーザーが使用できるPATHのどこかに保存します。たとえば、/bin
または/usr/bin
スクリプト
#!/usr/bin/env bash
HISTFILE=$HOME/.bash_history
history -r
unset HISTFILE
history
と同じ名前で保存してください。print_history
今試してみてください
su - user_name -c 'print_history'
時間形式があるとのことで、そのスクリプトで設定を解除して/etc/bashrc
いません。HISTTIMEFORMAT
このスクリプトのアイデアは私のものではありません。私は個人的にこのPROMPT_COMMAND
変数を使用して対話型セッション中に入力/実行されるすべてのコマンド(そして私のシステムのすべてのユーザーに対して)をキャプチャするので、スクリプトを使用しません。したがって、スクリプトは次のようになります。それは言うことができます。もちろん、すべてのユーザーはログインシェルとしてbashを使用する必要があります。