AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 890012
Accepted
Dessa Simpson
Dessa Simpson
Asked: 2017-12-30 07:42:38 +0800 CST2017-12-30 07:42:38 +0800 CST 2017-12-30 07:42:38 +0800 CST

PAM 接受有效用户的任何密码

  • 772

我刚刚将我的 Arch Linux 工作站连接到我为我们公司设置的 Samba AD。我测试了它,它起作用了,或者我是这么认为的。它接受了我的密码,创建了我的 homedir 和所有内容,然后让我登录。我忘记测试的是它不接受的内容。事实证明,只要用户名有效(AD 或本地,无所谓),它就会接受任何密码。有人可以指出我做错了什么吗?

我正在使用 SSSD 来管理 AD 连接。这是我的/etc/pam.d/system-auth:

#%PAM-1.0

auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_env.so

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

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so
active-directory
  • 1 1 个回答
  • 3976 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2018-01-02T23:34:53+08:002018-01-02T23:34:53+08:00

    让我们详细分析一下您的 PAM 配置的身份验证部分。

    auth        sufficient    pam_unix.so nullok try_first_pass
    

    第一行说:“如果此测试成功,请停止进一步检查并接受登录;如果失败,请继续检查。检查在/etc/passwd和中配置的用户/密码/etc/shadow。如果用户存在并且密码字段为空,则用户是允许进入。” 这是本地用户帐户的身份验证检查。

    auth        requisite     pam_succeed_if.so uid >= 500 quiet
    

    第二行说:“如果此测试失败,则停止进一步检查并拒绝登录;如果成功,请继续检查。用户的 UID 值必须为 500 或更大。” 这可以防止使用 AD 或其他共享用户数据库中的密码登录系统帐户。

    auth        sufficient    pam_sss.so use_first_pass
    

    第三行说:“如果此测试成功,请停止进一步检查并接受登录;如果失败,请继续检查。检查 SSSD。” 这是对 AD 帐户的检查。

    auth        required      pam_env.so
    

    第四行说:“如果这一行失败,拒绝登录;但无论如何都要检查到本节的末尾。设置/etc/security/pam_env.conf和/或中描述的任何环境变量/etc/environment。”

    现在想想如果用户存在(在 AD 或 local 中/etc/passwd)但密码检查失败会发生什么。第一,pam_unix.so失败;但这不会导致拒绝,因为这会阻止您使用任何基于 AD 的用户帐户。

    所以这个过程继续到第二行。如果用户有一个有效的 UID 映射并且 UID 号是 500 或更大,这也将成功。如果 UID 小于 500,这将失败的唯一方法。

    第三行进行 AD 检查;这也失败了。但同样,“足够”用于允许在此之后配置任何其他身份验证方法,因此该过程继续进行,就像pam_unix.so.

    此时,第四行必须执行成功才能让用户进入。但这只是设置环境变量。man pam_env告诉我pam_env.so如果成功设置环境变量,模块将返回 PAM_SUCCESS 值。但是因为这是这个堆栈中的最后一个 PAM 模块,并且到目前为止没有其他模块发出绝对拒绝,所以这个模块的结果将成为身份验证阶段的整体结果。

    为了解决这个问题,身份验证阶段需要pam_deny.so在最后,以在所有实际身份验证机制都未能接受用户时停止任何登录尝试。

    此外,这pam_env.so可能应该在该过程的早期发生,以便环境变量初始化对于所有有效用户都将以相同的方式发生。如果这在阶段开始时不起作用auth,那么pam_env.so应该改为进入session阶段;man pam_env表示它将auth分阶段工作session。

    因此,我最初的建议是将auth您的 PAM 配置部分更改为:

    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_sss.so use_first_pass
    auth        requisite     pam_deny.so
    

    因此,功能将是:

    • 为用户设置环境变量。如果这失败了,那么无论如何都会出现严重错误。
    • 检查本地密码;如果成功,则接受登录并结束此阶段。
    • 此时拒绝任何 UID 小于 500 的用户(= 没有使用 AD 帐户登录的 root 或系统帐户!)
    • 检查 AD 中的密码;如果成功,则接受登录并结束此阶段。
    • 如果我们到了这一点,没有一个真正的身份验证机制接受密码,所以无条件拒绝登录尝试。

    如果事实证明pam_env.so放在auth阶段开始时会导致问题,您可以尝试将其注释掉;似乎以前在任何有效登录时都会跳过它。

    与更改 PAM 配置时一样,首先打开与系统的会话并确保它是sudoroot 用户或具有可用的完全 root 权限:然后备份当前配置。进行更改但不要注销以进行测试:相反,通过打开另一个会话进行测试。如果失败,您仍然可以登录原始会话,因此您可以在必要时轻松恢复旧配置。如果这是一个生产系统或其他关键系统,请在进行更改之前打开两个根会话,以防止手指比大脑更快的错误。

    • 17

相关问题

  • 如果以域用户身份远程登录,PC 速度极慢

  • 如何在 Windows 2003 的 ou 级别应用策略

  • 允许用户更改其 Active Directory 密码的 Web 界面

  • MOSS 2007 无法使用 ActiveDirectoryMembershipProvider 配置表单身份验证

  • 通过 VPN 更改 Active Directory 密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve