在 /etc/shadow 中编写“空”密码脚本

在 /etc/shadow 中编写“空”密码脚本

我编写了一个脚本,用于在 Linux 服务器 (Slackware 14.0) 上添加 CVS 和 SVN 用户。此脚本会在必要时创建用户,并从现有 shell 帐户复制用户的 SSH 密钥或生成新的 SSH 密钥。

需要明确的是,这些帐户专门用于 SVN 或 CVS。因此,条目开头/home/${username}/.ssh/authorized_keys为(以 CVS 为例):

command="/usr/bin/cvs server",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ....etc...etc...etc...

这些用户永远不会被允许进行实际的 shell 访问 - 他们纯粹是为了通过 SSH 提供对我们的源存储库的访问。

我的问题是,当我添加新用户时,他们/etc/shadow默认会获得一个空密码。它看起来像:

paddycvs:!:15679:0:99999:7:::

如果我保留影子文件原样(带有!),SSH 身份验证将失败。要启用 SSH,我必须先passwd为新用户运行并输入一些内容。

这样做有两个问题。首先,它需要用户输入,而我在这个脚本中不允许输入。其次,它可能会允许用户在物理终端上登录(如果他们有物理访问权限,他们可能有,并且知道秘密密码——好吧,这不太可能)。

我通常阻止用户登录的方法是将他们的 shell 设置为/bin/false,但如果我这样做,那么 SSH 也不起作用!

有人对编写这个脚本有什么建议吗?我应该简单地使用sed或其他方法,用预设的加密密码字符串替换影子文件中的相关行吗?或者有更好的方法吗?

干杯 =)

答案1

为了避免锁定问题或弄乱影子文件,你可以使用

echo username:some_string | chpasswd

更具体地说:您实际上可以*通过执行以下操作在密码字段中使用:

echo "username:*" | chpasswd -e

答案2

你有没有尝试过

passwd -d username

它从中删除特定用户的密码条目/etc/shadow file。基本上使特定用户以空密码登录。

它只能以 root 或 sudo 用户身份强制执行。

答案3

还有一种不涉及管道的解决方案如下(也可以在 shadow 和 shadow-utils 包中找到):

usermod -p '*' username

答案4

新版本的 OpenSSH 检查 /etc/shadow 以查看帐户是否被禁用。被禁用的帐户带有 !,因此将其更改为 * 即可解决问题。

相关内容