![SSSD: Как заставить пользователей в разных группах использовать разные оболочки](https://rvso.com/image/726391/SSSD%3A%20%D0%9A%D0%B0%D0%BA%20%D0%B7%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D0%B2%20%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85%20%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0%D1%85%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D0%B5%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8.png)
У меня есть Active Directory, работающий как поставщик идентификатора, доступа и аутентификации для моих серверов CentOS 7 с использованием sssd. Я следовал этомупочтадля того, чтобы пользователи из разных групп использовали разные оболочки при входе, но у меня есть некоторые проблемы. Вот мой sssd.conf
файл:
[sssd]
domains = dev, domain.local
config_file_version = 2
services = nss, pam
[nss]
default_shell = /bin/bash
[domain/dev]
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
ad_server = adserver.domain.local
id_provider = ad
access_provider = ad
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
override_shell = /bin/tcsh
ldap_user_search_base = cn=dev,ou=Security Groups,ou=Domain,dc=domain,dc=local #According to sssd-ldap man page ldap_user_search_filter is deprecated
[domain/domain.local]
ad_server = adserver.domain.local
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
Идея в том, что когда кто-то из группы dev входит в систему, оболочка будет tcsh, а когда входит кто-то другой, он использует bash. Проблема в том, что с этой конфигурацией я могу успешно войти в систему с помощью Smith, члена группы dev, и он успешно попадает в tcsh, но если я войду в систему с помощью John, также члена домена, но не члена dev, произойдет следующее:
- При проверке
/var/log/secure
я получаю сначала ошибку аутентификации от pam_unix, а затем успех от pam_sss - Первый пользователь входит как
john
и получает свою оболочку как tcsh (хотя это должен быть bash). Второй пользователь входит как[email protected]
и получает bash. Третий пользователь входит снова какjohn
и теперь он получает правильную оболочку (bash)
Видимо, sssd после проверки второго домена с FQDN кэширует оболочку пользователя и при третьем входе делает это правильно.
Какая правильная конфигурация для входа каждого пользователя в соответствующую оболочку?
ОБНОВЛЯТЬ:
Похоже, что иногда процесс входа проходит только через модули pam, а иногда через политики GPO sssd, взятые из Active Directory. Я пробовал отключать фильтр и перезапускать sssd несколько раз, и в одном из них я получил это в журнале:
Aug 28 15:42:43 co-proy-02 sssd[be[dev.domain.local]]: Warning: user would have been denied GPO-based logon access if the ad_gpo_access_control option were set to enforcing mode.
При отключенном фильтре пользователь Smith
из dev
групп успешно получает tcsh, но также и john
. При включенном фильтре оба получают bash.
ОБНОВЛЕНИЕ2
Видимо, есть пакет с именем sssd-tools
, в котором есть команда, которая позволяет вам переопределить оболочку любого отдельного пользователя, однако, после попытки этого решения я все еще не получаю соответствующего результата. Вот команда, но, по крайней мере, для меня, она не работает так, как должна:
sss_override user-add smith -s /usr/bin/sh
решение1
После долгих поисков и с помощью @ChristopheDrevet-Droguet с фильтром ou=Domain,dc=domain,dc=local?subtree?(memberOf=cn=dev,ou=Security Groups,ou=Domain,dc=domain,dc=local)
в качестве основы, единственное, чего не хватало, это дерева объектов для разбора, я имею в виду, в котором можно было бы найти пользователя.
sssd должен выглядеть следующим образом, чтобы это работало (по крайней мере, для меня):
[sssd]
domains = dev, domain.local
config_file_version = 2
services = nss, pam
[nss]
default_shell = /bin/bash
[domain/dev]
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
ad_server = adserver.domain.local
id_provider = ad
access_provider = ad
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
override_shell = /bin/tcsh
ldap_user_search_base = dc=domain,dc=local??(&(memberOf=cn=dev,ou=Security Groups,ou=Domain,dc=veritran,dc=local)(objectClass=*))
[domain/domain.local]
ad_server = adserver.domain.local
ad_domain = domain.local
krb5_realm = DOMAIN.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
ldap_user_search_base = dc=domain,dc=local??(&(memberOf=cn=other,ou=Security Groups,ou=Domain,dc=veritran,dc=local)(objectClass=*))