Я использую 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 кто предложил это в первую очередь, но я не делал этого до сих пор.