Я использую SSSD для аутентификации пользователей в Linux на локальном сервере Active Directory (Windows). Он работает нормально, это моя конфигурация:
[sssd]
domains = my.domain
config_file_version = 2
services = nss, pam
[domain/my.domain]
ad_domain = my.domain
ad_server = my-dc.my.domain
krb5_realm = MY.DOMAIN
realmd_tags = joined-with-samba
cache_credentials = true
auth_provider = ad
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 = simple
simple_allow_groups = IT
Проблема в том, что у нас есть один пользователь, которому нужен zsh
. Поэтому я изменил атрибут loginShell пользователей на / usr / bin / zsh
. Это нормально работает при первом входе пользователя в систему. Но как только пользователь вошел в систему, и я сделал getent passwd username
, он говорит, что оболочка пользователя - / bin / bash
. Поэтому, когда пользователь выходит из системы и снова входит в систему, действительно bash
используется как оболочка.
Когда я выполняю sss_cache -u username
, оболочка снова устанавливается правильно, и пользователь получает правильная оболочка при входе в систему. Я не хочу отключать кеширование, потому что любой простой контроллера домена не должен влиять на вход в систему пользователей Linux.
Я попытался удалить default_shell
, но это изменило только то, что оболочка по умолчанию пуста, а не / bin / bash
, такое же поведение.
Поскольку другой ответ совершенно неверен, вот фактическое решение (изhttps://lists.fedorahosted.org/archives/list/sssd-users@lists.fedorahosted.org/thread/BXFRHRI5VCLTQNE565ZVGZTEGALSNNJY/):
Интересно, подключается ли SSSD к глобальному каталогу для некоторых поисков но не другие, что дает атрибуты POSIX как «удаленные», когда SSSD ищет информацию в GC и эффективно удаляет их из кеша.
Установка:
ad_enable_gc = false
в разделе[domain]
докажет, верна ли эта гипотеза.
Вот решение: отключите поиск в глобальном каталоге. Большое спасибо @Lennie , который предложил это в первую очередь, но я не сделал этого до сих пор.
Вы можете использовать значение по умолчанию в разделе nss.
[nss]
default_shell = /bin/bash
И переопределить с помощью override_shell = <ваша оболочка>
override_shell (string)
Override the login shell for all users. This option can be specified globally in the [nss] section or per-domain.
Edit1: для конкретных групповых изменений
[sssd]
config_file_version = 2
services = nss, pam
domains=DOMAIN_GROUP1,DOMAIN_GROUP2,DOMAIN
[nss]
default_shell = /bin/bash
[domain/DOMAIN_GROUP1]
id_provider = ad
ad_domain = mydomain.local
ad_server = mydc01.domain.local,mydc02.domain.local,mydc03.domain.local
# Restrict to group members
ldap_user_search_base = DC=domain,DC=local?subtree?(memberOf=CN=group1,OU=Groups,DC=domain,DC=local)
# Shell
override_shell = /shell/path/for/group1
# Homedir
override_homedir = /home/%u
#same way for other groups
[domain/DOMAIN_GROUP2]
..........
..........
..........
Надеюсь, это поможет.