Иногда нужно сохранить пароль или токен на пару минут. Передать в скрипт, использовать в деплое, проверить подключение и не оставить его в history, tmp-файлах или с правами.
Сделаем временный файл, который доступен только владельцу и сам удалится.
Создаём безопасный файл
Сразу задаем строгие права и создаём уникальный файл:
umask 077
SECRET_FILE=$(mktemp /tmp/secret.XXXXXX)
umask 077 гарантирует, что файл будет доступен только владельцу.
mktemp создаёт файл атомарно и защищает от подмены в /tmp.
Права выставляются в момент создания.
Вводим секрет без history
Читаем данные напрямую из TTY и записываем в файл:
read -s SECRET
printf "%s\n" "$SECRET" > "$SECRET_FILE"
read -s не показывает ввод.
Переменная живет только в текущем shell.
В history ничего не попадет.
Автоудаление
Настроим удаление через 5 минут:
(sleep 300; shred -u "$SECRET_FILE") &
sleep задает задержку. shred -u перезаписывает и удаляет файл. Процесс уходит в фон, можно продолжать работу.
Даже если выйдешь из shell, удаление все равно произойдет.
Итог
Получаем временный файл с жесткими правами, без утечек в history и без мусора на диске.
LinuxCamp | #utils
