1. 経緯
そもそもntpのログなんてものはほとんどの場合で不要なのだが、やんごと無き理由により出力する必要に迫られた。
まぁこんなものはntp.confに適当に書けば動くだろうと踏んでいたんだが、唐突にSyslogにPermission deniedとか吐いてきやがったのでその対処を。
2. 環境
kernel:
linux-image-4.4.0-130-generic 4.4.0-130.156 (amd64 binary) in ubuntu xenial
ntp:
1:4.2.8p4+dfsg-3ubuntu5.9
3. 出力されたエラー
# /var/log/ntpstats/ntpd.log はログの出力先に指定していた奴
Cannot open logfile /var/log/ntpstats/ntpd.log: No such file or directory
4. 解決策
以下のようなスクリプトで動くはず。詳細は後述。
# ntp.conf
# 省略
# 末尾にこれを書く
logfile /var/log/ntpstats/ntpd.log
# setup.sh
#!/bin/bash
sudo bash -c "cat ntp.conf > /etc/ntp.conf"
sudo mkdir -p /var/log/ntpstats/
sudo apt-get install apparmor-utils -y
sudo aa-complain /usr/sbin/ntpd
sudo /etc/init.d/ntp restart
5. 解説
ポイントは以下
sudo apt-get install apparmor-utils -y
sudo aa-complain /usr/sbin/ntpd
筆者の環境の場合、ntpdはデフォルトでAppArmorというセキュリティ制限をかけるシステムに支配されていた。
AppArmorは例えばプロセスが読み込めるファイルに制限をかけたりするのだが、その動作には以下のようなモードがある
- Enforceモード
- プロファイルで許可された操作以外は絶対に許可しない
- Complainモード
- プロファイルで許可された操作以外もできるが、ログに記録される
今回のntpdはこのEnforceモードになってしまっていたため、新しく作るログファイルに記録できなくなっていた。
そのため aa-complain
コマンドでこれをComplainモードに書き換えている。
正直ntpはEnforceモードで無くても良いなと思ったのでこうしているが、もし超厳密にセキュリティを意識するならプロファイルに記述する形になると思う。