
我正在嘗試為 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 = [email protected]
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 = [email protected]
override_shell = /bin/zsh
MYDOMAIN.GLOBAL 的成員可以透過 SSH 登錄,而 MYDOMAIN_TEST.GLOBAL 的成員則無法透過 SSH 登錄,並且會收到「權限被拒絕,請重試」或「驗證失敗」錯誤。
日誌sssd
檔案沒有顯示任何錯誤。
這是為什麼?
MYDOMAIN_TEST.GLOBAL 是否需要出現在 AD 中?如果是,是否有可能以某種方式繞過這個並使用不同的“本地類別”用戶配置 sss 來執行我想要的操作?
(註:顯然這可以用 nlscd 來完成,因為根據這個問題和這另一個問題,但它需要 LDAP 伺服器,並且將其配置為使用 AD 是另一種蠕蟲病毒。
答案1
這應該適用於較新版本的 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
正確。我想知道它是否只適用於simple_allow_groups
指令。
答案2
感謝SSD維護者我找到了答案。這是一個工作配置,它可以滿足我的需要,即允許 SSH 隧道,但不允許 SSH 登入屬於 AD LimitedGroup 成員的 AD 使用者。
請注意,受限群組的成員必須 ssh as user@MYDOMAIN_TEST.GLOBAL
,而不是 as [email protected]
,否則它將無法運作。
解決方案的要點是在指令中使用 SSSD 部分網域而不是 AD 網域simple_allow_groups
。但請注意,該配置在沒有行access_provider = simple
和 的情況下也可以工作simple_allow_groups = ...
。正如用戶在評論中報告的那樣,也可以在simple_allow_groups = group
沒有指示的情況下進行設定。use_fully_qualified_names = True
另請注意,此配置使用ldap_user_search_base
而不是已棄用的ldap_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 = [email protected]