首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是ktpass命令禁用密码身份验证。

是ktpass命令禁用密码身份验证。
EN

Stack Overflow用户
提问于 2020-10-21 08:13:20
回答 2查看 1.2K关注 0票数 1

关于ktpass命令我有个小问题。我有一个密码为my-test-user的用户myPassword!。我可以通过用户名和密码登录这个帐户。但是,当我使用以下命令生成keytab文件时,我只需登录keytab文件(例如kinit)。

代码语言:javascript
复制
ktpass /out test.keytab /princ HTTP/test.example.com@MY.REALM /pass * /mapuser my-test-user@MY.REALM /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT

如果我试图连接用户名/密码,则badPwdCount属性将递增。

我的问题是: ktpass命令是否禁用密码身份验证?

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-21 15:57:16

简短回答:不。

/pass *选项意味着密码提示。/mapuser选项意味着在AD中查找详细信息。如果通过/pass传入的值与AD中存储的内容不匹配,则/mapuser调用将AD中的密码设置为传入的任何密码。

您是在什么版本的Windows上运行这个程序?Windows2012提供的ktpass的构建在/pass参数处理中有一个错误,该参数处理将enter键转义字符附加到发送给AD的字符串中,因此它不正确地重置它。这在后来的OSes中得到了修正。

票数 3
EN

Stack Overflow用户

发布于 2021-07-16 21:45:19

不,但这里有几个可能的因素:

一种是,如果指定了/mapuser而没有指定-SetUPN,则ktpass将更改有关帐户的UPN,以匹配命令中的/Princ参数指定的任何SPN (在任何一种情况下,/mapuser都会将所请求的SPN注册到指定的用户,但如果没有-SetUPN,则只会更改该帐户的UPN )。

这显然是为了让Linux客户端能够成功地使用这个键选项卡获得票证(因为从使用kinit的Linux客户端,如果我们尝试使用注册到帐户的SPN获得Kerberos票证,但这与任何帐户的UPN不匹配,kinit将告诉我们主体不存在)。Windows客户端可以获得仅注册为SPN的SPN的票证,而无需服务帐户的UPN与所请求的SPN匹配。

因此,如果我们尝试使用帐户的“常规”UPN (运行ktpass之前的UPN,例如user@domain.com)进行身份验证,在没有指定-SetUPN的情况下生成密钥选项卡,那么身份验证将失败,因为该UPN不再有效。

另一个问题是,ktpass似乎“损坏”了在使用/Pass *参数强制输入密码时输入的密码。ktpass要么将密码设置为我们指定的密码(如果不包括-SetPass ),要么使用我们指定的密码创建密钥选项卡,并使用我们的话说明它是正确的(当然,如果提供了无效的密码,则生成的keytab将无法工作)。

根据我的测试,如果我们在命令本身中输入密码(例如/Pass P@ssw0rd),键选项卡将正常工作(假设密码是正确的),并且密码身份验证也应该工作,尽管只有当我们以DOMAIN\username格式指定用户名,或者由于上面提到的UPN问题,我们在ktpass命令中包括了-SetUPN

但是,当我们尝试使用/Pass *参数以避免在命令行输入明文密码时,问题就出现了。在这种情况下,ktpass会提示我们输入密码,但它显然会以某种方式修改我们输入的值(幕后)。这将产生两种可能的结果,取决于我们在命令中指定的选项:

  • 或生成的keytab文件无效且无法工作--如果我们包含-SetPass参数(它告诉ktpass不要更改帐户密码),因为ktpass生成一个带有损坏密码的密钥选项卡,即使帐户上的“真实”密码是我们在提示符下输入的值。
  • 或者,帐户上产生的密码将被设置为未知值(而不是我们预期的值)--即我们输入的密码的损坏版本--如果我们不包括-SetPass,就会发生这种情况,在这种情况下,ktpass会将帐户的密码更改为它破坏输入的任何值。在这种情况下,keytab可以工作,但是当我们试图使用密码对这个帐户进行身份验证时,我们将得到一个无效的密码错误(因为帐户上的密码不是我们认为的密码--它不是我们在提示符下输入的值)。

我在2008 R2,2012和2012 R2上测试并确认了这种行为--我无法在任何更新的东西上进行测试。

如果您需要知道帐户的密码,以便在生成密钥选项卡后可以使用任何方法(密码或密钥选项卡)进行身份验证,则需要在ktpass命令本身中输入密码,而不是要求ktpass提示(即使用/Pass P@ssw0rd而不是/Pass *)。只需确保您在安全的环境中这样做,在那里不可能有人监视您的屏幕(幸运的是,Windows默认不会持久地记录cmd历史记录)。

另一方面,如果创建密钥选项卡后不需要知道帐户的密码,那么最好只使用+rndPass --这将迫使ktpass为帐户生成随机密码,而keytab将正常工作。

*EDIT/UPDATE:我在测试中发现的另一个奇怪之处是,如果创建了一个新帐户/一个已知的密码,并且运行ktpass为该帐户创建一个密钥选项卡,如上面所述,在命令中指定密码,但是使用-SetPass参数,生成的keytab将无法工作。如果我们运行ktpass并指定不带-SetPass的密码,为了让ktpass“重置”密码(使其与我们在创建帐户时设置的值相同),生成的keytab可以正常工作,密码验证也一样。从那以后创建的任何后续键标签都会工作(即使是用-SetPass创建的)。我对此行为没有任何解释(在Server 2012和2012 R2上观察到)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64459376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档