在 SSS 設定中為 Active Directory 中的使用者設定登入 shell

在 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 = [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]

相關內容