見出し画像

Kubernetes の SYS_TIME ケーパビリティとは?— コンテナで時刻を変更する影響とリスク

コンテナの中で date --set コマンドを実行しようとして、「権限がありません」と怒られたことはありませんか? それ、SYS_TIME というケーパビリティが関係しているかもしれません。

Kubernetes で SYS_TIME を付与すると、コンテナ内でシステムの時刻を変更できるようになります。でも、それって本当に安全? 今回は SYS_TIME の仕組みとリスク、そして適用時の注意点について見ていきましょう。


1. そもそもコンテナの時刻はどう管理されているのか?

通常、コンテナ内では date --set のような システム時刻の変更 コマンドが使えません。それは、コンテナがホストのカーネルを共有している ためです。

コンテナのシステム時刻はホストと共有している

Docker や Kubernetes のコンテナは、独立した仮想マシンではなく、ホストの Linux カーネルを共有する軽量なプロセス です。そのため、コンテナ内で date --set などを実行すると ホストの時刻も変更されてしまう 可能性があります。

通常の Linux では、システムの時刻を変更できるのは root ユーザーだけですが、コンテナの場合は root ユーザーであってもデフォルトでは SYS_TIME ケーパビリティが削除されている ため、date --set は失敗します。


2. なぜ SYS_TIME はデフォルトで削除されているのか?

セキュリティやシステムの安定性を考えると、時刻変更がコンテナで制限されているのは合理的です。

(1) セキュリティリスク

もし悪意のあるコンテナが SYS_TIME ケーパビリティを持っていたら、ホストの時刻を勝手に変更して攻撃できる可能性があります。

  • ログの改ざん:
    → 攻撃者がホストの時刻を変更することで、ログのタイムスタンプを操作し、痕跡を隠す ことが可能。

  • 証明書の有効期限の問題:
    → ホストの時刻を変更すると、TLS 証明書の有効期限が狂い、通信が失敗する 可能性がある。

(2) システムの整合性

多くのシステムは 正しい時刻に依存 しています。

  • 時刻同期 (NTP) の破壊:
    → ntpd や chronyd などの時刻同期プロセスと干渉し、他のアプリケーションの挙動に影響 を与える。

  • 分散システムの問題:
    → Kubernetes クラスターや AWS などの分散環境では、各ノードの時刻がずれてしまうと 正しく動作しなくなる ことがある。


3. SYS_TIME を付与するとどうなるのか?

Kubernetes の Pod に以下の設定を追加すると、

securityContext:
  capabilities:
    add: ["SYS_TIME"]

そのコンテナ内のプロセスが時刻を変更できるようになります。例えば、通常 root 権限が必要な以下のコマンドも、一般ユーザーで実行可能になります。

date --set "2025-01-01 12:00:00"

ただし、この設定を適用すると ホストの時刻も変更される可能性がある ため、影響をよく理解しておく必要があります。


4. SYS_TIME を使わずにコンテナの時刻を変更する方法

「でも、どうしてもコンテナ内で時刻を変更したいんだ!」という場合、以下のような対策を考えましょう。

(1) SYS_TIME ケーパビリティを付与する

Kubernetes なら securityContext.capabilities.add を設定:

securityContext:
  capabilities:
    add: ["SYS_TIME"]

Docker なら --cap-add SYS_TIME を指定:

docker run --cap-add SYS_TIME ubuntu:22.04

注意: これを付与すると、ホストの時刻も変更されてしまう。


5. まとめ

通常、コンテナ内で date --set ができないのは、

  1. コンテナがホストのカーネルを共有しているため、コンテナの時刻変更 = ホストの時刻変更になってしまう

  2. 時刻変更はセキュリティリスクが高く、分散システムや証明書の問題を引き起こす可能性がある

  3. そのため、デフォルトでは SYS_TIME ケーパビリティが削除されている

もし SYS_TIME を付与するなら、セキュリティリスクを理解したうえで適用しよう。
今後 timens の正式サポートが進めば、コンテナごとに時刻を分離できるようになるかもしれないので、それを待つのもアリ。

システムの時刻は多くのアプリやサービスに影響を与えるもの。むやみに変えず、適切な方法で扱っていこう!

いいなと思ったら応援しよう!