У меня есть куча файлов журналов, которые я пытаюсь зашифровать с помощью открытого / закрытого ключа с помощью 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
У меня это сработало.
Сначала создайте ключи
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
Не используйте openssl
для шифрования файлов. Он не предназначен для этого. ( openssl
на самом деле не предназначен ни для чего.) Вы просто возитесь в темноте. В клетке тигра.
GnuPG предназначен именно для шифрования файлов. Установите его из своего дистрибутива. Используйте gpg --gen-key
, чтобы сгенерировать новый ключ.Ключи хранятся в ~ / .gnupg
. Используйте gpg --export
для экспорта открытого ключа из учетной записи, gpg --export-secret-keys
для экспорта секретного ключа и gpg --import
, чтобы импортировать его на другой аккаунт.
Чтобы зашифровать файл, используйте gpg -e / путь / к / файлу
. Для расшифровки используйте 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"
'