我需要根据用户的LDAP组成员来限制对主机的ssh访问。 我想用sssd的ldap_access_filterfunction来做到这一点。 这是我的sssd.conf文件:
[sssd] config_file_version = 2 services = nss, pam domains = default [nss] filter_users = root,ldap,named,avahi,haldaemon,dbus,radiusd,news,nscd [pam] [domain/default] debug_level = 5 ldap_tls_reqcert = never auth_provider = ldap access_provider = ldap ldap_schema = rfc2307bis ldap_search_base = dc=edurp,dc=com ldap_group_member = uniquemember #id_provider = ldap ldap_id_use_start_tls = False chpass_provider = ldap ldap_uri = ldaps://ldap0.la01.edurp.com/,ldaps://ldap1.la01.edurp.com/ ldap_chpass_uri = ldaps://ldap0.edurp.com/ cache_credentials = True ldap_tls_cacertdir = /etc/openldap/cacerts entry_cache_timeout = 600 ldap_network_timeout = 3 ldap_access_filter = (&(object)(object)) krb5_realm = EXAMPLE.COM krb5_kdcip = kerberos.example.com ldap_access_filter = (|(memberOf=cn=datateam,ou=group,dc=edurp,dc=com)(memberOf=cn=ctmtest,ou=group,dc=edurp,dc=com)(memberOf=cn=syseng,ou=group,dc=edurp,dc=com))
我的nsswitch.conf文件如下所示:
passwd: files sss shadow: files sss passwd_compat: sss shadow_compat: sss group: files sss hosts: files dns bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files rpc: files services: files sss netgroup: sss files publickey: nisplus automount: files ldap aliases: files nisplus
所以我在/ var / log / sssd /
(Wed Jun 25 12:25:36 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Backend returned: (0, 6, <NULL>) [Success] (Wed Jun 25 12:25:36 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Sending result [6][default] (Wed Jun 25 12:25:36 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Sent result [6][default] (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [be_get_account_info] (0x0100): Got request for [3][1][name=bobdog] (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [acctinfo_callback] (0x0100): Request processed. Returned 0,0,Success (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [be_pam_handler] (0x0100): Got request with the following data (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): command: PAM_ACCT_MGMT (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): domain: default (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): user: bobdog (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): service: sshd (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): tty: ssh (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): ruser: (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): rhost: 10.65.6.65 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): authtok type: 0 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): authtok size: 0 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): newauthtok type: 0 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): newauthtok size: 0 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): priv: 1 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [pam_print_data] (0x0100): cli_pid: 48404 (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [sdap_access_filter_get_access_done] (0x0100): User [bobdog] was not found with the specified filter. Denying access. (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Backend returned: (0, 6, <NULL>) [Success] (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Sending result [6][default] (Wed Jun 25 12:29:37 2014) [sssd[be[default]]] [be_pam_handler_callback] (0x0100): Sent result [6][default]
并在/ var / log / secure我看到:
Jun 25 12:29:37 vmtest0 sshd[48404]: pam_sss(sshd:account): Access denied for user bobdog: 6 (Permission denied) Jun 25 12:29:37 vmtest0 sshd[48405]: fatal: Access denied for user bobdog by PAM account configuration
我正在为这个项目在客户端机器上使用Oracle 6.5 Linux和openldap。 ldap服务器运行dsee7。
感谢您的任何build议。
没有id_provider sssd不能执行任何nsswitchangular色。 所有的sss用户和组的分辨率将失败。 你可以用getent passwd bobdog来看这个。
我注意到你有两个不同的ldap_access_filter 。 虽然第一个看起来很糟糕,但是这是最后的价值,所以这更多的是一个整洁的问题。
ldap_access_filter = (&(object)(object)) ldap_access_filter = (|(memberOf=cn=datateam,ou=group,dc=edurp,dc=com)(memberOf=cn=ctmtest,ou=group,dc=edurp,dc=com)(memberOf=cn=syseng,ou=group,dc=edurp,dc=com))
此外,我不知道如果dsee7支持memberof ,但我怀疑它的确如此。 值得双重检查。 memberof通常是一个操作属性,所以你必须明确地要求。 ldapsearch -H ldaps://ldap0.la01.edurp.com/ -b dc=edurp,dc=com uid=bobdog memberof 。
使用SRV RRs通常比显式主机更好。 您已经依靠DNS进行名称parsing。
如果你有一个Kerberos KDC,你可能想使用krb5作为auth_provider而使用sshd的AllowGroups来限制访问。 GSSAPI有时很方便。
AllowGroups
这个关键字后面跟着一个组名模式列表,用空格分隔。 如果指定,则仅允许主要组或补充组列表匹配其中一种模式的用户login。 只有组名是有效的; 数字组ID不被识别。 默认情况下,所有组都允许login。 allow / deny指令按以下顺序处理: DenyUsers , AllowUsers , DenyGroups ,最后AllowGroups 。
有关模式的更多信息,请参见ssh_config(5)中的PATTERNS。