LoginSignup
0

More than 3 years have passed since last update.

posted at

ntpのlogを出力しようとしたらPermission deniedって言われたときの話

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モードで無くても良いなと思ったのでこうしているが、もし超厳密にセキュリティを意識するならプロファイルに記述する形になると思う。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0