背景
bash
の SYSLOG_HISTORY
を導入し、作業の記録を syslog
へ残しておきたいために実施します。
作業ミスなどを遡るなど、大いに有用です。
準備
環境の構築
コンパイルをするために必要なパッケージを導入します。(sudo)
sudo yum -y install rpm-build texinfo bison ncurses-devel autoconf gettext gcc make
ソースコードの入手
Amazon Linuxではget_reference_sourceでソースパッケージを取得します。CentOSなどでは yum downloader –source などかな。
get_reference_source -p bash
ソースコードの展開
作業用ユーザにてソースコードを展開します。特に指定をしていない場合、~ 以下に rpmbuild/ というディレクトリが作成されてソースコードが展開されます。
$ rpm -ivh /usr/src/srpm/debug/bash-4.1.2-15.24.amzn1.src.rpm $ tree -d rpmbuild/ rpmbuild/ ├── SOURCES └── SPECS
パッチの適用
以下のパッチを適用します。makeの末尾に -DSYSLOG_HISTORY が追加されています。他の部分は変更の必要がありませんので、この部分のみの対応となります。
--- /home/ec2-user/rpmbuild/SPECS/bash.spec.old 2015-04-24 00:15:48.649314922 +0000 +++ /home/ec2-user/rpmbuild/SPECS/bash.spec 2015-04-24 00:16:43.845303142 +0000 @@ -165,7 +165,7 @@ # For -fwrapv option see https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow # Bash needs to be fixed. -make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS`" +make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS` -DSYSLOG_HISTORY" %check make check
構築
rpmbuildによる構築
LANG=C rpmbuild -ba ~/rpmbuild/SPECS/bash.spec
インスタンスサイズにもよりますが、しばらくするとパッケージが作成されます。
導入
作成されたパッケージを導入します。(sudo)
sudo rpm -Uvh rpmbuild/RPMS/x86_64/bash-*.rpm --force
おまけ
今後の yum update
で SYSLOG_HISTORY
なしのbashで更新されないように yum.conf
でbashの更新を除外対象にします。
もし脆弱性などで対処が必要な場合は自動ではできなくなるので手動で実施することになります。その際には改めてパッケージ作成から行うことで対応できます。
sudo -s echo 'exclude=bash*' >> /etc/yum.conf exit
元記事はこちらです。
「Amazon Linux(に限りませんがRPM系)のbashをSYSLOG_HISTORYに対応させる」