envchainとは
秘匿情報を[環境変数]に入れるのを、多少安全にしてくれるツールでC言語で実装されている。
インストール方法
$ git clone https://github.com/sorah/envchain.git $ cd envchain $ yum install readline-devel libsecret-devel $ make cc -c -Wall -Wextra -ansi -pedantic -std=c99 `pkg-config --cflags libsecret-1` -o envchain_linux.o envchain_linux.c cc -o envchain envchain.o envchain_linux.o -lreadline `pkg-config --libs libsecret-1` $ make install install -d /usr/./bin install -m755 ./envchain /usr/./bin/envchain
Usage
./envchain version 1.0.1 Usage: Add variables ./envchain (--set|-s) [--[no-]require-passphrase|-p|-P] [--noecho|-n] NAMESPACE ENV [ENV ..] Execute with variables ./envchain NAMESPACE CMD [ARG ...] List namespaces ./envchain --list Options: --set (-s): Add keychain item of environment variable +ENV+ for namespace +NAMESPACE+. --noecho (-n): Enable noecho mode when prompting values. Requires stdin to be a terminal. --require-passphrase (-p), --no-require-passphrase (-P): Replace the item's ACL list to require passphrase (or not). Leave as is when both options are omitted.
使ってみる
setで環境を指定して入れたい変数を引数に入れることで変数をセットすることができる。その後はenvchainの引数としてセットした環境とコマンドを実行することでその変数がセットされた状態でコマンドを実行することが可能となる。
$ envchain --set aws AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY aws.AWS_ACCESS_KEY_ID: aaaa envchain: secret_password_store_sync failed with 0: Cannot autolaunch D-Bus without X11 $DISPLAY aws.AWS_SECRET_ACCESS_KEY: bbbb
仕組みは結構シンプルで機密情報を含む環境変数をmacOSのKeychainに保存し、コマンドを実行するときにそれを復号してくれるみたいな仕組み。実行箇所でsetenvを読んでexecvpでコマンドを実行する。
static void envchain_exec_value_callback(const char* key, const char* value, void *context) { (void)context; /* silence warning */ setenv(key, value, 1); }