![SSSD: 다른 그룹의 사용자가 다른 쉘을 사용하도록 강제하는 방법](https://rvso.com/image/726391/SSSD%3A%20%EB%8B%A4%EB%A5%B8%20%EA%B7%B8%EB%A3%B9%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EB%8B%A4%EB%A5%B8%20%EC%89%98%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8F%84%EB%A1%9D%20%EA%B0%95%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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/secure
pam_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=*))