--- title: MMFB — Effector Saver Agent не стартует, .\Администратор залочен date: 2026-05-28 tags: [mmfb, lionart, effector-saver, windows-service, decision] status: resolved --- # MMFB / LionART 1C — Effector Saver Agent не стартует, `.\Администратор` залочен ## Контекст [[../projects/mmfb/lionart-1c|VM 100 pve LionART]] (`WIN-70M2VEJIKEF`, 10.253.1.240, Win Server 2022). Служба `efsaveragent` (Effector Saver Agent, `C:\Program Files\Effector Saver\fagent.exe`) в Stopped/Auto, не стартует. ## Диагноз Цепочка Event Log → SCM: ``` 7038 Службе "efsaveragent" не удалось войти в систему с именем ".\Администратор" и текущим паролем, поскольку произошла ошибка 7000 Сбой при запуске службы "Effector Saver Agent" ``` Это повторялось каждую минуту в течение последних минут. SCM хранит пароль учётки отдельно от LSA — пароль `.\Администратор` менялся (или Effector ставили со старой парой), а SCM-секрет не обновили. Дополнительно: попытки SCM × мои WinRM-пробы залочили учётку. ```powershell # Через LogonUser API: LogonUser SERVICE : False (err=1909) # ERROR_ACCOUNT_LOCKED_OUT LogonUser INTERACTIVE : False (err=1909) LogonUser NETWORK : False (err=1909) # Через ADSI: $u = [ADSI]"WinNT://./Администратор,user" $u.IsAccountLocked → True $u.BadPasswordAttempts → 10 ``` ## Решение (порядок важен) ```powershell # 1. Заглушить SCM, чтобы он перестал каждую минуту ломиться с неверным паролем sc.exe config efsaveragent start= disabled sc.exe stop efsaveragent # 2. Разблокировать учётку (Set-LocalUser не имеет lockout-поля → через ADSI) $u = [ADSI]"WinNT://./Администратор,user" $u.IsAccountLocked = 0 $u.SetInfo() # 3. Проверить пароль через LogonUser(LOGON32_LOGON_SERVICE=5) — тот же путь, что использует SCM. # Если False — не пиши пароль в SCM, иначе сразу опять залочишь. # Если True — пароль валидный, прошиваем: sc.exe config efsaveragent obj= ".\Администратор" password= "<актуальный_пароль>" sc.exe config efsaveragent start= auto sc.exe start efsaveragent ``` После старта: - `efsaveragent` в Running, PID 9104, fagent.exe, 28 MB - Новых 7038/7000 — нет - Аккаунт остаётся разлоченным ## Уроки - При **7038** не паникуй с lockout: сначала **остановить службу** (или переключить на disabled), потом разблокировать. - При WinRM-failed-login проверяй lockout первым делом (через `[ADSI]"WinNT://./,user"` поле `IsAccountLocked`) — не подбирай пароль вслепую, иначе добиваешь счётчик. - `Set-LocalUser` не умеет снимать lockout — только ADSI или `net user`-с-новым-паролем. - Не доверяй `BadPasswordAttempts: 0` после разблока — этот счётчик не сразу обнуляется; смотри сам `IsAccountLocked`. ## Рецидив 2026-06-28 (та же причина, подтверждена) Снова: `efsaveragent` Stopped/Auto, `.\Администратор` залочен (BadPwd=10). Серия 7038/7000: 25.06 15:12, 25.06 15:24, 28.06 12:14. Heartbeat в `fagent.log` оборвался 25.06 ~15:05 → **бэкапы не шли ~3 дня (25.06 → 28.06)**. Восстановление тем же playbook (disable→stop→unlock→LogonUser(SERVICE)→pin→start). Ключевое: `LogonUser(SERVICE)` с паролем `OL260380eg` вернул **True** — то есть пароль учётки **верный**, расходился именно SCM-секрет. Значит первопричина закрыта: **пароль `.\Администратор` меняли (вероятно при настройке RDP+2FA) без обновления службы** → SCM-секрет устарел → lockout-шторм. Итог: служба Running, PID 10488. ## Постоянный фикс (ещё не применён — нужен выбор Олега) Каждая ротация пароля `.\Администратор` будет ронять службу и локать учётку. Варианты, чтобы развязать службу с ротируемым паролем: 1. **LocalSystem** — без пароля, никогда не локается. Безопасно **только если** Effector пишет бэкап на локальный диск. Если назначение — UNC под админ-кредами, LocalSystem пойдёт на сеть как computer-account и потеряет доступ. Назначение хранилища лежит в `C:\ProgramData\Effector Saver\esdata.db` (SQLite), в `fagent.log` его нет. 2. **Выделенная учётка `.\Effector Saver`** (локальная, уже существует) с непротухающим паролем + `SeServiceLogonRight`. Перед сменой run-as — узнать назначение бэкапа (esdata.db / fmanager UI). До тех пор: при любой смене пароля админа сразу `sc.exe config efsaveragent obj= ".\Администратор" password= "<новый>"`.