# Безопасность (/ru/docs/gcal/security)

Общее для всех CLI WireCat — хранилище ключей, разрешения, MCP и то, что никогда не попадает в журнал, — описано на
[общей странице о безопасности](/llms.mdx/docs/ru/security/content.md). Здесь только то, что относится именно к `gcal`.

`gcal` хранит настройки в `config.json`, а состояние — в папках, которые показывает `gcal doctor`. Он обращается только
к Google и просит доступ на чтение к Календарю и к вашему адресу электронной почты. `session start --grant write`
добавляет события, а `--grant sharing` — управление тем, кто видит календарь; больше ничего.

Агент, подключённый через `gcal <profile> mcp serve`, может менять, кто видит ваш календарь, не спрашивая вас. После
`--grant sharing` он может открыть календарь любому адресу, сделать его общедоступным или убрать кого-то из доступа.
Он может вызвать и метод, который передаёт календарь другому аккаунту; этот метод работает только для администратора
Google Workspace и только если у входа есть разрешение, которое `gcal` не запрашивает. Через MCP некому ответить на
вопрос, поэтому `ask` разрешает эти действия. Агент не может заставить Google отправить письмо человеку, которому он
открыл доступ: для этого нужен `sharing.notify`, а он в `deny`. Но открыть доступ молча, с
`--send-notifications false`, агент всё равно может. Чтобы управление доступом оставалось за вами, выполните
`gcal personal config set permissions.api.calendar.acl deny` или войдите без `--grant sharing`. Очистка календаря
агенту никогда не предлагается.

Вход Google хранится в системном хранилище ключей под службой `gcal-cli`, по одной записи на профиль. В этой же записи
лежат ID и секрет вашего клиента OAuth, поэтому для обновления входа файл клиента больше не нужен. Google считает, что
секрет клиента Desktop app не конфиденциален, но `gcal` всё равно никогда его не выводит. Ни одна команда, ошибка,
журнал или запись запуска не показывает токен или секрет клиента; адрес страницы входа не содержит ни того, ни другого.
`session end` удаляет запись.

С `session start --credential-storage file` та же запись попадает в `credentials.json` в папке состояния `gcal`, с
правами 600: любой, кто может читать ваши файлы от вашего имени, может прочитать и вход. Используйте этот вариант,
только если хранилище ключей не работает.

`gcal` не принимает файл клиента OAuth, который могут читать другие пользователи компьютера. Адрес электронной почты
аккаунта сохраняется в папке состояния `gcal`, доступной для чтения только вам, чтобы `session status` мог ответить без
сети.

Запись запуска хранит командную строку в том виде, как вы её ввели, поэтому `gcal runs show` показывает, что было
запущено. Секрет при этом сохраняется как `[redacted]`: параметр с именем вроде token или password, пароль в ссылке,
длинная непрозрачная строка. Номер телефона заменяется на `[redacted]` внутри введённого слова, включая текст
сообщения: номер, записанный с «+» и кодом страны, или от 11 до 15 цифр подряд, так что длинный ID такой длины тоже
скрывается. Чтобы не хранить ни одного введённого слова, выполните `gcal personal config set record_input false`.

Секрет распознаётся и по внешнему виду — в записи запуска и в сохранённом сообщении об ошибке: токен известного
формата (GitHub, OpenAI, Slack, AWS, Stripe, npm и подобные), учётные данные `Bearer`, случайная на вид строка из 20 и
более символов и случайная на вид последовательность из 20 и более шестнадцатеричных символов в нижнем регистре,
например шестнадцатеричный ключ или полный хеш коммита. Значение после имени секрета тоже скрывается, будь то после
`=`, `:` или пробела: `password=`, `API_TOKEN=`, `password hunter2`, `pin 1234`. Некоторые секреты похожи на обычные
слова и остаются: значение из одних букв после имени секрета и пробела (`pin this message` остаётся),
шестнадцатеричный ключ в верхнем регистре, короткий хеш коммита или UUID, короткий пароль, введённый без имени
секрета перед ним, и секрет внутри ссылки или пути к файлу, если он не известного формата и не стоит после имени
секрета.

`config.json` сохраняется доступным для чтения только вам (`0600`), а его папка создаётся только для вас (`0700`).
Файл или папка, созданные старой версией, могут быть открыты другим пользователям компьютера: `gcal doctor` выводит
каждый такой путь в `files.problems` и печатает `chmod`, который это исправляет. В Windows это не проверяется. Об
уязвимости сообщайте так, как описано в [SECURITY.md](https://github.com/WireCatLabs/gcal-cli/blob/main/SECURITY.md).
