このファイルは平文のまま置いておきたくないなーっていうようなファイルがたまにある。 例えば、何らかのトークンや個人情報などが書き込まれているもの。 そんなときは GNU Privacy Guard を使うとサクッと暗号化しておくことができて便利そう。 これは OpenPGP という暗号化ソフトウェアの仕様を実装したものだ。
今回使った環境は次の通り。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" $ uname -r 4.4.0-21-generic
下準備
まずは apt で GnuPG をインストールする。
$ sudo apt-get -y install gnupg2
次に、暗号化・復号する対象となるファイルを用意しておく。 これは、ただのテキストファイルにした。
$ cat << 'EOF' > greeting.txt Hello, World! EOF
暗号化する
早速、ファイルを暗号化してみよう。
gpg2 コマンドに -c オプションをつけて、暗号化したいファイルを指定する。
$ gpg2 -c greeting.txt gpg: directory '/home/vagrant/.gnupg' created gpg: new configuration file '/home/vagrant/.gnupg/dirmngr.conf' created gpg: new configuration file '/home/vagrant/.gnupg/gpg.conf' created gpg: keybox '/home/vagrant/.gnupg/pubring.kbx' created
上記を実行すると、暗号化に使うパスワードを 2 回聞かれるので入力しよう。
上手くいけば拡張子に .gpg のついたファイルができあがる。
$ ls greeting.txt greeting.txt.gpg $ file greeting.txt.gpg greeting.txt.gpg: GPG symmetrically encrypted data (AES cipher)
復号する
次は、先ほど暗号化したファイルを復号してみよう。
まずは、まぎらわしいので元の平文は削除しておく。
$ rm greeting.txt $ ls greeting.txt.gpg
そして、今回は何もオプションをつけずに gpg2 コマンドを実行して、引数には暗号化されたファイルを指定する。
$ gpg2 greeting.txt.gpg
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
すると復号されたファイルができあがる。
$ ls greeting.txt greeting.txt.gpg
中身を見ると、ちゃんと元のファイルに戻っている。
$ cat greeting.txt Hello, World!
ちなみに、上記を実行するとパスワードを聞かれずに復号される。 これは、どうやら暗号化したときにキャッシュ的なものがシステムに残るからのようだ。 残る先は ~/.gnupg ディレクトリの中のようなので、これを削除してから復号を試みるとちゃんとパスワードを聞かれる。
$ rm -rf ~/.gnupg/
CentOS 7 の場合
ちなみに、上記では Ubuntu 16.04 LTS を使っていたけど CentOS 7 でも同じように使える。
$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ uname -r 3.10.0-327.el7.x86_64
インストールに使うのが apt ではなく yum になるだけでパッケージ名は同じだ。
$ sudo yum -y install gnupg2