Linux + Active directory authentication + only letting certain groups login
I have some linux boxes that use Windows Active Directory authentication, that works just fine (Samba + Winbind). What I would like to do now though is only allow certain people or certain groups to login using Active Directory credentials. Currently anyone with a valid AD account can login. I want to limit this to only a few groups. Is this doable?
6 Answers 6
Assuming the groups are available to the Linux system, I recommend editing /etc/security/access.conf for Ubuntu, RedHat distributions (and their forks) and probably a bunch of others. This doesn’t require editing PAM files, and is a nicely standard place to do it. There are usually examples in the file, commented out.
Thanks, this is what I ended up using to do what I wanted to do, all the answers above where great but this is the one that worked best for me. I use the Samba file to lock down Samba and now I am using this access.conf file to lock down SSH logins.
I currently use the AllowGroups directive in /etc/ssh/sshd_config to limit who’s able to log in. Specify a one or more AD groups on that line, and those people will be the only ones able to log in.
Keep in mind that this only works if your users are only accessing the server remotely via ssh. If they’re singing in locally, you’ll need to find another solution.
(I’m talking about samba 3 here, no experience on samba 4 now.)
There is no need to edit those /etc/pam.d/xxx files. pam_winbind.conf is the file you want, it is usually located at /etc/security/pam_winbind.conf.
It is the configuration file of pam_winbind module, and it works for both CentOS/Redhat and Debian/Ubuntu. You can read the man page of pam_winbind.conf for reference.
# # pam_winbind configuration file # # /etc/security/pam_winbind.conf # [global] # turn on debugging ;debug = no # turn on extended PAM state debugging ;debug_state = no # request a cached login if possible # (needs "winbind offline logon = yes" in smb.conf) cached_login = yes # authenticate using kerberos ;krb5_auth = no # when using kerberos, request a "FILE" krb5 credential cache type # (leave empty to just do krb5 authentication but not have a ticket # afterwards) ;krb5_ccache_type = # make successful authentication dependend on membership of one SID # (can also take a name) # require_membership_of = SID,SID,SID require_membership_of = S-1-5-21-4255311587-2195296704-2687208041-1794 # password expiry warning period in days ;warn_pwd_expire = 14 # omit pam conversations ;silent = no # create homedirectory on the fly mkhomedir = yes
Реализация групповых политик
Active Directory в Linux-клиентах
Групповые политики – это набор правил и настроек для серверов и рабочих станций, реализуемых в корпоративных решениях. Реализация групповых политик требует тесной интеграции множества независимых модулей ОС. Рассмотрим особенности реализации поддержки групповых политик Active Directory в Linux-клиентах
Групповые политики как набор механизмов
Существует два основных вида так называемых групповых политик. Это политики для компьютеров и политики для пользователей. Прием пользователей обычно добавляют в группы, что вносит неоднозначность в то, о каких группах и политиках идет речь. Если о группах пользователей, то при чем тут компьютеры? Если об отдельных объектах пользователь или компьютер, то почему политики групповые? Так вот, кроме групп безопасности (в которые обычно включаются пользователи), в протоколе LDAP предусмотрена иерархия объектов, хранящихся в дереве каталогов (и в соответствующей иерархической базе данных). При этом объекты «пользователи» и «компьютеры» в этом дереве объектов могут быть созданы в разных контейнерах и могут переноситься из одного контейнера в другой. А группировка объектов, на которые распространяются групповые политики, прежде всего распространяется именно на расположение объектов в этих контейнерах. В Active Directory такие контейнеры принято называть организационными подразделениями (organizational units). За применение групповых политик отвечают клиенты. При этом даже серверы и сами контроллеры домена являются по отношению к настройкам в групповых политиках клиентами. И даже службы, которые обеспечивают работоспособность домена Active Directory, применяют настройки групповых политик, как клиенты. Например, настройки сложности и сроки действия пароля, а также другие параметры KDC (Key Distribution Center – службы, обеспечивающей централизованную аутентификацию) относятся к политикам безопасности, которые применяются из настроек в групповых политиках.
Особенности реализации групповых политик в Linux-клиентах
- политики, применяемые при входе пользователя – в Plugable Authentification Modules (PAM) на этапе аутентификации (PAM auth), смены пароля (PAM password), создания сессии (PAM session) и назначении групп (NSS initgroups);
- пользовательские политики, требующие административных привилегий (подключение сетевых каталогов, настройка сервера печати CUPS и любых других локальных сервисов);
- политики, требующие контекст графической сессии, выполняемые с пользовательскими привилегиями (настройка фона рабочего стола, дополнительные ярлыки на рабочем столе и т.п.).
В связи с этим применение групповых политик для на Linux-клиентах представляет собой задачу создания не только специальных программных средств, позволяющих «читать и применять», но и подготовки таких дистрибутивных решений, для которых применение конкретных групповых политик будет работать.
То есть модуль применения групповых политик на Linux-клиентах может быть полноценно интегрирован только в такое дистрибутивное решение, для которого он специально подготовлен.
Чтение и применение групповых политик Active Directory
Механизмы применения групповых политик в Active Directory предполагают, что ответственность за их чтение и применение лежит на клиентах. То есть в каждой версии очередного дистрибутива требуется учитывать особенности интерпретации обобщенных настроек, которые «прилетают» из групповых политик. Это в равной степени относится и к пользовательским политикам, и к политикам компьютеров.
На текущий момент наиболее полная реализация чтения групповых политик под Linux реализована только в рамках отдельных клиентов – в клиентах проекта samba (samba-gpupdate) и в PAM-модулях проекта sssd. Также ряд наработок доступен в репозиториях разработчика из Samba Team и сотрудника компании Suse Дейвида Малдера (https://github.com/dmulder). В целом задача чтения и применения групповых политик Active Directory для Linux-клиентов не имеет полноценного решения.
Классификация существующих групповых политик является ключевым шагом к тому, чтобы интегрировать их в текущие дистрибутивные решения Linux-клиентов |
Рассмотрим далее детальный разбор механизмов чтения и применения групповых политик Active Directory, который сложился в рамках проекта gpom (group policy object manager, https://github.com/altlinuxteam/gpom) для дистрибутивов ALT компании «Базальт СПО».
Пример последовательности чтения групповых политик, представленный на рис. 1, выполняется для политик компьютера (текущего узла, от имени которого проводится аутентификация по протоколу Kerberos). Она включает в себя следующий набор шагов:
- запрос списка SID(глобальных идентификаторов компьютеров, пользователей и групп), относящихся к данному узлу через список групп безопасности, в которые входит данный компьютер;
- построение (через запрос к LDAP-серверу) последовательности ссылок (GPLink) объектов групповых политик (GPO), привязанных к данному узлу;
- запрос набора групповых политик для каждой полученной ссылки за исключением тех, для которых нет специальных ограничений через явный отдельный запрос на атрибут ntSecurityDescriptor для каждого полученного объекта групповых политик.
Рисунок 1. Последовательность чтения групповых политик
В данной последовательности шагов один из важных моментов – необходимость отдельного запроса для атрибута ntSecurityDescriptor, а также формирование правильного порядка в списке полученных GPO.
Групповые политики как механизм затрагивают настройки операционной системы не как механизма для запуска приложений, а как специфичного дистрибутивного решения |
Рассмотрим далее детальный разбор последовательности действий по применению нескольких групповых политик (для объекта «компьютер» это может быть установка дополнительного программного обеспечения, для объекта «пользователь» – смена настроек рабочего стола или установка принтера). Цепочка действий по применению групповых политик представлена на рис. 2:
- для каждого допустимого GPO на клиенте проводятся проверка, фильтрация и отображение существующих политик на уже реализованные для данного клиента;
- чтение из общего системного сетевого каталога Sysvol (на уровне списка расширений групповых политик – GPE и на уровне настроек конкретных клиентских расширений – CSE) [2].
Рисунок 2. Последовательность применения групповых политик
Проект gpom разрабатывается для дистрибутивов на базе Sisyphus как открытый проект, распространяемый по свободной лицензии. Следующий шаг по включению данного механизма в дистрибутивы ALT предполагает дальнейший разбор и классификацию существующих групповых политик, включение дополнительных сервисов, которые позволят применять групповые политики без перезагрузки и выхода пользователя из системы, а также распределение различных видов политик в рамках соответствующих системных сервисов – например Restricted Groups [3] на уровне SSSD или дополнительного NSS-модуля.
В завершение хотелось бы отметить, что групповые политики как механизм затрагивают настройки операционной системы не как механизма для запуска приложений, а как специфичного дистрибутивного решения. Набор правил и настроек для одного дистрибутивного решения может быть совершенно неприменим для другого. Таким образом, классификация существующих групповых политик является ключевым шагом к тому, чтобы интегрировать в текущие дистрибутивные решения Linux-клиентов такого механизма, как групповые политики. Это не задача разработчиков отдельного проекта или даже продукта. Это задача разработчиков дистрибутивных решений.
Ключевые слова: групповые политики, Active Directory, серверы, контроллеры домена.