LoginSignup
4
5

More than 5 years have passed since last update.

NetBSDでNECのPostgreSQL暗号化ソフト「Transparent Data Encryption for PostgreSQL Free Edition」を動かしてみる(インストール編)

Last updated at Posted at 2015-06-16

NetBSDでNECのPostgreSQL暗号化ソフト「Transparent Data Encryption for PostgreSQL Free Edition」を動かしてみる(インストール編)

先々週くらいに、NECがPostgreSQL暗号化ソフトウェアをオープンソースで公開したというニュースがありました。

「データベースを暗号化する透過的暗号化機能」を提供するもので、データの暗号化と復号化は自動で行われるため、ユーザから見ると暗号化を意識せず透過的にデータを扱えます。

これは面白そうだと思ったので、さっそくNetBSDの環境で試してみました。

tdeforpgはRHEL 6.5+PostgreSQL-9.3を対象にしていますが、今回はNetBSD-6.1.5-amd64とPostgreSQL-9.3.9で試しています。とはいえ、NetBSD以外の環境でも若干の読み替えで対応できる手順になっているかと思います。

$ uname -a
NetBSD postgres 6.1.5 NetBSD 6.1.5 (GENERIC) amd64

"Transparent Data Encryption for PostgreSQL Free Edition"は長い名称なので、以降
は「TDE」と表記します。

カーネルのリビルド

まずはPostgreSQLのインストール、と行きたいところですが、NetBSDでPostgreSQLをビルドする場合、共有メモリとセマフォ関連の設定を変更する必要があります。

sysctlで設定変更できるようですが、今回はカーネルを再構築する方法で対応します(sysctlで対応する方がお手軽な方法です...)。

# sudo -i
# mount /dev/cd0a /mnt
# cd /cdrom/source/sets
# tar zxvf syssrc.tgz -C /
# cd /usr/src/sys/arch/amd64/conf
# cp -pi GENERIC POSTGRES
# (コンフィグファイルを修正する)
# diff -u GENERIC POSTGRES 
--- GENERIC     2012-08-16 00:32:59.000000000 +0900
+++ POSTGRES    2015-06-16 11:23:05.000000000 +0900
@@ -65,6 +65,12 @@
 # Note: SysV IPC parameters could be changed dynamically, see sysctl(8).
 options        SYSVMSG         # System V-like message queues
 options        SYSVSEM         # System V-like semaphores
+options                SHMMAXPGS=4096
+options                SHMSEG=256
+options                SEMMNI=256
+options                SEMMNS=512
+options                SEMMNU=256
+options                SEMMAP=256
 options        SYSVSHM         # System V-like memory sharing
 options        P1003_1B_SEMAPHORE      # p1003.1b semaphore support
# config POSTGRES 
Build directory is ../compile/POSTGRES
Don't forget to run "make depend"
# cd ../compile/POSTGRES
# make depend
# make
# make install

PostgreSQL,TDE関連の環境変数

PostgreSQLとTDE関連の環境変数をあらかじめ設定しておきます。以下のような内容を.bashrcに追加しておきます。

$ cat << _EOF >> ~/.bashrc
WORK_DIR=$HOME/work
##
## PostgreSQL,tdeforpg関連の環境変数
##
export PGHOME=/opt/postgresql-9.3.9
export PGDATA=${WORK_DIR}/db
export PGSRC=${WORK_DIR}/`basename ${PGHOME}`
export TDEHOME=${WORK_DIR}/tdeforpg
##
## インストールするPostgreSQLへのPATHを設定しておく
##
export LD_LIBRARY_PATH=${PGHOME}/lib:/usr/lib64
export PATH=$PATH:${PGHOME}/bin
export MANPATH=$MANPATH:${PGHOME}/share/man
_EOF
$ source ~/.bashrc

ソースコードの準備

PostgreSQLは9.3.9(9.3系の最新バージョン)を使います。tdeforpg(TDEのソースコード)はGitHubからcloneします。

$ cd ${WORK_DIR}
$ curl -O http://ftp.jaist.ac.jp/pub/postgresql/source/v9.3.9/postgresql-9.3.9.tar.gz
$ git clone https://github.com/nec-postgres/tdeforpg.git

PostgreSQLのビルドとインストール

GNU Makeのインストール

PostgreSQLのビルドにはGNU Makeが必要になるので、事前にpkg_addでインストールしておきます。

$ sudo -i pkg_add -v gmake
$ gmake --version 
GNU Make 4.1
Built for x86_64--netbsd
...中略...

PostgreSQLのインストールと設定

PostgreSQLのインストール

ここからPostgreSQLのビルドとインストールです。実験用なので不要と思われる機能は無効にしてconfigureを実行します。manを参照したいので、"gmake install-docs"を忘れずに実行します。

$ tar zxvf postgresql-9.3.9.tar.gz
$ cd postgresql-9.3.9
$ echo ${PGHOME}
/opt/postgresql-9.3.9
$ ./configure \
        --prefix=${PGHOME}   \
        --with-tcl=no        \
        --with-perl=no       \
        --with-python=no     \
        --with-gssapi=no     \
        --with-ldap=no       \
        --with-libxml=no     \
        --with-libxslt=no    \
        --without-zlib       \
        --without-readline   \
        --disable-largefile  \
        --with-pam           \
        --with-openssl
$ gmake
$ sudo mkdir -p ${PGHOME}
$ sudo chown fpig:users ${PGHOME}
$ gmake install
$ gmake install-docs  # manのインストール

pgcryptoのインストール

TDEから利用するため、PostgreSQL用の暗号関数を提供するモジュールであるpgcryptoもインストールします。

$ echo ${PGSRC}
/home/fpig/work/postgresql-9.3.9
$ cd ${PGSRC}/contrib/pgcrypto
$ gmake install

データベースの初期化

ここでデータベースの初期化とDB作成を行います。

$ echo ${PGDATA}
/home/fpig/work/db
$ initdb
$ pg_ctl start
$ createdb `whoami`

psqlでデータベースに接続できることを確認します。

$ psql
psql (9.3.9)
Type "help" for help.

fpig=# \q
$

pgcryptoの有効化

$ psql << EOF
> CREATE EXTENSION pgcrypto;
> EOF
CREATE EXTENSION

pg_available_extensionsビューでpgcryptoが利用可能になっていることを確認します。

$ psql
psql (9.3.9)
Type "help" for help.

fpig=# SELECT pg_available_extensions();
           pg_available_extensions            
----------------------------------------------
 (plpgsql,1.0,"PL/pgSQL procedural language")
 (pgcrypto,1.0,"cryptographic functions")
(2 rows)

fpig=# 

pgcryptoは「データベース毎にCREATE EXTENSIONする必要がある」点に注意してください(ハマりポイントです...)。

Transparent Data Encryption for PostgreSQLのビルドとインストール

TDEのビルド

以下の手順でTDEをビルドします(NetBSDではmakedencryption.shに一部修正が必要です)。

$ sudo mkdir /usr/lib64  # NetBSDには存在しないので作成する
$ sudo ln -s ${PGHOME}/lib/pgcrypto.so /usr/lib64/libpgcrypto.so
$ cd ${PGSRC}
$ ./configure \
        --prefix=${PGHOME}   \
        --with-tcl=no        \
        --with-perl=no       \
        --with-python=no     \
        --with-gssapi=no     \
        --with-ldap=no       \
        --with-libxml=no     \
        --with-libxslt=no    \
        --without-zlib       \
        --without-readline   \
        --disable-largefile  \
        --with-pam           \
        --with-openssl
$ cd ${TDEHOME}/SOURCES/data_encryption
$ sh makedencryption.sh 93 ${PGSRC}

NetBSD環境では、GNU Makeが"gmake"というコマンド名でインストールされるため、makedencryption.shを以下のように修正します。

--- a/SOURCES/data_encryption/makedencryption.sh
+++ b/SOURCES/data_encryption/makedencryption.sh
@@ -11,6 +11,14 @@
 PGVERSION=$1
 SPATH=$2

+#use "gmake" command if installed
+if [ ! -z "`which gmake`" ];
+then
+   MAKE=gmake
+else
+   MAKE=make
+fi
+
 cd $PGVERSION
 CDIR=`pwd`

@@ -21,8 +29,8 @@ then
 fi

 #build data_encryption
-make clean
-make PGSQL_SRC_PATH=${SPATH}
+${MAKE} clean
+${MAKE} PGSQL_SRC_PATH=${SPATH}
 mv data_encryption.so data_encryption${PGVERSION}.so
 ldd data_encryption${PGVERSION}.so

TDEのインストール

TDEをインストールします。手順ではそうしていませんが、data_encryption.soはPostgreSQLのlibに配置するのが良いのかもしれません。

$ sudo ln -s ${TDEHOME}/SOURCES/data_encryption/93/data_encryption93.so \
             /usr/lib64/data_encryption.so
$ cat <<_EOF >> ${PGDATA}/postgresql.conf
shared_preload_libraries='/usr/lib64/data_encryption.so'
_EOF

上記の後、PostgreSQLサーバを再起動します。再起動時に「loaded library "/usr/lib64/data_encryption.so"」のログが出力されていればOKです。

$ pg_ctl restart
...中略...
server stopped
server starting
$ LOG:  loaded library "/usr/lib64/data_encryption.so"

これでTDEを利用する準備ができました。

まとめ

Transparent Data Encryption for PostgreSQL Free EditionをNetBSDにインストールしてみました。次の記事ではTDEを設定してデータベース上から透過的暗号化を試してみます。

参考URL

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5