Настройка оболочки входа в конфигурацию SSS для пользователей из Active Directory

Настройка оболочки входа в конфигурацию SSS для пользователей из Active Directory

Я пытаюсь определить разные оболочки входа для разных пользователей домена AD,как описано здесь. Цель состоит в том, чтобы запретить членам определенной группы входить в систему, разрешив им при этом выполнять SSH-туннелирование.

Ниже представлен файл /etc/sssd/sssd.conf. MYDOMAIN.GLOBAL — это домен по умолчанию, предоставляемый AD. Конфигурация ниже определяет тестовый домен MYDOMAIN_TEST.GLOBAL, которого нет в AD, как домен для этих ограниченных пользователей. (Это всего лишь конфигурация для тестирования: позже, в разделе домена MYDOMAIN_TEST.GLOBAL, он override_shell = /bin/zshбудет заменен на override_shell = /sbin/nologin.)

[sssd]
domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN.GLOBAL]
ad_server = ad.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
ldap_user_search_filter = (memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
id_provider = ad
simple_allow_groups = [email protected]
override_shell = /bin/bash

[domain/MYDOMAIN_TEST.GLOBAL]
ad_server = ad.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
ldap_user_search_filter = (memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
id_provider = ad
simple_allow_groups = [email protected]
override_shell = /bin/zsh

Участник MYDOMAIN.GLOBAL может войти в систему через SSH, в то время как участник MYDOMAIN_TEST.GLOBAL не может и получает сообщение об ошибке «Отказано в доступе, повторите попытку» или «Ошибка аутентификации».

В sssdфайлах журнала ошибок не обнаружено.

Почему это?

Должен ли MYDOMAIN_TEST.GLOBAL присутствовать в AD? Если да, то можно ли как-то обойти это и настроить sss с разными "локальными категориями" пользователей, чтобы делать то, что я хочу?

(Примечание: судя по всему, это можно сделать с помощью nlscd, т.к.на этот вопросиэтот другой вопрос, но для этого требуется сервер LDAP, а настройка его на использование AD — еще одна проблема.)

решение1

Это должно работать с более новыми версиями sssd:

[sssd]
domains = MYDOMAIN_ADMINS,MYDOMAIN_LIMITED,MYDOMAIN_ALL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN_ADMINS]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_admins,OU=Groupes,OU=Main Office,DC=company,DC=local)
id_provider = ad
override_shell = /usr/bin/pwd
override_homedir = /home/%u

[domain/MYDOMAIN_LIMITED]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_limited,OU=Groupes,OU=Main Office,DC=company,DC=local)
id_provider = ad
override_shell = /usr/bin/date
override_homedir = /home/%u

[domain/MYDOMAIN_ALL]
ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local
ad_domain = company.local  
ldap_user_search_base = DC=company,DC=local
id_provider = ad
override_homedir = /home/%u

Используется ldap_user_search_baseвместо ныне устаревшего (удалённого?) ldap_user_search_filter.

Я не знаю, правильно ли добавлять a simple_allow_groupsс ldap_user_search_baseфильтром или нет. Интересно, будет ли это работать только с simple_allow_groupsдирективой.

решение2

Благодаряsssd сопровождающиеЯ нашел ответ. Вот рабочая конфигурация, которая делает то, что мне было нужно, т. е. разрешает SSH-туннелирование, но не позволяет входить по SSH пользователям AD, которые являются членами AD LimitedGroup.

Обратите внимание, что член ограниченной группы должен подключаться по ssh как user@MYDOMAIN_TEST.GLOBAL, а не как [email protected], иначе ничего не получится.

Суть решения заключается в использовании доменного имени раздела SSSD вместо доменного имени AD в simple_allow_groupsдирективе. Обратите внимание, однако, что конфигурация работает и без строк access_provider = simpleи simple_allow_groups = .... Также возможно установить simple_allow_groups = groupбез use_fully_qualified_names = Trueдирективы, как сообщил пользователь в комментариях.

Также обратите внимание, что эта конфигурация использует ldap_user_search_baseвместо устаревшего ldap_user_search_filter.

Остальные параметры конфигурации приведены только для полноты картины, поскольку они уже были в файле конфигурации.

[sssd]
domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL
config_file_version = 2
services = nss, pam

[nss]
default_shell = /bin/bash

[domain/MYDOMAIN_TEST.GLOBAL]
ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
default_shell = /sbin/nologin
ad_server = ad.mydomain.global
ad_backup_server = ad2.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
krb5_realm = MYDOMAIN.GLOBAL
realmd_tags = manages-system joined-with-adcli 
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = simple
simple_allow_groups = LimitedGroup@MYDOMAIN_TEST.GLOBAL

[domain/MYDOMAIN.GLOBAL]
ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL)
default_shell = /bin/bash
ad_server = ad.mydomain.global
ad_backup_server = ad2.mydomain.global
ad_domain = MYDOMAIN.GLOBAL
krb5_realm = MYDOMAIN.GLOBAL
realmd_tags = manages-system joined-with-adcli 
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = simple
simple_allow_groups = [email protected]

Связанный контент