ports/security/portaudit は make install すると /usr/local/etc/periodic/security/410.portaudit をインストールし、毎日 Ports Collection のセキュリティ監査ファイルを自動で最新に更新し、インストール済の全ての Ports/Packages のセキュリティ脆弱性を検査してくれるとてもありがたいツールです。
がしかし、私の環境は jail 内からは一切外にコネクションを張りに行けないようにフィルタリングしており、 jail 内の監査ファイルが最新に更新されず、 Ports/Packeages の検査も意味なしになってしまいます。(監査ファイルの取得は fetch(3) を使っているため FTP or HTTP 通信です)
そのため、親環境から jail の Ports/Packages の検査をするようにしました。というメモ。
当初 410.portaudit を直接いじろうかと考えましたが、 portupgrade のたびに上書きされるのは勘弁していただきたいので、 410.portaudit をコピーして 415.portaudit_jail として追加しました。同じ /usr/local/etc/periodic/security/ に置いておけば periodic daily で実行されます。
・ /usr/local/etc/periodic/security/415.portaudit_jail
#!/bin/sh -f
# rc.conf の jail 関連設定を読み込む必要あり。
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
source_rc_confs
fi
# なければ実行不要。
if [ -z ${jail_list} ]; then
exit 0
fi
if [ -r /etc/defaults/periodic.conf ]; then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
rc=0
case "${daily_status_security_portaudit_enable:-YES}" in
[Nn][Oo])
;;
*)
/usr/local/sbin/portaudit -X "${daily_status_security_portaudit_expiry:-2}" || rc=$?
if [ $rc -lt 2 ]; then
echo
echo "Checking for packages with security vulnerabilities in jail:"
echo
# jail の数だけ portaudit を繰り返し。
for i in ${jail_list}
do
echo "-- ${i} --"
eval j=\$jail_${i}_rootdir
ls ${j}/var/db/pkg | sed 's|/$||' \
| xargs /usr/local/sbin/portaudit \
|| rc=$?
done
fi
;;
esac
exit "$rc"
これで AM3:01 、親環境の periodic daily - security run output メールに結果が記述されます。多い日も安心。