Linux 有一个用户 root。
它有一个密码,但 shell 脚本不知道。
没有人可以为脚本输入任何内容。
该脚本想要创建一个用户 user001,其密码与 root 相同。
脚本如何完成这个任务?
答案1
标准 Linux 系统(使用 pam_unix 和 shadow-utils)使用带有随机盐的 crypt(3) 密码哈希,并将它们存储在 root 可访问的“影子密码文件”中。
假设两个用户都是本地用户(即存储在 /etc/passwd 中并通过 /etc/shadow 进行身份验证):
- 获取旧用户的密码哈希值(使用
getent shadow <user>
,或直接从 /etc/shadow 获取)。哈希值位于第二个字段中。 - 添加新用户。
- 将密码哈希写回到新用户的影子条目(使用
useradd -p
、或usermod -p
、或chpasswd -e
、或直接写入 /etc/shadow)。
例如:
pwhash=$(sudo getent shadow OLDUSER | cut -d: -f2)
sudo useradd -p "$pwhash" NEWUSER
请注意,虽然root
始终是本地的,但通常不能保证其他Linux 系统上的帐户将是本地的(例如,帐户可能使用具有不可访问哈希的 Kerberos 身份验证)。因此,如果您要克隆非 root 帐户,则需要由您来提供该保证。
还请注意,root 帐户可能根本没有密码(即仅为本地控制台访问设置),或者其密码哈希可能被标记为“已锁定”。上述过程将准确复制该密码。