Назад | Перейти на главную страницу

SSSD хранит неправильную оболочку в кеше

Я использую 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-А так же поведение.

Вы можете использовать default в разделе nss.

[nss]
default_shell = /bin/bash

И переопределить с помощью override_shell = <your 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]
..........
..........
..........

Надеюсь, это поможет.

Поскольку другой ответ совершенно неверен, вот фактическое решение (из https://lists.fedorahosted.org/archives/list/sssd-users@lists.fedorahosted.org/thread/BXFRHRI5VCLTQNE565ZVGZTEGALSNNJY/):

Интересно, подключается ли SSSD к глобальному каталогу для некоторых поисков, но не для других, что дает атрибуты POSIX как «удаленные», когда SSSD просматривает информацию в GC и эффективно удаляет их из кеша.

Настройка: ad_enable_gc = false в [domain] раздел докажет, если эта гипотеза верна.

Итак, это решение, отключите поиск в глобальном каталоге. Большое спасибо @Lennie кто предложил это в первую очередь, но я не делал этого до сих пор.