要するに
- chronyd が起動できなくなった
- ls -Z で関連ファイルの権限設定に問題があることが分かった
- 権限には気をつけていたが,Z オプションで見られるSELinux が定める権限は知らなかったのでびびった
経緯
構築環境のサーバ(RHEL) で,時刻同期のためのサービス chrony が起動しなくなりました.
[root@ipXXXX ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/chronyd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since XX XXXX-XX-XX JST; 17s ago
... (code=exited, status=1/FAILURE)
...
Oct 09 hh:mm:ss ip-XXXX systemd[1]: Could not open configuration file /etc/chrony.conf
...
Oct 09 hh:mm:ss ip-XXXX systemd[1]: Failed to start NTP client/server.
...
/etc/chrony.conf ファイルが開けないとのことなので,権限まわりを確認してみるとこんなかんじ.
[root@ipXXXX ~]# ls -l /etc | grep chrony
-rw-r--r--. 1 root root XXXX Oct 9 hh:mm chrony.conf
-rw-r-----. 1 root chrony XXXX Aug 12 hh:mm chrony.keys
これだけ見ても問題なさそうだったので,これだけでは解決できなかった.
後日ls
コマンドの-Z
オプションを知り,
# ls -laZ /etc/chrony.conf
こう叩いてみると,
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /etc/chrony.conf
こうなっている.
正常に動いているサーバと比較してみると,このunconfined_u
に問題がありそう.正しくはsystem_u
となっていてほしいところ.
解消法
ls コマンドの “-Z” オプションは,ファイルに対してSELinux (外部からファイルへのアクセスを制御するモジュール) で設定されているユーザとかロールの情報を表示する.
どうもこの,ユーザがunconfined_u
になってしまう現象は,ファイルを他の端末から適当にコピーしてくると起こってしまったりする模様. 見に覚えがありすぎる.
これをSELinux の定めるデフォルトに戻すため,次のコマンドを実行.
# restorecon -F /etc/chrony.conf
数分待って,chrony のステータスを確認.
[root@ipXXXX ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri ... JST; 6s ago
動いてくた.
ちなみにrestorecon -F
を実行した直後は,まだステータス確認してもcould not open lockfile /var/run/chronyd.pid
というエラーが出ていた.pid ファイルの作成に時間が必要だったのかな.
教訓
権限むずかしい...