在 SSS 配置中為 Active Directory 中的使用者設置登錄 shell
我正在嘗試為 AD 域的不同使用者定義不同的登錄 shell,如此處所述。目的是拒絕特定組的成員登錄,同時允許他們進行 SSH 隧道。
下面是文件
/etc/sssd/sssd.conf
。MYDOMAIN.GLOBAL 是 AD 提供的預設域。下面的配置定義了一個測試域 MYDOMAIN_TEST.GLOBAL,它不在 AD 中,作為這些受限使用者的域。(這只是一個用於測試的配置:稍後,在 MYDOMAIN_TEST.GLOBAL 域部分中,override_shell = /bin/zsh
將被替換為override_shell = /sbin/nologin
。)[sssd] domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL config_file_version = 2 services = nss, pam [nss] default_shell = /bin/bash [domain/MYDOMAIN.GLOBAL] ad_server = ad.mydomain.global ad_domain = MYDOMAIN.GLOBAL ldap_user_search_filter = (memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL) id_provider = ad simple_allow_groups = AdminsGroup@MYDOMAIN.GLOBAL override_shell = /bin/bash [domain/MYDOMAIN_TEST.GLOBAL] ad_server = ad.mydomain.global ad_domain = MYDOMAIN.GLOBAL ldap_user_search_filter = (memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL) id_provider = ad simple_allow_groups = LimitedGroup@MYDOMAIN.GLOBAL override_shell = /bin/zsh
MYDOMAIN.GLOBAL 的成員能夠通過 SSH 登錄,而 MYDOMAIN_TEST.GLOBAL 的成員則不能並得到“權限被拒絕,請重試”或“身份驗證失敗”錯誤。
sssd
日誌文件不顯示任何錯誤。這是為什麼?
MYDOMAIN_TEST.GLOBAL 是否需要出現在 AD 中?如果是,是否有可能以某種方式繞過它並使用不同的“本地類別”使用者配置 sss 來做我想做的事?
(注意:顯然這可以用 nlscd 來完成,根據這個問題和另一個問題,但它需要一個 LDAP 伺服器,並且將其配置為使用 AD 是另一種蠕蟲。)
感謝sssd 維護者,我找到了答案。這是一個可以滿足我需要的工作配置,即允許 SSH 隧道但不允許 SSH 登錄到作為 AD LimitedGroup 成員的 AD 使用者。
請注意,受限組的成員必須 ssh as
user@MYDOMAIN_TEST.GLOBAL
,而不是 asuser@MYDOMAIN.GLOBAL
,否則它將不起作用。
simple_allow_groups
該解決方案的要點是在指令中使用 SSSD 部分域名而不是 AD 域名。但是請注意,該配置也可以在沒有行access_provider = simple
和simple_allow_groups = ...
. 正如使用者在評論中報告的那樣,也可以在simple_allow_groups = group
沒有指令的情況下進行設置。use_fully_qualified_names = True
另外,請注意,此配置使用
ldap_user_search_base
而不是 deprecatedldap_user_search_filter
。其他配置選項僅用於完整性,因為它們已經在配置文件中。
[sssd] domains = MYDOMAIN.GLOBAL,MYDOMAIN_TEST.GLOBAL config_file_version = 2 services = nss, pam [nss] default_shell = /bin/bash [domain/MYDOMAIN_TEST.GLOBAL] ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=LimitedGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL) default_shell = /sbin/nologin ad_server = ad.mydomain.global ad_backup_server = ad2.mydomain.global ad_domain = MYDOMAIN.GLOBAL krb5_realm = MYDOMAIN.GLOBAL realmd_tags = manages-system joined-with-adcli cache_credentials = False id_provider = ad krb5_store_password_if_offline = True ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = simple simple_allow_groups = LimitedGroup@MYDOMAIN_TEST.GLOBAL [domain/MYDOMAIN.GLOBAL] ldap_user_search_base = DC=MYDOMAIN,DC=GLOBAL?subtree?(memberOf=CN=AdminsGroup,OU=Groups,DC=MYDOMAIN,DC=GLOBAL) default_shell = /bin/bash ad_server = ad.mydomain.global ad_backup_server = ad2.mydomain.global ad_domain = MYDOMAIN.GLOBAL krb5_realm = MYDOMAIN.GLOBAL realmd_tags = manages-system joined-with-adcli cache_credentials = False id_provider = ad krb5_store_password_if_offline = True ldap_id_mapping = True use_fully_qualified_names = True fallback_homedir = /home/%u@%d access_provider = simple simple_allow_groups = AdminsGroup@MYDOMAIN.GLOBAL
這應該適用於較新版本的 sssd:
[sssd] domains = MYDOMAIN_ADMINS,MYDOMAIN_LIMITED,MYDOMAIN_ALL config_file_version = 2 services = nss, pam [nss] default_shell = /bin/bash [domain/MYDOMAIN_ADMINS] ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local ad_domain = company.local ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_admins,OU=Groupes,OU=Main Office,DC=company,DC=local) id_provider = ad override_shell = /usr/bin/pwd override_homedir = /home/%u [domain/MYDOMAIN_LIMITED] ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local ad_domain = company.local ldap_user_search_base = DC=company,DC=local?subtree?(memberOf=CN=unix_limited,OU=Groupes,OU=Main Office,DC=company,DC=local) id_provider = ad override_shell = /usr/bin/date override_homedir = /home/%u [domain/MYDOMAIN_ALL] ad_server = srv001.company.local,srv002.company.local,srv003.company.local,srv004.company.local ad_domain = company.local ldap_user_search_base = DC=company,DC=local id_provider = ad override_homedir = /home/%u
ldap_user_search_base
用於代替現在已棄用的(已刪除?)ldap_user_search_filter
。我不知道添加
simple_allow_groups
帶有ldap_user_search_base
過濾器的 a 是否正確。我想知道它是否僅適用於simple_allow_groups
指令。