В коде две ошибки:
При использовании [... ]
для тестов разделите тесты на несколько [... ]
логическими операторами в -между:
while [ expression ] && [ expression ]; do
Вы можете использовать свой способ построения теста, если используете bash
и его[[... ]]
:
while [[ expression && expression ]]; do
... но, вероятно, он все равно будет более читабельным, если он будет разделен как
while [[ expression ]] && [[ expression ]]; do
по крайней мере, для более длинных или большего количества выражений. Только для арифметического теста -вы можете использовать ((... ))
в bash
и других оболочках, которые его поддерживают, например. (( arithmetic expression )) && (( arithmetic expression ))
. В ((... ))
вы также должны использовать <
, >
и т. д. вместо -lt
, -gt
и т. д.
Предполагая, что вы используете массивы bash
, индекс в массиве оценивается в арифметическом контексте. Это означает, что ${a[$d]}
можно записать как ${a[d]}
. Что еще более важно, ${a[$(d-1)]}
, вероятно, является ошибкой, поскольку он попытается запустить команду с именем d-1
. Вероятно, это должно быть ${a[d - 1]}
.
Судя по статье , найденной здесь, кажется, проблема устранена, файл sssd.conf теперь выглядит так...
[sssd]
domains = ucera.local
config_file_version = 2
services = nss, pam
[domain/ucera.local]
ad_domain = co.local
krb5_realm = CO.LOCAL
realmd_tags = manages-system joined-with-samba
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = False
default_shell = /bin/bash
ldap_id_mapping = False
ldap_user_uid_number = uidNumber
ldap_user_gid_number = gidNumber
ldap_group_gid_number = gidNumber
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad
default_domain_suffix = co.local
Изменения:
ldap_id_mapping = False
— это, я думаю, основное исправление, которое позволяет использовать идентификаторы AD posix ID, а не вычислять их на основе атрибута пользователей AD objectSID
ldap_..._...id_number =...
и установил их в соответствующие поля атрибутов в AD для пользователей. После выполнения части (1 )UID на машине не изменились. По сравнению с другими sssd -, использующими серверы, у которых не было этой проблемы, единственным отличием в sssd.conf было изменение (1 ). Я думаю, что на других машинах уже было ldap_id_mapping = False
, поэтому, когда пользователи AD впервые вошли в систему на этих машинах, они автоматически получили свои идентификаторы AD posix UID. На этом запутанном сервере идентификаторы UID уже были установлены неправильно, поэтому необходимо явно принудительно использовать атрибуты AD uidNumber
и gidNumber
. Затем перезапустите службу sssd.
Не очень хорошо разбираюсь в AD и SSSD, поэтому, если я что-то неправильно истолковал, оставьте комментарий, чтобы сообщить мне об этом.