博客
使用GPG加密MySQL数据库备份
- 2018年5月27日
- 作者: 茹憶
- 分类目录 MySQL
什么是GPG
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
安装GPG
[root@txcloud ~]# yum -y install gpgme
第一次运行,会创建相关运行目录和配置文件
[root@txcloud ~]# gpg
gpg: directory `/root/.gnupg’ created
gpg: new configuration file `/root/.gnupg/gpg.conf’ created
gpg: WARNING: options in `/root/.gnupg/gpg.conf’ are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg’ created
gpg: keyring `/root/.gnupg/pubring.gpg’ created
gpg: Go ahead and type your message …
查看帮助信息
#gpg –help
生成密钥
安装成功后,使用gen-ken参数生成自己的密钥。
gpg –gen-key
回车以后,会跳出一大段文字:
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
第一段是版权声明,然后让用户自己选择加密算法。默认选择第一个选项,表示加密和签名都使用RSA算法。
然后,系统就会问你密钥的长度。
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
密钥越长越安全,默认是2048位。
接着,设定密钥的有效期。
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
如果密钥只是个人使用,并且你很确定可以有效保管私钥,建议选择第一个选项,即永不过期。回答完上面三个问题以后,系统让你确认。
以上正确吗?(y/n)
输入y,系统就要求你提供个人信息。
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合成用户标识,如下所示:
“Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”
真实姓名:
电子邮件地址:
注释:
“真实姓名”填入你姓名的英文写法,”电子邮件地址”填入你的邮件地址,”注释”这一栏可以空着。
然后,你的”用户ID”生成了。
您选定了这个用户标识:
“Ruan YiFeng <yifeng.ruan@gmail.com>”
我的”真实姓名”是Ruan YiFeng,”电子邮件地址”是yifeng.ruan@gmail.com,所以我的”用户ID”就是”Ruan YiFeng <yifeng.ruan@gmail.com>”。系统会让你最后确认一次。
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?
输入O表示”确定”。
接着,系统会让你设定一个私钥的密码。这是为了防止误操作,或者系统被侵入时有人擅自动用私钥。
您需要一个密码来保护您的私钥:
然后,系统就开始生成密钥了,这时会要求你做一些随机的举动,以生成一个随机数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
几分钟以后,系统提示密钥已经生成了。
gpg: 密钥 EDDD6D76 被标记为绝对信任
公钥和私钥已经生成并经签名。
请注意上面的字符串”EDDD6D76″,这是”用户ID”的Hash字符串,可以用来替代”用户ID”。
这时,最好再生成一张”撤销证书”,以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。
gpg –gen-revoke [用户ID]
上面的”用户ID”部分,可以填入你的邮件地址或者Hash字符串(以下同)。
密钥管理
列出密钥
list-keys参数列出系统中已有的密钥.
gpg –list-keys
显示结果如下:
/root/.gnupg/pubring.gpg
————————
pub 2048R/4F82FC79 2018-03-13
uid ruzuojun <ruzuojun@139.com>
sub 2048R/1ECB9BEE 2018-03-13
第一行显示公钥文件名(pubring.gpg),第二行显示公钥特征(2048位,Hash字符串和生成时间),第三行显示”用户ID”,第四行显示私钥特征。
如果你要从密钥列表中删除某个密钥,可以使用delete-key参数。
gpg –delete-key [用户ID]
输出密钥
公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor参数可以将其转换为ASCII码显示。
gpg –armor –output public-key.txt –export [用户ID]
“用户ID”指定哪个用户的公钥,output参数指定输出文件名(public-key.txt)。
示例:
[root@txcloud .gnupg]# gpg –armor –output public-key.txt –export ruzuojun
类似地,export-secret-keys参数可以转换私钥。
gpg –armor –output private-key.txt –export-secret-keys
上传公钥
公钥服务器是网络上专门储存用户公钥的服务器。send-keys参数可以将公钥上传到服务器。
gpg –send-keys [用户ID] –keyserver hkp://subkeys.pgp.net
使用上面的命令,你的公钥就被传到了服务器subkeys.pgp.net,然后通过交换机制,所有的公钥服务器最终都会包含你的公钥。
由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。fingerprint参数生成公钥指纹。
gpg –fingerprint [用户ID]
输入密钥
除了生成自己的密钥,还需要将他人的公钥或者你的其他密钥输入系统。这时可以使用import参数。
gpg –import [密钥文件]
为了获得他人的公钥,可以让对方直接发给你,或者到公钥服务器上寻找。
gpg –keyserver hkp://subkeys.pgp.net –search-keys [用户ID]
正如前面提到的,我们无法保证服务器上的公钥是否可靠,下载后还需要用其他机制验证.
加密和解密
加密文件
假定有一个文本文件demofile.txt,怎样对它加密呢?
encrypt参数用于加密。
gpg –recipient [用户ID] –output demofile.txt.cry –encrypt demofile.txt
示例:
# gpg –recipient ruzuojun –output demofile.txt.cry –encrypt demofile.txt
recipient参数指定接收者的公钥,output参数指定加密后的文件名,encrypt参数指定源文件。运行上面的命令后,demofile.txt.cry就是已加密的文件,可以把它发给对方。
解密文件
对方收到加密文件以后,就用自己的私钥解密。
gpg –decrypt demofile.txt.cry –output demofile.txt
decrypt参数指定需要解密的文件,output参数指定解密后生成的文件。运行上面的命令,demofile.txt就是解密后的文件。
GPG允许省略decrypt参数。
gpg demofile.txt.cry
运行上面的命令以后,解密后的文件内容直接显示在标准输出。
加密数据库备份文件
备份时加密文件
使用xtrabackup备份时加密备份文件
innobackupex –kill-long-queries-timeout=10 –user=dbadmin –slave-info –host=’118.24.10.87′ –password=’123456′ –port=3306 –defaults-file=/home/mysql3306/my.cnf –stream=tar /home/backupdata/bak/ | gzip |gpg –always-trust -e -r ruzuojun -o //home/backupdata/bak/xtrade_fullbak_2018-03-13-22-38-33_118.24.10.87.3306.tar.gz.gpg
解密备份数据
[root@txcloud bak]# gpg -d xtrade_fullbak_2018-03-13-22-38-33_118.24.10.87.3306.tar.gz.gpg | tar ixzvf – -C /home/backupdata/bak/
加密历史备份数据
for file in `ls xtrade_fullbak_2017-12-*|grep -v gpg`;do echo $file;gpg –always-trust -e -r dbbackup $file;rm -f $file;done
参考文档
https://www.gnupg.org/howtos/zh/index.html
版权声明:本文为DBARUN原创文章,如需转载请注明本站作者及本文链接,DBARUN保留一切法律解释权。
本文链接:http://www.dbarun.com/mysql/use-gpg-encrypt-mysql-backup/
作者: 茹憶
