限制 LDAP 用户在没有有效 shell 的情况下进行身份验证

限制 LDAP 用户在没有有效 shell 的情况下进行身份验证

我想要实现的是,如果我将 LDAP 中的用户属性更改为没有 shell;例如:/etc/noshell,我不希望用户成功 ssh。我已经更改了一个用户的属性:

# check62, people, wh.local
dn: uid=check62,ou=people,dc=wh,dc=local
uid: check62
cn: Johnny Appleseed
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e1NTSEF9dklpL2pQcWtNWDBFSUs1eUVDMUMxL2FjWHdJNGRuUXY=
shadowLastChange: 15140
shadowMax: 99999
shadowWarning: 7
uidNumber: 6002
gidNumber: 6002
homeDirectory: /home/check62
loginShell: /bin/noshell

# check62, group, wh.local
dn: cn=check62,ou=group,dc=wh,dc=local
objectClass: posixGroup
objectClass: top
cn: check62
gidNumber: 6002
userPassword:: e0NSWVBUfXg=

这是我的 /etc/pam.d/sshd 文件

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user        context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

用户使用 /bin/bash 成功验证身份。精彩绝伦。任何帮助都将不胜感激。

这是我的密码验证文件

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     sufficient    pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

答案1

在 in之前放置files或是一种常见的做法,但如果此人有本地帐户,它将覆盖 LDAP 设置。compatldap/etc/nsswitch.conf

尝试这个:getent passwd check62

这将显示passwd来自所有来源的该用户的数据库条目。如果最上面的条目包含/bin/bash而不是/bin/noshell,则您需要在服务器优先考虑的数据库中进行 shell 更改,或者调整顺序以首先显示 LDAP。后者通常不推荐。

(免责声明:如果您使用 PADLnss_ldap而不是nss-pam-ldapd,则将ldapLDAP 放在第一位是一个更糟糕的想法,因为 LDAP 查找不会发送到守护进程,并且每个进程都必须处理 NSS 查找期间的超时。始终确保您知道当 LDAP 服务器无法访问时您的服务器将如何表现。)

相关内容