apt-get 的使用 https://blog.csdn.net/mosquito_zm/article/details/63684608
dpkg 的使用 https://blog.csdn.net/astraylinux/article/details/7039744
gpg2 通常是两个公司之间进行文件加密的常用工具,目的是防止文件泄漏。
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
GPG有许多用途,本文主要介绍文件加密。至于邮件的加密,不同的邮件客户端有不同的设置,请参考Ubuntu网站的介绍。
GPG2加解密步骤
1、查看系统是否安装gpg软件
rpm-qa│grep gnupg
显示如下,表示已安装;
gnupg2-2.0.10-6.el5_10
不同的系统可能使用的命令不一样,所以,要查看当前的系统型号: 命令: cat /etc/issue
安装文件之前最好是 root 命令。 sudo su 用来切换最高权限的名称。
如果是 Debian 系统,用上边的命令查看是否安装并不好使,需要使用如下命令。
dpkg-query -l | grep gnupg

2、如没有安装。请执行rpm –ivhgnupg2-2.0.10-6.el5进行安装 红帽子 可以 这么装。
其他的版本 可以 执行 安装 apt-get install gnupg2 进行安装。
3、生成key;
执行gpg2 --gen-key 按下图显示依次选择 1》加密位数(默认2048)》0(key永不过期)》y

4、然后系统会要求输入ID和mail地址,注释等

5、然后输入key的密码。建议使用复杂密码并请牢记此密码。以后所有文件都需此密码才能解密。选择<OK>

6、此时系统会让你移动鼠标产生随机数。至此key产生完成

7、gpg2 –K(此处为大写K)查看生成的key
8、导出公钥;将生成的liucheng.key公钥发给B公司
执行gpg2 --export -a liucheng > liucheng.key(test为刚才生成key时输入的用户ID)

9、同时会收到B的公钥。将公钥导入需要加密的服务器上
执行gpg2 --import liucheng.key
执行完成后。通过命令gpg2 –k(此处为小写k)查看公钥是否导入成功。如下图:
10、加解密命令:
解密:
gpg2 –d --passphrase 密码 –o /tmp/xxx$FILE
此处密码为之前生成key时输入的密码;/tmp/xxx为输出文件的路径;$FILE为需要解密的文件;
解密:gpg2 -d --batch --passphrase liucheng123 -o /home/liucheng/temp/me.txt /home/liucheng/temp/me.txt.gpp2
加密:
gpg2 -e -r USERID -o /tmp/xxx $FILE
/tmp/xxx为输出文件的路径;$FILE为需要加密的文件;USERID可通过gpg2 –k来查看。为红框显示部分。
加密: gpg2 -e -r liucheng -o /home/liucheng/temp/me.txt.gpp2 /home/liucheng/me.txt
批量解密文件:
#!/bin/bash
#cat /root/sftplist.txt|grep -v ^@ | while read Company Program GPGUSERID DATE;do
Company=$1
Program=$2
GPGUSERID=$3
dateymd=$(date -d ${4}day+%Y%m%d)
#合作方公钥
#B方私钥
GPGPASSPHRASE=
#
UPDIR=/alidata1/sftp/$Company/$Program/upfile/$dateymd
OUTDIR=/alidata1/sftp/$Company/$Program/outfile/$dateymd
RETURNDIR=/alidata1/sftp/$Company/$Program/returnfile/$dateymd
DOWNDIR=/alidata1/sftp/$Company/$Program/downfile/$dateymd
#创建目录
for i in {upfile,outfile,returnfile,downfile};do
if [ -d /alidata1/sftp/$Company/$Program/$i/$dateymd ];then
continue
else
mkdir -p /alidata1/sftp/$Company/$Program/$i/$dateymd
directory=/alidata1/sftp/$Company/$Program/$i
if [ $i == "upfile" -o $i == "downfile" ];then
chown -R $Company\_$Program\_test:sftpusers $directory
else
chown -R wjs_$Company\_$Program\_test:sftpusers $directory
fi
fi
done
#对文件加解密处理函数
#settle函数参数 $1-表示对文件加解密以及复制 $2-被处理的文件 $3-处理之后的文件
settle(){
case $1 in
decrypt)
gpg2 -d --batch --passphrase $GPGPASSPHRASE -o $3 $2 && mv $2 ${2}.bak;;
encrypt)
gpg2 -e -r $GPGUSERID --yes -o $3 $2 && mv $2 ${2}.bak;;
copy)
cp -r $2 $3 && mv $2 ${2}.bak;;
*)
echo -e "\033[5m\033[31mFiles are encrypted, decrypted, or just copie! \033[0m";;
esac
}
#判断文件的完整并处理
#dispose函数参数 $1-表示对文件做什么处理 $2-被处理文件目录 $3-处理之后所放文件目录
dispose(){
FileName=`find $2 ! -regex ".*\.bak$" -and -type f -exec basename {} \;`
for FILE in ${FileName}; do
TEMPNAME=`basename $FILE`
MDFILE1=`md5sum $2/$TEMPNAME|cut -c1-32`
sleep 3
MDFILE2=`md5sum $2/$TEMPNAME|cut -c1-32`
if [ -n $MDFILE1 ] && [ $MDFILE1 = $MDFILE2 ];then
settle $1 $2/$TEMPNAME $3/$TEMPNAME
chown -R $Company\_$Program\_test:sftpusers $UPDIR $DOWNDIR
chown -R wjs_$Company\_$Program\_test:sftpusers $OUTDIR $RETURNDIR
fi
done
}
dispose decrypt $UPDIR $OUTDIR &
#dispose copy $UPDIR $OUTDIR &
dispose encrypt $RETURNDIR $DOWNDIR &
#dispose copy $RETURNDIR $DOWNDIR &
#chown -R $Company\_$Program\_test:sftpusers $UPDIR $DOWNDIR
#chown -R wjs_$Company\_$Program\_test:sftpusers $OUTDIR $RETURNDIR