Active-Directory

在 SSS 配置中為 Active Directory 中的使用者設置登錄 shell

  • September 4, 2018

我正在嘗試為 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,而不是 as user@MYDOMAIN.GLOBAL,否則它將不起作用。

simple_allow_groups該解決方案的要點是在指令中使用 SSSD 部分域名而不是 AD 域名。但是請注意,該配置也可以在沒有行access_provider = simplesimple_allow_groups = .... 正如使用者在評論中報告的那樣,也可以在simple_allow_groups = group沒有指令的情況下進行設置。use_fully_qualified_names = True

另外,請注意,此配置使用ldap_user_search_base而不是 deprecated 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 = 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指令。

引用自:https://unix.stackexchange.com/questions/465103