Коротко — можно. Есть два безопасных подхода:
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/).