今回は特定フォルダ内のファイルを個別に圧縮&暗号化するBashスクリプトをご紹介。
挙動
Archiveフォルダに入れた複数ファイルを①gzipで圧縮し、②OpenSSLで暗号化し、③Encryptedフォルダに出力し、④処理済のオリジナルファイルはArchivedに移動させる。
用途
最近自宅にSambaサーバーを立てたのだが、重要なファイルはこれだけでは障害時に不安が残るので、AWSのS3ストレージ等に自動転送しておきたい。
その際に流出対策として今回暗号化の仕組みを作成した。
暗号化するコード
今回はパスワードもコード内に入れてしまう。
クラウド保存時の流出対策なので、ローカルで見えてしまうのはまぁ良しとする。
#!/bin/bash FILES="/home/thom/Test/Archive/*" TIMESTAMP=`date +'%Y%m%d%H%M%S'` PASSWORD="pass" for f in $FILES do echo "Encripting: $f" gzip -c $f | openssl enc -e -aes-256-cbc -pbkdf2 -iter 99999 -salt -k $PASSWORD -out /home/thom/Test/Encrypted/${TIMESTAMP}_$(basename -- $f).aes mv $f /home/thom/Test/Archived/ done
実行するとArchiveフォルダに入っているファイルが処理され、YYYYmmddHHMMSS_オリジナルファイル名.aesとしてEncryptedフォルダに保存される。
処理前のオリジナルはArchivedに移動される。
復号化するコード
これを実行するとEncryptedフォルダ内のファイルがDecryptedフォルダーに復号化される。
#!/bin/bash FILES="/home/thom/Test/Encrypted/*" PASSWORD="pass" for f in $FILES do echo "Decrypting: $f" openssl enc -d -aes-256-cbc -pbkdf2 -iter 99999 -salt -k $PASSWORD -in $f | gzip -d > /home/thom/Test/Decrypted/$(basename -- ${f%.*}) done
アーカイブと圧縮と暗号化について
Windows文化だとあんまり意識することなく、パスワード付きzipとして一緒くたにしているケースが多い。
本来はそれぞれ別の概念なので、軽く説明しておこうと思う。
アーカイブ
複数ファイルやフォルダ等を一つのファイルにまとめる機能。
Linuxだとtarコマンドが有名。
圧縮
特定の圧縮アルゴリズムを用いてファイルの容量を削減する機能。
Linuxだとgzipコマンドが有名。
Linuxでよく見かける.tar.gzという拡張子はtarでアーカイブした後にgzipで圧縮されているファイルということ。
暗号化
特定の暗号化アルゴリズムを用いてファイルの中身を第三者に知られないようにする機能。
Windowsのパスワード付きzipはツールを使えば比較的簡単に暗号化を破られると言われているので今回はOpenSSLというツールでAESというより強力な暗号化アルゴリズム使って暗号化した。
以上