CentOS 6で秘密情報をrootだけが読めるファイルに設定する

Webアプリで秘密情報などを環境変数から取得するようにすることがあります。

Apacheの設定ファイルで環境変数を定義すると、CLIからPHPスクリプトを実行した場合に再度別に環境変数を定義しないといけません。1か所で定義する方法を考えました。

まず、/etc/sysconfig/httpdに環境変数を追加します。

/etc/sysconfig/httpd

export ENV=production

このファイルはrootだけが読めるようにパーミッションを設定しておきます。

$ sudo chmod go-rwx /etc/sysconfig/httpd

次に、Apacheの設定でPHPに渡したい環境変数をPassEnvに指定します。

PassEnv ENV

これで、Web経由で実行されるPHPスクリプトでは$_SERVER['ENV']に値が渡されます。

CLIから実行する場合は、以下のようなshell script経由で実行します。

php.sh

#!/bin/sh

. /etc/sysconfig/httpd

su -s /bin/bash apache -c "php $*"

これで以下のように実行できます。

$ sudo ./php.sh index.php

Date: 2016/03/04

Tags: apache, php, cron, centos