元のファイル権限を失うことなくgpg / gnupgを使用してファイルを復号化する方法は?

元のファイル権限を失うことなくgpg / gnupgを使用してファイルを復号化する方法は?

現在のファイルセットを自動的に暗号化して復号化しようとしています。現在使用している暗号化の場合:

gpg --batch --recipient [RECIPIENT] --encrypt-files [FILES]

復号化にほぼ同じように使用します。

gpg --batch --decrypt-files [FILES]

ただし、暗号化および復号化プロセス中に元のファイル権限が失われます。

$ gpg --batch --recipient aram --encrypt-files foo
$ ls -l foo*
-rw------- 1 aram aram foo
-rw-r--r-- 1 aram aram foo.gpg

$ rm foo && gpg --batch --decrypt-files foo
$ ls -l foo*
-rw-r--r-- 1 aram aram foo
-rw-r--r-- 1 aram aram foo.gpg

暗号化中はこれに満足し、ファイル権限を手動で設定できます。ただし、復号化プロセス中に、特定のファイル(SSHキーなど)は、適切な権限なしで機能を使用してセキュリティリスクを引き起こします。

一括復号化中にファイル権限を保存するメカニズムはありますか?

もちろん、ファイルを繰り返して権限を読み、パスワードを復号化し、権限をリセットすることもできます。しかし、これは一括復号化の目的を失います。


gnupg.orgには4年が経過して以来、多くの活動が行われていない公開問題があります。https://dev.gnupg.org/T2945

ベストアンサー1

〜のように@abそして@フロストスーツ提案、ファイルをtarファイルにラップして暗号化することはオプションです。

ただし、元のファイル構造を復号化せずにアクセスできるようにしたいです。現在、私は一括復号化後にファイル権限をソートするアプローチをとっています。これは、復号化されたファイルがすでにディスクにあるときに権限を並べ替えるという利点があります。

gpg --batch --decrypt-files $files

for encrypted in $files ; do
  decrypted=${encrypted%.gpg}
  chmod --reference="$encrypted" -- "$decrypted"
done

もちろん、復号化された各ファイルの後にソートすることも可能です。

for encrypted in $files ; do
  gpg --decrypt-files "$encrypted"

  decrypted=${encrypted%.gpg}
  chmod --reference="$encrypted" -- "$decrypted"
done

復号化されたファイルが暗号化されたファイルよりも多くの権限を持たないようにするには、一時ダミーファイルを使用して強制的にgpg上書きできます。

for encrypted in $files ; do
  decrypted=${encrypted%.gpg}

  touch "$decrypted" && chmod --reference="$encrypted" -- "$decrypted"
  gpg --yes --decrypt-files "$encrypted"
done

暗号化後の権限の調整にも同じメカニズムを使用できます。パフォーマンステストを実行しておらず、オプションの1つが速いかどうかはわかりません。


私はこの答えをすぐに受け入れません。たぶん誰かがこれより良い解決策を思いつくかもしれません。

おすすめ記事