SSSD: 다른 그룹의 사용자가 다른 쉘을 사용하도록 강제하는 방법

SSSD: 다른 그룹의 사용자가 다른 쉘을 사용하도록 강제하는 방법

sssd를 사용하는 CentOS 7 서버의 ID, 액세스 및 인증 공급자로 작동하는 Active Directory가 있습니다. 나는 이것을 따라왔다우편다른 그룹의 사용자가 로그인할 때 다른 쉘을 사용하도록 하려면 몇 가지 문제가 있습니다. 내 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


아이디어는 개발 그룹의 누군가가 로그인할 때 쉘이 tcsh이고 다른 일부 민속 로그인이 bash를 사용한다는 것입니다. 문제는 이 conf를 사용하면 dev 그룹의 구성원인 Smith로 성공적으로 로그인할 수 있고 tcsh에 성공적으로 도달할 수 있다는 것입니다. 하지만 도메인의 구성원이지만 dev의 구성원이 아닌 John으로 로그인하면 다음과 같은 일이 발생합니다. :

  • 검토 중 /var/log/securepam_unix에서 먼저 인증이 실패하고 pam_sss에서 성공했습니다.
  • 첫 번째 사용자는 tcsh로 로그인하여 john해당 쉘을 tcsh로 가져옵니다(비록 bash여야 함). 두 번째로 사용자는 다음으로 로그인하여 [email protected]bash를 가져옵니다. 셋째, 사용자가 다시 로그인하면 john이제 올바른 쉘(bash)을 얻게 됩니다.

분명히 sssd는 FQDN으로 두 번째 도메인을 확인한 후 사용자 셸을 캐시하고 세 번째 로그인에서는 올바르게 수행합니다.
각 사용자를 해당 쉘에 로그인하기 위한 올바른 구성은 무엇입니까?

업데이트:
로그인 프로세스가 pam 모듈만 거치는 경우도 있고 Active Directory에서 가져온 SSD GPO 기반 정책을 거치는 경우도 있는 것 같습니다. 필터를 비활성화하고 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=*))

관련 정보