我在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

广告
将在 10 秒后关闭
bannerAds