Введение

Часть 10

Секреты, сессии и доверие: не каждое значение должно попадать в сценарий

Автоматизация становится опасной, когда любое полезное значение считается безобидным текстом. Пароли, закрытые ключи, файлы cookie и состояние авторизации должны обрабатываться иначе, чем пути, размеры изображений или названия таблиц.

Сначала определите класс значения, потом автоматизируйте

Путь, имя архива или ширина изображения — обычная конфигурация. Пароль, закрытый ключ, токен сессии или учётные данные базы могут дать доступ. Если складывать оба типа значений в один переносимый сценарий, сам сценарий становится секретом.

Перед сохранением значения задайте два вопроса: может ли оно дать доступ и готов ли я без опасений перенести этот файл в другой проект или показать его на проверке? Если нет — секрету не место в переносимом сценарии.

Окружение удобно смотреть, но оно не является хранилищем секретов

env специально маскирует значения с чувствительными именами. Это защита отображения, а не доказательство, что каждая переменная окружения безопасна или что секрет не лежит под неожиданным именем.

Смотрите только нужное пространство имён или значение. Не распространяйте снимки экрана и выгрузки всего окружения и не воспринимайте замаскированный экран терминала как разрешение публиковать реальную конфигурацию сервера.

env
env server
env request

Сессии и файлы cookie — состояние приложения, а не черновой текст

ses показывает иерархические данные PHP-сессии, а coo отдельно показывает доступные файлы cookie. Защищённое состояние авторизации и cookie PHP-сессии заблокированы для обычного экспорта и перезаписи.

Эта граница важна: данные сессии могут содержать идентификаторы, сведения об авторизации и временное состояние приложения. Смотрите только нужную часть, меняйте собственные пространства имён и не используйте сессию как удобный тайник для долговечных секретов.

ses -l
coo
coo -a

Хеш подтверждает совпадение; он не скрывает исходные данные

hash считает хеши и HMAC. Хеш хорошо отвечает на вопрос «изменились ли эти байты?» и подходит для фиксации идентичности архива или выпуска.

Хеширование — не шифрование. Если исходное значение легко перебрать, хеш не делает его конфиденциальным. HMAC нужен, когда проверка зависит от секретного ключа; шифрование — когда само содержимое должно оставаться недоступным для чтения без ключа.

hash -s "hello terminal"
hash

Шифрование защищает содержимое, пока защищён и ключ

enc использует аутентифицированное шифрование, скрытый ввод пароля и режимы работы с точным ключом. Сначала вызовите enc, чтобы увидеть возможности сервера; пароль, введённый через скрытый запрос, не попадает в видимую историю команд.

Зашифрованный файл рядом с незашифрованным ключом почти теряет смысл защиты. По возможности храните ключ и зашифрованные данные в разных границах доступа, заранее продумайте восстановление и проверьте расшифрование до удаления исходного открытого файла.

enc

Права файловой системы ограничивают доступ, но не заменяют криптографию

Режим вроде 0600 означает, что чтение и запись доступны только владельцу файла. Это полезно для локальных файлов ключей и закрытых экспортов, если хостинг действительно соблюдает права доступа UNIX.

Права доступа не защищают от владельца хостинг-аккаунта, резервных копий или скомпрометированного PHP-процесса. После mod используйте stat, чтобы увидеть реальный результат, и сочетайте права с подходящим хранилищем и моделью шифрования.

cd lil-playground
md trust
echo "example private note" > trust/note.txt -r
mod trust/note.txt -0600
stat trust/note.txt
hash trust/note.txt

Различайте очистку, удаление модуля и полное уничтожение

clear очищает только видимый журнал экрана. uninstall <module> удаляет один модуль расширения. kill -include удаляет необязательный слой интерфейса, kill -install — слой расширений, а обычный kill полностью удаляет терминал.

Эти действия не должны превращаться в одну механическую привычку. Перед разрушительной операцией назовите слой, который хотите убрать, и файлы, которые должны остаться. До запуска команды вы должны понимать, как вернуться к рабочему состоянию.

Визуальная очисткаclearТолько видимый журнал; файлы и модули остаются
Удаление модуляuninstall <module>Один модуль расширения с учётом зависимостей
Сброс интерфейсаkill -includeПостоянный или сессионный слой CSS и JavaScript
Сброс расширенийkill -installУстановленный слой расширений; Core остаётся
Полное удалениеkillСама установка lil-terminal

Сохраните это как сценарий

Сохраните это как trust-checkpoint.lil. Он создаёт только демонстрационные данные, задаёт ограниченные права, фиксирует метаданные и хеш. Обратите внимание, чего сценарий намеренно не автоматизирует: ввод пароля и ключи расшифровки остаются вне файла.

#lil
@install md echo mod stat hash
cd lil-playground
md trust
echo "example private note" > trust/note.txt -r
mod trust/note.txt -0600
stat trust/note.txt
hash trust/note.txt > trust/note.sha256 -r
stat trust/note.sha256