綾小路龍之介の素人思考

[dash] umask 066 のススメ

新規作成されるファイルのパーミッションを設定する内部コマンド umask をうまく使おう

例えば秘密鍵などの隠しておきたい情報を取り扱う場合に、予め umask 066 としておくことで、chmod するまでの間に情報流出する危険性を防ぐ。umask はファイルの新規作成時にのみ適用されるので、既存ファイルのパーミッションを変えるものではない。すなわち単純に鍵作成コマンドを実行する前に umask と chmod をやっておこうということです。

# umask 066
# chomod \
	0600 \
	/etc/ipsec.d/private/caprivatekey.der \
;
# ipsec \
	pki \
	--gen \
	--type rsa \
	--size 4096 \
	--outform der \
> /etc/ipsec.d/private/caprivatekey.der \
;

シェルスクリプト的には、出力するファイルを予め作っておいて、パーミッションを適切なものにする関数を事前に呼び出す。

$ cat --number test.sh
     1  #!/bin/dash
     2  set -eux;
     3
     4  mkdir_touch () {
     5          local _FILE="${1}"
     6          local _DIRNAME="$(
     7                  dirname \
     8                  "${_FILE}" \
     9          )";
    10          if ! test -d "${_DIRNAME}"
    11          then
    12                  mkdir \
    13                          --parents \
    14                          "${_DIRNAME}" \
    15                  ;
    16          fi
    17          touch \
    18                  "${_FILE}" \
    19          ;
    20  }
    21
    22  sensitive_file_set () {
    23          local _FILE="${1}"
    24          if test -e "${_FILE}";
    25          then
    26                  chmod \
    27                          0600 \
    28                          "${_FILE}" \
    29                  ;
    30          else
    31                  local _UMASK="$(umask)";
    32                  if test "${_UMASK}" = "0066";
    33                  then
    34                          mkdir_touch \
    35                                  "${_FILE}" \
    36                          ;
    37                  else
    38                          (
    39                                  umask \
    40                                          066 \
    41                                  ;
    42                                  mkdir_touch \
    43                                          "${_FILE}" \
    44                                  ;
    45                          )
    46                  fi
    47          fi
    48  }
    49
    50  sensitive_data_wrapper () {
    51          local _FILE="${1}";
    52          shift;
    53          sensitive_file_set \
    54                  "${_FILE}" \
    55          ;
    56          ${@} \
    57          > "${_FILE}" \
    58          ;
    59  }
    60
    61
    62  sensitive_data_redirection () {
    63          local _FILE="${1}"; shift;
    64          sensitive_file_set \
    65                  "${_FILE}" \
    66          ;
    67          ${@} \
    68          > "${_FILE}" \
    69          ;
    70  }
    71
    72  sensitive_data_command () {
    73          ls -la;
    74          echo \
    75                  'private data' \
    76          ;
    77  }
    78
    79  sensitive_data_command1 () {
    80          local _FILE="${1}"; shift;
    81          sensitive_file_set \
    82                  "${_FILE}" \
    83          ;
    84          echo \
    85                  'sensitive data command1' \
    86          | tee \
    87                  "${_FILE}" \
    88          ;
    89  }
    90
    91  sensitive_data_command_function () {
    92          sensitive_data_command \
    93          ;
    94  }
    95
    96  alias sensitive_data_command_alias='sensitive_data_command hoge';
    97
    98  main () {
    99          sensitive_data_command1 \
   100                  'path_to_sensitive_file.txt' \
   101          ;
   102          sensitive_data_redirection \
   103                  'path_to_sensitive_file.txt' \
   104                  sensitive_data_command \
   105          ;
   106          sensitive_data_redirection \
   107                  'path_to_sensitive_file.txt' \
   108                  sensitive_data_command_function \
   109          ;
   110          sensitive_data_redirection \
   111                  'path_to_sensitive_file.txt' \
   112                  sensitive_data_command_alias \
   113          ;
   114  }
   115
   116  main;
   117
   118  exit 0;

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-10-08T15:56:19+09:00
  2. Modified: 2010-10-08T15:56:19+09:00
  3. Generated: 2018-09-20T23:09:21+09:00