Знакомая многим администраторам сцена. Пользователю добавили доступ к ресурсу, всё сделали правильно, права прописаны, группы назначены, а доступа как не было, так и нет. Человек уверяет, что ничего не работает, администратор клянётся, что всё настроил. И оба по-своему правы. Права действительно выданы, но компьютер о них ещё не знает, потому что держится за старый невидимый пропуск, выписанный до изменений. Этот пропуск, или токен, и есть камень преткновения, о который спотыкается едва ли не каждый, кто менял права на лету.

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

Что такое токен доступа и откуда берётся рассинхрон

Когда пользователь входит в систему, она формирует для него токен доступа, своего рода удостоверение с печатями. В этом удостоверении перечислено, кто владелец, в какие группы безопасности он входит, какими привилегиями обладает. Дальше всякий раз, когда человек обращается к ресурсу, система смотрит не на актуальные настройки прав, а именно в этот заранее выписанный токен. Так быстрее: не надо при каждом обращении бегать к источнику истины и сверять членство в группах.

Рассинхрон возникает в тот момент, когда права меняются, а токен остаётся прежним. Допустим, администратор добавил пользователя в новую группу, дающую доступ к папке. В настройках всё верно, но токен, выписанный при входе, об этой группе не знает, ведь он создан раньше. Пользователь стучится в папку, система заглядывает в его удостоверение, не находит там нужной группы и отказывает. Снаружи это выглядит как сбой, хотя на деле всё работает строго по правилам, просто удостоверение устарело.

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

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

Просмотр текущих пропусков перед тем, как что-то сбрасывать

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

whoami /groups

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

Рядом живёт второй слой пропусков, билеты протокола Kerberos, которыми пользователь предъявляет себя сетевым ресурсам. Их перечень выводит отдельная команда, показывающая все билеты текущего сеанса с указанием, какому сервису каждый выдан и до какого времени действует:

klist

Сопоставляя вывод обеих команд, администратор видит полную картину пропусков: какие группы у пользователя в токене и какими билетами он расплачивается с ресурсами. Часто уже на этом этапе становится ясно, где затык. Привычка начинать с осмотра, а не с бездумного сброса, экономит время и не даёт сбросить лишнего там, где проблема вовсе не в токенах.

Сброс билетов и обновление прав без перезахода в систему

Самый радикальный способ обновить все пропуска это выйти из системы и зайти заново, ведь при новом входе выписывается свежий комплект удостоверений с актуальными правами. Но перезаход не всегда удобен: у пользователя открыты программы, идёт работа, и закрывать всё ради обновления прав не хочется. К счастью, билеты Kerberos можно сбросить и без выхода из системы, одной командой, которая уничтожает текущий кэш билетов:

klist purge

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

Чтобы убедиться, что обновление сработало, после сброса полезно снова заглянуть в состав групп. Если запустить проверку групп в свежем процессе, можно увидеть, подтянулись ли новые права. Тонкость в том, что уже запущенные программы продолжают пользоваться старым токеном, поэтому проверять обновление надо во вновь открытом окне, которое получит свежее удостоверение. Этот нюанс с новым процессом объясняет, почему иногда кажется, что сброс не помог: смотрели-то в старом окне, держащем прежний токен.

Слой сохранённых учётных данных и его очистка

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

cmdkey /list

Найдя отжившую запись, мешающую подключению, её удаляют адресно, после чего система при следующем обращении запросит актуальные данные:

cmdkey /delete:server

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

Системный сеанс и временные данные, которые тоже накапливаются

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

klist -li 0x3e7 purge

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

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

Практические сценарии и связь сброса с безопасностью

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

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

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

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

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