ttyrecでLinuxの操作ログを記録する ♡

セキュリティのために操作ログを取得したいが、商用の操作ログ取得ソフトは高いのでオープンソースの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]
タイトルとURLをコピーしました