Как запретить пользователю авторизоваться под одноимённой системной учётной записью?

Тестирую подключение Linux-сервера к Active Directory (AD). Сервер успешно добавлен в домен, и авторизация по учётным записям AD работает, но одновременно пропускается вход и под локальными системными пользователями с теми же именами. Можно ли как-то настроить систему так, чтобы при наличии учетной записи в AD вход по одноимённой локальной системной учётной записи блокировался, или придётся отключать/блокировать локальные учётные записи на уровне ОС? <br/> <br/> P.S. По возможности посоветуйте хорошие материалы/документацию по нюансам работы Linux в AD.
  • 29 апреля 2026 г. 8:01
Ответы на вопрос 2
Коротко — можно. Есть два безопасных подхода:

1) Предпочитать AD на уровне NSS/PAM (автоматически будет использоваться AD-учётка, локальная с тем же именем «перекрывается»).  
2) Явно блокировать/отключать локальные учётные записи (если вам так удобнее/безопаснее).

Детали и практические шаги

1) Предпочтение AD через NSS
- /etc/nsswitch.conf — порядок источников для passwd/group определяет, какая запись вернёт getpwnam/getgrnam. Если поставить AD-провайдер (sssd или winbind) до files, то при запросе имени сначала найдётся запись из AD и локальная с тем же именем «не увидится»:
  Пример (sssd):
  passwd:  sss files
  group:   sss files
  shadow:  files sss
  Аналогично для winbind: passwd:  winbind files

- После такого изменения проверяете:
  getent passwd username    # покажет запись, которая будет использована
  id username               # покажет uid/gid для выбранной записи

2) PAM — чтобы не было «отката» на локальную аутентификацию
- Даже при корректном NSS, PAM может сначала проверять pam_unix (локальные пароли). Нужно убедиться, что для служб входа (sshd, login, gdm и т.д.) pam_sss.so / pam_winbind.so идёт раньше pam_unix.so, или pam_unix настроен так, чтобы не давать доступ при наличии успешной проверки домена.
- Примерная логика в /etc/pam.d/sshd (упрощённо):
  auth  sufficient  pam_sss.so
  auth  required    pam_unix.so try_first_pass nullok_secure
  account required  pam_sss.so
  account required  pam_unix.so
  (точная конфигурация зависит от дистрибутива; на Debian/Ubuntu правят common-auth, на RHEL/CentOS — system-auth/sssd.pam)

Если pam_sss идёт первым и помечен как sufficient/required, локальная проверка не даст «обойти» доменную.

3) Явная блокировка локальных учётных записей
- Если хотите гарантированно запретить логин под локальной записью — можно заблокировать её паролем или shell:
  passwd -l localuser
  или
  usermod -s /sbin/nologin localuser
- Это надёжно, но требует управления локальными системными пользователями (иногда неудобно, если их много).

4) Альтернативы и тонкости
- SSSD: можно настроить access_provider = ad и фильтры (ad_access_filter), чтобы разрешать только нужных доменных пользователей.  
- Если в домене и на хосте есть одинаковые имена, лучше привести к единой политике (например, давать доменным пользователям префикс или соглашение об именах), чтобы избежать коллизий UID/GID и проблем с правами на файлы.
- Проверьте mkhomedir (pam_mkhomedir) — при отказе локальной учётки вы будете попадать на доменную и её домашнюю директорию/создание.
- На некоторых системах (особенно с winbind) есть опция winbind use default domain = yes, она тоже влияет на разрешение имён.

Как проверить, какие имена «дублируются»
Простой скрипт для поиска локальных пользователей, для которых система возвращает другой источник (AD):
while IFS=: read -r user rest; do
  if getent passwd "$user" | cut -d: -f1 | grep -qxv "$user"; then
    echo "$user — локальная запись перекрыта AD"
  fi
done < /etc/passwd

Рекомендуемая последовательность действий
1. Настройте nsswitch: sss/winbind перед files (passwd/group).  
2. Проверьте getent/id.  
3. Подправьте PAM: pam_sss / pam_winbind раньше pam_unix и везде, где нужно, отключите fallback на локальную аутентификацию.  
4. Тестируйте входы (sshd, консоль, sudo, etc.) и права (UID/GID).  
5. По необходимости блокируйте локальные учётные записи, которые не должны использоваться.

Полезные материалы (по запросу могу дать ссылки)
- Документация SSSD (man sssd.conf, SSSD guide от Red Hat)  
- Руководства по интеграции Linux и AD с realmd/sssd (Ubuntu, RHEL)  
- Samba/winbind — если используете winbind вместо sssd  
- PAM и NSS HOWTO (man pam, man nsswitch.conf)  

Если скажете, какой у вас дистрибутив и каким способом вы подключились к AD (sssd/realmd или winbind/samba), пришлю конкретные команды и примерные конфиги (nsswitch.conf и строки для /etc/pam.d/).
Если нужно именно разделить пространства имён — в sssd.conf ставь <code>use_fully_qualified_names = True</code> . Тогда AD-юзер логинится как user@DOMAIN, а просто user — это строго локальный. Часто это и есть правильное решение. <br/> <br/> Если хочешь именно заблокировать локальный аккаунт — <code>usermod -L имя</code> отрубает пароль (но SSH-ключ всё равно сработает), а <code>usermod --expiredate 1 имя</code> истекает сам аккаунт полностью. <br/> <br/> По документации — sssd.io, там нормально всё разжёвано.
Похожие вопросы