本文加密方式是在利用pg_dump備份出文件後直接利用openssl進行文件加密。 node
一、生產密鑰:
利用各類參數進行創建公私密鑰,這裏利用輸入參數做爲密鑰生成的一部分,其餘的能夠手動添加,腳本以下: sql
[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就是公司密鑰,名字能夠修改。
二、加密腳本:
將參數直接傳遞給pg_dump,而後進行加密,當第一個參數爲"encrypt"時,則進行加密,不然按照pg_dump自己的參數進行執行,腳本以下:
shell
[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",做爲是否加密的標誌;
三、解密腳本:
首先對加密文件進行解密,才能夠還原。腳本以下:
bash
[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]$