80 lines
5.8 KiB
Markdown
80 lines
5.8 KiB
Markdown
---
|
||
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>,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= "<новый>"`.
|