我在NetBSD上尝试运行NEC的PostgreSQL加密软件「Transparent Data Encryption for PostgreSQL免费版」(安装篇)
尝试在NetBSD上运行NEC的PostgreSQL加密软件”Transparent Data Encryption for PostgreSQL Free Edition”(安装指南)。
最近大约在两周前,有一则关于NEC发布PostgreSQL加密软件的开源新闻。
-
- Transparent Data Encryption for PostgreSQL
http://jpn.nec.com/tdeforpg/
NEC、国内初データベース暗号化ソフトウェアを無償公開
http://jpn.nec.com/press/201506/20150605_01.html
NEC、PostgreSQLを暗号化するソフトを無償公開
http://news.mynavi.jp/news/2015/06/08/096/
这个提供「数据库透明加密功能」的功能,数据的加密和解密是自动进行的,所以用户在操作数据时无需意识到加密过程,能够透明地处理数据。
因为我觉得这很有趣,所以我立刻在NetBSD的环境中尝试了一下。
-
- nec-postgres/tdeforpg
https://github.com/nec-postgres/tdeforpg/
尽管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系列)。我们将从GitHub上克隆tdeforpg(TDE的源代码)。
$ 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的步骤。由于它只是用于实验,因此我们将禁用不需要的功能并执行配置文件。为了参考手册,不要忘记执行”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
数据库初始化
在这里进行数据库初始化和创建数据库。
$ 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进行安装(这是一个容易踩坑的地方…)。
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””的日志输出,那就可以了。
$ pg_ctl restart
...中略...
server stopped
server starting
$ LOG: loaded library "/usr/lib64/data_encryption.so"
我已经准备好使用TDE了。
总结
我在NetBSD上安装了Transparent Data Encryption for PostgreSQL Free Edition。在接下来的文章中,我将设置TDE并尝试在数据库上进行透明加密。
请提供相关链接
-
- nec-postgres/tdeforpg
https://github.com/nec-postgres/tdeforpg/
Transparent Data Encryption for PostgreSQLとは(Manual(JP))
https://github.com/nec-postgres/tdeforpg/wiki/Manual(JP)
PostgreSQL
http://www.postgresql.org
https://www.postgresql.jp
http://ja.wikipedia.org/wiki/PostgreSQL
PostgreSQL 9.3文書(PostgreSQLグローバル開発グループ)
http://www.postgresql.jp/document/9.3/html/index.html
15.5. インストール後の設定作業
http://www.postgresql.jp/document/9.3/html/install-post.html
pgcrypto
https://www.postgresql.jp/document/9.3/html/pgcrypto.html
pg_available_extensions
https://www.postgresql.jp/document/9.3/html/view-pg-available-extensions.html
カーネルリソースの管理(共有メモリとセマフォ)
https://www.postgresql.jp/document/9.3/html/kernel-resources.html#SYSVIP