Где пользователи могут безопасно создавать временные файлы?

Если вы используете bash, вы можете использовать скрипт ~/.bash_logoutдля шифрования файла журнала scriptс помощью gpg или чего-то подобного.

.bash_logoutнеобходимо знать имя файла журнала. Например, вместо того, чтобы просто запустить script filename, запустите функцию myscript, определенную в вашем .bashrc.

function myscript() {

  # Very primitive option handling. This really needs to pass any script
  # command-line options on to script.
  # Left as an exercise for the reader and the getopts documentation :)
  if [ -n "$1" ] ; then
    SCRIPT_FILENAME="$1"
  else
    SCRIPT_FILENAME="$USER-$(tty)-$(date +%s)"
  fi
  readonly SCRIPT_FILENAME
  export SCRIPT_FILENAME

  script "$SCRIPT_FILENAME"
}

А затем в файле выхода.bash _:

  if [ -n "$SCRIPT_FILENAME" ] && [ -e "$SCRIPT_FILENAME" ] ; then
      gpg --batch --yes  -r 'YOUR-EMAIL-OR-ID' -e "$SCRIPT_FILENAME"
      shred "$SCRIPT_FILENAME" # or any other file secure-erase tool.
      rm -f ""$SCRIPT_FILENAME"
  fi

ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ:Это делает вашу систему уязвимой ко всему, (например. исходный сценарий ), который может установить переменную SCRIPT _FILENAME в среде вашей оболочки. Злоумышленник может установить его для любого файла, к которому у вашего идентификатора пользователя есть доступ для записи. (Конечно, злоумышленник может просто перезаписать этот файл, если он может запустить что-либо от вашего имени.)

Этого можно избежать, установив $SCRIPT_FILENAMEи сделав его доступным только для чтения в вашей ~/.bashrc, а не в функции myscript. Это сделало бы невозможным использование другого имени файла с функцией myscript.

Или вы можете хранить все свои машинописные тексты в одном каталоге (, например./home/username/typescripts/). Затем сценарий выхода.bash _может проверить, что:

  • имя файла начинается с абсолютного пути к этому каталогу,
  • имя файла не заканчивается на.gpg
  • в имени файла нет ../
  • имя файла не является символической ссылкой
  • количество инодов имени файла = 1
  • и т. д.

перед шифрованием, измельчением и удалением.

ДРУГОЕ ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ:

ОСТОРОЖНО. НЕ ИСПОЛЬЗУЙТЕ ПРИМЕРЫ КОДА ДАЖЕ НА СОБСТВЕННЫЙ РИСК.МОИ ПРИМЕРЫ ТОЛЬКО ДЛЯ ИДЕИ.

В то время как небольшие части этого были протестированы по отдельности, это не было проверено как полная, функционирующая система. Этот ответ НЕ предназначен для предоставления полного решения. Он предназначен для того, чтобы предоставить вам идеи для самостоятельного изучения и реализации.

2
09.11.2021, 08:28
1 ответ

Подходящим местом для создания временных файлов¹ является и всегда был каталог, указанный переменной окружения TMPDIR, с /tmpв качестве запасного варианта. Если в системе есть расположение для временных файлов, отличное от /tmp, установка TMPDIRопределяет, как она сообщает об этом расположении.

В сценарии оболочки это ${TMPDIR:-/tmp}, хотя обычно вы должны вызвать команду mktempи позволить ей решить.

¹ Конечно, я не говорю о временных файлах, которые должны находиться в определенном каталоге, например, потому что они будут автоматически перемещены на место после того, как их содержимое будет готово.

6
09.11.2021, 09:04

Теги

Похожие вопросы