web-dev-qa-db-ja.com

パスワードを明示的に提供せずにbashスクリプトでファイルを暗号化する

次の手動プロセスを自動化したい。

現在、opensslを使用して一連のファイルを次のように暗号化しています。

CBCモードで256ビットAESを使用してfile.txtをfile.outに暗号化します

$ openssl enc -aes-256-cbc -salt -in file1 -out file1.enc

次に、パスワードの入力を求められます。パスワードは、ファイルの暗号化に使用されます。

復号化するとき、私はタイプします

$ openssl enc -d -aes-256-cbc -in file1.enc -out file

次に、パスワードの入力を求められます。ここでも、手動で入力します。

この暗号化/復号化のプロセスを自動化したいので、opensshにパスワードを提供する方法を見つける必要があります。

私の最初の考えは、ファイルからパスワードを読み取ることができるかどうかです(たとえば)?または、これを行うためのより良い方法はありますか?

また、パスワードファイルを表示できるユーザーを制限する必要があると思います。そうしないと、パスワードを使用するという目的全体が無効になります。特定のユーザーとしてbashスクリプトを実行し、そのユーザーだけにそのファイルの内容に対する読み取り権限を与えることを考えています。

これはその方法ですか?それとももっと良い方法がありますか?

もちろん、これはすべて、端末でユーザーpwdを入力せずに、さらに別の質問(つまり、別のユーザーとしてbashスクリプトを実行する方法)につながります...?

ところで、私はLinux Ubuntu10.0.4で実行しています

6
morpheous

man opensslを読む(特にセクションPASS PHRASE ARGUMENTS):

Several commands accept password arguments, typically using -passin 
and -passout for input and output passwords respectively. These allow
the password to be obtained from a variety of sources. Both of these
options take a single argument whose format is described below. If no
password argument is given and a password is required then the user is
prompted to enter one: this will typically be read from the current
terminal with echoing turned off.

   pass:password
             the actual password is password. Since the password is visible
             to utilities (like 'ps' under Unix) this form
             should only be used where security is not important.

   env:var   obtain the password from the environment variable var. Since 
             the environment of other processes is visible on
             certain platforms (e.g. ps under certain Unix OSes)
             this option should be used with caution.

   file:pathname
             the first line of pathname is the password. If the same 
             pathname argument is supplied to -passin and -passout
             arguments then the first line will be used for the input 
             password and the next line for the output password.
             pathname need not refer to a regular file: it could for 
             example refer to a device or named pipe.

   fd:number read the password from the file descriptor number. This 
             can be used to send the data via a pipe for example.

   stdin     read the password from standard input.

openssl enc-pass <arg>を受け入れます...したがって、上記のリストから引数を選択してください。例えば:

 echo -n "secret" | openssl enc -aes-256-cbc -salt \
        -in file1 -out file1.enc \
        -pass stdin
7
akira