공개/개인 키로 암호화하고 NAS에 저장하기 위해 openssl을 사용하려는 로그 파일이 많이 있지만 실패합니다.
내 로그 파일은 다음 경로에 있습니다.
/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"
'