我有一堆日志文件,我试图使用 openssl 用公钥/私钥对其进行加密并保存到我的 NAS,但失败了。
我的日志文件位于以下路径:
/var/SYSLOGS/hosts/archive
我的公钥和私钥在/etc/log-enc/
[root@NAG01 log-enc]# ls -l
total 8
-rw-r--r-- 1 root root 891 Jul 11 15:58 syslog_privalye_key.pem
-rw-r--r-- 1 root root 272 Jul 11 15:59 syslog_public_key.pem
现在我正在尝试执行以下命令如果我一一执行相同的命令,那么就没有问题。
for file in `find /var/SYSLOGS/hosts/archive/`
do
FILE_BASE=$(basename $file)
echo "$file=>/NFS/Nag01/syslogs/hosts/$FILE_BASE.enc"
openssl rsautl -encrypt -inkey /etc/log-enc/syslog_public_key.pem -pubin -in $file -out /NFS/Nag01/syslogs/hosts/$FILE_BASE.enc
done
这是错误日志
RSA operation error
140628568049480:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz=>/NFS/Nag01/syslogs/hosts/192.168.33.5.log-20160131.gz.enc
RSA operation error
140123978278728:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/app02.log-20160306.gz=>/NFS/Nag01/syslogs/hosts/app02.log-20160306.gz.enc
/var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz=>/NFS/Nag01/syslogs/hosts/192.168.34.8.log-20160227.gz.enc
RSA operation error
139777258493768:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/192.168.31.3.log-20160511.gz=>/NFS/Nag01/syslogs/hosts/192.168.31.3.log-20160511.gz.enc
这是原始文件。
[root@NAG01 log-enc]# ls -l /var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz
-rw-------. 1 root root 3569 Jan 31 04:16 /var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz
[root@NAG01 log-enc]# ls -l /var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz
-rw-------. 1 root root 2142 Feb 27 03:11 /var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz
答案1
这对我有用。
首先创建密钥
openssl req -x509 -nodes -newkey rsa:2048 -keyout private-key.pem -out public-key.pem
然后同样的循环
for file in `find /var/SYSLOGS/hosts/archive/`
do
FILE_BASE=$(basename $file)
echo "$file=>/NFS/Nag01/syslogs/hosts/$FILE_BASE.enc"
openssl smime -encrypt -binary -aes-256-cbc -in $file -out /NFS/Nag01/syslogs/hosts/$FILE_BASE.enc -outform DER public-key.pem
done
答案2
不要用于openssl
加密文件。它不是为此而设计的。 (openssl
其实不是设计的)你只是在黑暗中摸索。老虎笼子里。
GnuPG专为加密文件而设计。从您的发行版安装它。用于gpg --gen-key
生成新密钥。密钥存储在~/.gnupg
.用于gpg --export
从帐户导出公钥、gpg --export-secret-keys
导出密钥以及gpg --import
将其导入到另一个帐户。
要加密文件,请使用gpg -e /path/to/file
.要解密,请使用gpg /path/to/file.gpg
.
不解析输出find
, 使用find … -exec …
。并且始终在变量和命令替换周围使用双引号。也许您的文件现在没有特殊字符,但使用双引号不会造成任何损害,并且有一天会让您免于安全漏洞。
您的脚本还会以其他方式被破坏,例如尝试加密目录,从而导致虚假错误。从脚本的外观来看,您似乎不希望在 中找到子目录/var/SYSLOGS/hosts/archive/
,在这种情况下您不需要find
.
cd /var/SYSLOGS/hosts/archive/ &&
for x in *; do
gpg -e -o "/NFS/Nag01/syslogs/hosts/$x.gpg" "$x"
done
如果有子目录:
cd /var/SYSLOGS/hosts/archive/ &&
find . -type f -exec sh -c '
mkdir -p "${0%/*}" &&
gpg -e -o "/NFS/Nag01/syslogs/hosts/$0.gpg" "$0"
'