linux 用户可以在不知道当前密码的情况下更改密码吗?

cwd*_*cwd 31 users password ssh ubuntu sudo

我正在设置几个ubuntu盒子,并使用 opscodechef作为配置工具。在这些服务器中的每一个上为每个用户安装公钥并禁用密码身份验证是相当容易的。

但是,用户也应该具有sudo特权,默认情况下需要密码。

如果我想使用用户的公钥作为访问管理的一种方法并允许用户sudo权限,这是否意味着我还应该使用NOPASSWD: ALLin设置用户visduo,或者有没有办法让用户可以更改自己的密码,如果他们只有公钥认证?

Gil*_*il' 25

Sudo 在最常见的配置中要求用户输入密码。通常,用户已经使用他们的密码对帐户进行身份验证,再次输入密码是确认合法用户没有放弃他们的控制台并被劫持的一种方式。

在您的设置中,用户的密码将仅用于对 sudo 的身份验证。特别是,如果用户的 SSH 密钥被泄露,攻击者将无法提升到服务器上的 root 权限。攻击者可以在帐户中植入一个键盘记录器,但这个键盘记录器会被其他用户检测到,甚至可以被自动监视。

用户通常需要知道他们当前的密码才能将其更改为不同的密码。该passwd验证这个程序(可以配置成不,但这是没有用的或在您的方案中所有期望的)。但是,root 可以在不知道旧密码的情况下更改任何用户的密码;因此,具有 sudo 权限的用户可以更改自己的密码,而无需在passwd提示符下通过运行sudo passwd $USER. 如果sudo被配置为需要用户的密码,那么用户sudo无论如何都必须输入密码。

您可以有选择地禁用密码验证。在您的情况下,您可以在 ssh 中禁用密码身份验证,也可能在其他服务中禁用。大多数现代 unices(包括 Ubuntu)上的大多数服务使用PAM来配置身份验证方法。在 Ubuntu 上,PAM 配置文件位于/etc/pam.d. 要禁用密码验证,注释掉auth … pam_unix.so的行/etc/pam.d/common-auth。此外,请确保您有PasswordAuthentication no/etc/ssh/sshd_config对禁用的sshd的内置密码认证。

您可能希望允许某些管理用户使用密码登录,或允许在控制台上进行密码验证。这可以通过 PAM 实现(它非常灵活),但我无法告诉你我的头顶如何;如果您需要帮助,请提出一个单独的问题。


jrg*_*jrg 10

是的,它非常不安全,并且还允许用户访问其他用户的密码,但由于他们有 sudo,所以你无能为力。

基本上,您执行以下操作:

$ sudo -i

现在,我们是根了。我们可以访问一切。

# passwd $username

$username 可以是任何人的用户名。

输入新的 UNIX 密码:

重新输入新的 UNIX 密码:passwd:密码更新成功

咚咚,密码变了。再说一遍,非常不安全,因为你可以改变任何人,但它有效,但它有效。我不推荐它,而是提供这个答案作为不该做什么的例子。

  • 如果没有当前用户密码,则无法执行“sudo -i”。 (9认同)

Tob*_*ler 9

您可以使用pam_ssh_agent_auth模块。编译很简单,然后添加入口就行了

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

其他auth(或include)条目之前/etc/pam.d/sudo

Defaults    env_keep += "SSH_AUTH_SOCK"
Run Code Online (Sandbox Code Playgroud)

/etc/sudoers(通过visudo)。

现在,每个用户都可以sudo通过(转发的或本地的)SSH 代理他们的密码进行身份验证。最好让您的用户使用,ssh-add -c这样每次sudo调用至少需要一些确认。