PostgreSQL備份加密方法 原 薦

本文加密方式是在利用pg_dump備份出文件後直接利用openssl進行文件加密。

1、生產密鑰:
     利用各種參數進行建立公私密鑰,這裏利用輸入參數作爲密鑰生成的一部分,其他的可以手動添加,腳本如下:

[sure@localhost bin]$ cat createpem.sh
#!/bin/bash

data="$1"

openssl req -x509 -nodes -days 1000000 -newkey rsa:4096 -keyout backup_key.pem \
 -subj "/C=US/ST=Illinois/L=Chicago/O=IT/CN="${data} -out backup_key.pem.pub
這裏的backup_key.pem和 backup_key.pem.pub就是公司密鑰,名字可以修改。

2、加密腳本:
     將參數直接傳遞給pg_dump,然後進行加密,當第一個參數爲"encrypt"時,則進行加密,否則按照pg_dump本身的參數進行執行,腳本如下:

[sure@localhost bin]$ cat pg_dump.sh
#!/bin/bash

isencrypt=$1
database=$2
output=$3
pubpath=$4

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pubpath} ]
	then
		pubpath="${basepath}/backup_key.pem.pub"
fi

if [ ${isencrypt} == "encrypt" ]
	then
	${basepath}/pg_dump ${database} | openssl smime -encrypt -aes256 -binary -outform DEM -out ${output} ${pubpath}
else
	${basepath}/pg_dump $@
fi
這裏是利用公鑰進行加密的,第一個參數爲"encyrpt",作爲是否加密的標誌;
                                     第二個參數爲pg_dump原本的選項,不過要注意的是,如果是多個參數的話,需要用“”引起來;
                                     第三個參數爲輸出文件名;
                                     第四個參數爲公鑰,這裏可以允許用戶指定公鑰進行加密,不輸入,則默認爲當前目錄下的公鑰。
不加密,則和原來一致。

3、解密腳本:
    首先對加密文件進行解密,纔可以還原。腳本如下:

[sure@localhost bin]$ cat dencrypt_backup
#!/bin/bash

input=$1
output=$2
pripath=$3

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pripath=} ]
	then
		pripath="${basepath}/backup_key.pem"
fi

openssl smime -decrypt -in ${input} -binary \
  -inform DEM -inkey ${pripath} -out ${output}
輸入輸出文件名作爲參數,私鑰爲第三個參數,如上不輸入都會默認使用當前目錄下的密鑰文件。

以上就是本次PostgreSQL備份加密使用到的腳本,下面是一次完整的使用過程:

[sure@localhost bin]$ ./createpem.sh highgo
Generating a 4096 bit RSA private key
...................................................................................................................++
.........................................................++
writing new private key to 'backup_key.pem'
-----
[sure@localhost bin]$ ll backup_key.pem*
-rw-rw-r--. 1 sure sure 3272 Mar 25 09:30 backup_key.pem
-rw-rw-r--. 1 sure sure 1952 Mar 25 09:30 backup_key.pem.pub

[sure@localhost bin]$ ./pg_dump.sh -U syssso highgo > bak1.sql
Password: 
[sure@localhost bin]$ ./pg_dump.sh encrypt "-U syssso highgo" bak2.sql.encrypt /opt/db/20150423/bin/backup_key.pem.pub 
Password: 
[sure@localhost bin]$ ll bak*
-rw-rw-r--. 1 sure sure  604 Mar 25 09:31 bak1.sql
-rw-rw-r--. 1 sure sure 1321 Mar 25 09:32 bak2.sql.encrypt
[sure@localhost bin]$ ./dencrypt_backup bak2.sql.encrypt bak2.sql
[sure@localhost bin]$ ls bak2*
bak2.sql  bak2.sql.encrypt
[sure@localhost bin]$
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章