我正在尝试为 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]