👌

systemd-credsでApacheのクレデンシャルを安全に管理する方法

に公開

systemd-credsでApacheのクレデンシャルを安全に管理する方法

はじめに

Webサーバーの運用において、データベースパスワードやAPIキーなどの機密情報の管理は常に頭の痛い問題です。平文でファイルに保存すると漏洩リスクがありますし、環境変数に設定するとプロセス一覧から見えてしまう可能性もあります。

そこで注目したいのがsystemd-credsです。これはsystemdの一部として提供されている、サービスのクレデンシャル(認証情報)を安全に管理するためのツールです。今回は特にApacheでの利用方法について詳しく解説します。

systemd-credsの基本

systemd-credsは、機密情報を暗号化して保存し、必要なときだけサービスに提供する仕組みです。これにより、設定ファイルに平文でパスワードを書く必要がなくなります。

基本的な使い方は以下の通りです:

# 暗号化
sudo systemd-creds encrypt --name="credential-name" "SecretValue" > credential-file.creds

# 復号化(確認用)
sudo systemd-creds decrypt credential-file.creds

しかし、上記のようなコマンドを直接実行すると、シェルの履歴にシークレット情報が残ってしまうという問題があります。

安全なクレデンシャル作成方法

より安全にクレデンシャルを作成するには、シェル履歴に機密情報が残らないようにする必要があります。以下に、ファイルを使用した安全な方法を紹介します。

ファイルからパスワードを読み込む方法(推奨)

この方法では、一時的なファイルを作成してパスワードを入力し、そのファイルから暗号化を行います。

# ステップ1: 一時的なファイルを作成して権限を制限(所有者のみ読み書き可能)
touch temp_pwd.txt
chmod 600 temp_pwd.txt

# ステップ2: エディタでファイルを開いてパスワードを入力
# (このステップではシェル履歴にパスワードが残りません)
nano temp_pwd.txt

# ステップ3: ファイルからパスワードを読み込んで暗号化
sudo systemd-creds encrypt --name="apache-db-password" temp_pwd.txt > apache-db-password.creds

# ステップ4: 一時ファイルを安全に削除
shred -u temp_pwd.txt  # ファイルを複数回上書きしてから削除

この方法のメリット:

  • シェル履歴にパスワードが残らない
  • エディタでパスワードを確認しながら入力できる
  • shredコマンドでファイルを安全に削除できる

Apacheで使用するための設定

クレデンシャルを作成したら、次はApacheのサービス設定に組み込みます。

1. サービスファイルの編集

Apacheのsystemdサービスファイルを編集します:

sudo systemctl edit apache2.service

以下の設定を追加します:

[Service]
LoadCredential=db-password:/path/to/apache-db-password.creds

2. Apache設定ファイルでの利用

Apacheの設定ファイルで環境変数として利用できます:

<VirtualHost *:443>
    ServerName example.com
    
    # データベース認証情報を環境変数として設定
    SetEnv DB_PASSWORD ${CREDENTIALS_DB_PASSWORD}
    
    # その他の設定...
</VirtualHost>

3. PHPなどのスクリプトからの利用

PHPスクリプトからは環境変数としてアクセスできます:

<?php
$dbPassword = getenv('DB_PASSWORD');
$dbConnection = new PDO('mysql:host=localhost;dbname=mydb', 'username', $dbPassword);
?>

運用上の注意点

クレデンシャルファイルの管理

暗号化されたクレデンシャルファイルは、適切な場所に保存しましょう:

# 専用ディレクトリの作成
sudo mkdir -p /etc/credstore
sudo chmod 700 /etc/credstore

# クレデンシャルファイルの移動
sudo mv apache-db-password.creds /etc/credstore/
sudo chmod 600 /etc/credstore/apache-db-password.creds

サービス再起動

設定を反映させるには、Apacheサービスを再起動します:

sudo systemctl daemon-reload
sudo systemctl restart apache2

その他の安全なクレデンシャル作成方法

ファイルからの読み込み以外にも、いくつかの方法があります:

標準入力からパスワードを読み込む

sudo systemd-creds encrypt --name="apache-db-password" - > apache-db-password.creds

このコマンドを実行するとパスワードを対話的に入力できます。

systemd-askpassを使用する

sudo SYSTEMD_CREDS_PASSWORD=$(systemd-ask-password "Enter Apache DB password:") systemd-creds encrypt --name="apache-db-password" - > apache-db-password.creds

まとめ

systemd-credsを使うことで、Apacheの認証情報を安全に管理できます。特にファイルを使った方法は、シェル履歴に機密情報が残らず、安全に運用できるおすすめの方法です。

システム管理者として、セキュリティを高めるためには、こうした小さな工夫の積み重ねが重要です。systemd-credsを活用して、より安全なWebサーバー運用を目指しましょう。

参考リンク

Discussion