セキュリティのために操作ログを取得したいが、商用の操作ログ取得ソフトは高いのでオープンソースのttyrecを活用させてもらう。
ttyrecの開発者ってすごいね。天才だわ。
セキュリティ的にこの使い方はマズいね、ってご意見あれば教えてください。
Windowsはどうするよ、って問題は先送り。。
参考文書
インストール方法
# システムユーザttyrecを作成する
/usr/sbin/useradd -r -d /var/log/ttyrec -s /sbin/nologin ttyrec
# 操作ログ保管用ディレクトリを作成する
# グループttyrecだけがアクセスできる
mkdir -p /var/log/ttyrec chmod 750 /var/log/ttyrec chown ttyrec:ttyrec /var/log/ttyrec
# ttyrecパッケージのインストール用ディレクトリを作成する
mkdir -p /usr/local/ttyrec-1.0.8-5/{bin,etc} ln -s /usr/local/ttyrec-1.0.8-5 /usr/local/ttyrec
# ttyrecソースコードをダウンロードする
wget "http://0xcc.net/ttyrec/ttyrec-1.0.8.tar.gz"
# debianパッチをダウンロードする
# ウィンドウサイズがCOLUMNSとLINESで固定されてしまうのでdebianパッチを適用する
wget "http://ftp.de.debian.org/debian/pool/main/t/ttyrec/ttyrec_1.0.8-5.debian.tar.gz"
# コンパイルに必要なパッケージを追加する
yum -y install compat-glibc-headers gcc make patch
# ソースコードとパッチを展開する
tar zxf ttyrec-1.0.8.tar.gz cd ./ttyrec-1.0.8/ tar zxf ../ttyrec_1.0.8-5.debian.tar.gz cat debian/patches/*.diff | patch
# SVR4系システム対応のオプションを追加する
cp -a Makefile Makefile.orig sed -i -e '/^DEFS= -DSVR4 -D_GNU_SOURCE$/s/$/ -I \/usr\/lib\/x86_64-redhat-linux5E\/include/' Makefile
# x86_64ではなく、i686システムの場合は差し替え
# sed -i -e '/^DEFS= -DSVR4 -D_GNU_SOURCE$/s/$/ -I \/usr\/lib\/i686-redhat-linux5E\/include/' Makefile
# setuidに対応する
sed -i -e '/if (\!command) {/i\\tif(seteuid(getuid())\!=0) abort();\n' ttyrec.c
# ログの上書きと追記を禁止する
sed -i -e '/if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) {/,/}/c\\tif ((fscript = fopen(fname, "r")) == NULL) {\n\t\tif ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) {\n\t\t\tperror(fname);\n\t\t\tfail();\n\t\t}\n\t}\n\telse {\n\t\tfclose(fscript);\n\t\tfail();\n\t}' ttyrec.c
# コンパイルする
make
# インストールする
install -o ttyrec -g ttyrec -m 4711 ./ttyrec /usr/local/ttyrec-1.0.8-5/bin/ install -o root -g root -m 0710 ./ttyplay /usr/local/ttyrec-1.0.8-5/bin/ install -o root -g root -m 0710 ./ttytime /usr/local/ttyrec-1.0.8-5/bin/
# ttyrec起動用スクリプトを作成する
cat << 'EOF' > /usr/local/ttyrec-1.0.8-5/etc/bash_ttyrec.sh if [ -z "${TTYRECLOG}" ] then export TTYRECLOG="/var/log/ttyrec/${USER}_$(/bin/date +%y%m%d%H%M%S)_$$" PATH=${PATH}:/usr/local/ttyrec/bin ttyrec "${TTYRECLOG}" exit 0 fi EOF
# bash起動時にttyrecを起動するスクリプトを作成する
# ttyrecのエラーによりログインできなくなることを回避するためrootはttyrecを起動しない
# 障害対応時はコンソールからrootログインで復旧すること
cat << 'EOF' > /etc/profile.d/ZZ_ttyrec.sh if [ ${UID} -ne 0 ] then . /usr/local/ttyrec/etc/bash_ttyrec.sh fi EOF
# ログの確認方法
# ttyplay /var/log/ttyrec/[USER_yymmddHHMMSS_PID]