久しぶりの投稿です。
最近はgpd-micropcにubuntu mateをインストールして遊んでいます。
経緯
ターミナルでの操作ログを自動で取得する方法がないか、探しいていました。
はじめは.bashrcにscriptコマンド書けばよいだろと思っていましたが、どうもうまくいかないようです。。
色々探した挙げ句、参考になる記事を発見しました。
How do I log all input and output in a terminal session?
環境
gpd micropcにubuntu-mateインストールしたものです
OS: Ubuntu 19.10 eoan
Kernel: x86_64 Linux 5.3.0-40-generic
Shell: bash
DE: MATE 1.22.2
CPU: Intel Celeron N4100 @ 4x 2.4GHz
GPU: Mesa DRI Intel(R) UHD Graphics 600 (Geminilake 2x6)-
やったこと
1. rsyslog設定ファイル作成
logger
コマンドでログを出力させる形になるので、以下に設定ファイルを作成
vim /etc/rsyslog.d/bash.conf
/etc/rsyslog.d/bash.conf
local6.* /var/log/commands.log
2. .bashrc
追記
操作ログ取得対象のユーザのホームディレクトリ配下の.bashrc
に以下を追記
vim /home/hoge(対象ユーザ)/.bashrc
/home/hoge(対象ユーザ)/.bashrc
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
3. rsyslogサービス再起動
rsyslogサービスを再起動する
systemctl restart rsyslog.service
4. ログローテート用設定ファイル作成
logrotate.d
で日次でローテートするように、設定ファイルを作成する
vim /etc/logrotate.d/commands
/etc/logrotate.d/commands
/var/log/commands.log*
{
»-rotate 7
»-daily
»-dateext
»-missingok
»-notifempty
»-compress
»-postrotate
»-»-/usr/lib/rsyslog/rsyslog-rotate
»-endscript
»-su root root
}
確認
.bashrc
を読み込んで
source .bashrc
以下のようにファイルが /var/log
配下にできていることを確認
ls -la /var/log/commands.log*
-rw-r----- 1 syslog adm 4753 3月 15 19:34 /var/log/commands.log
/var/log/commands.log
Mar 15 19:34:29 hoge hoge: hoge@export [3457]: 2020-03-15 19:34:29 cd [0]
Mar 15 19:34:39 hoge hoge: hoge@export [3457]: 2020-03-15 19:34:37 source .bashrc [0]
Mar 15 19:36:56 hoge hoge: hoge@export [3457]: 2020-03-15 19:36:56 ls -la /var/log/commands.log* [0]
所感
logrotateできてるかあやしい。。
後、scriptコマンドみたいに出力もほしい。。