【问题标题】:PAM: how do I change someone else's password?PAM:如何更改别人的密码?
【发布时间】:2012-03-07 09:59:14
【问题描述】:

我必须进行什么 PAM 调用才能重置用户的密码?我想不通。

背景:

我正在开发嵌入式 linux 设备。客户安装此设备并创建用户帐户。如果其中一个二级用户帐户被锁定,或者用户忘记了密码,我们需要一种方法,让用户 #1 可以重置用户 #2 的密码。我们对 PAM 的转换是新的,我现在正在切换到它。以下是我为验证用户而进行的调用:

pam_start();
pam_authenticate();
pam_acct_mgmt();
pam_end();

我看到pam_chauthtok() 更改了我自己的密码,但我不明白是否——或者如何? -- 我可以使用它或其他类似的调用来为另一个用户帐户分配新密码。

【问题讨论】:

    标签: c linux authentication pam change-password


    【解决方案1】:

    拥有不同用户的全部意义在于他们不能做诸如更改彼此密码之类的事情。要使用 PAM 更改用户的密码,您需要成为该用户。最简单的方法是使用 setuid-root 二进制文件或以 root 身份运行的守护进程,调用 setuid 等成为所需用户,然后执行更改密码的操作。

    当然,这会使您的整个系统面临很大的风险,特别是如果您还没有熟练掌握这些问题(从您的问题中可以清楚地看出),所以我会三思而后行是否需要此功能,如果是,是否应该聘请专家来处理。

    【讨论】:

    • 我想学习如何自己做出正确的调用,所以“聘请专家来处理它”不是我想要的方向。今晚我尝试调用 pam_authenticate() 和 pam_acct_mgmt() 以 root 身份进行身份验证(此守护进程以 root 身份运行),然后 seteuid() 给我要为其设置密码的用户,但这不起作用,pam_chauthtok() 发送返回 rc=20:身份验证令牌操作错误。如果您知道如何使用 PAM 为刚刚创建的用户帐户分配密码,请分享。
    • 创建用户时,创建时没有密码。 /etc/shadow 中的密码字段是“*”。所以如果我想以这个全新的用户身份进行身份验证,我会使用什么密码?这就是为什么我假设我必须以“root”身份进行身份验证——一个我可以控制的用户,而且我因为我以 root 身份登录我知道我的密码——然后才能尝试更改其他用户的密码。
    • 我不明白您为什么需要对用户进行身份验证。我看了一下 PAM 文档,在运行 setuid-root 时使用所需的用户名和 pam_chauthtok 调用 pam_start 应该足够了...
    • 最后一条评论对我来说很关键。我以为我总是必须先进行身份验证。使用用户名而不是 NULL 调用 pam_start(),然后立即跳到 pam_chauthtok() 就像一个魅力。谢谢你。只是出于好奇,您查看的是什么文档?
    • 我刚刚在 Google 上搜索了“man pam_chauthtok”,然后点击链接到 pam_start 的手册页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2016-09-26
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2019-05-22
    相关资源
    最近更新 更多