如何在Linux中为用户分配初始密码/默认密码?


10

我找到了说明如何设置用户密码的指南。我正在尝试使其自动化并向用户发送电子邮件,例如:

userid created with password XYZ.
request to change the initial password.

根据上面的文档,需要使用Python创建加密的密码,并将其输入以下usermod命令:

 usermod -p "<encrypted-password>" <username>

还有其他更简单的方法吗?我不想下载任何特殊的实用程序来执行此操作;应该尽可能地概括。


编辑:甚至上面链接中给定的方法似乎不适用于我:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.

这是我发现的另一个链接,但是usermod当有人ps用来查看列出密码的进程时,使用-p选项似乎也存在安全问题
munish 2012年

Answers:


13

您可以chpasswd这样做,例如:

echo "username:newpassword" | chpasswd

如果方便,您可以chpasswd从以外的其他程序中插入echo,但这可以解决问题。

编辑:要在shell脚本中生成密码,然后进行设置,您可以执行以下操作:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

有关的更多信息chpasswd,请参见http://linux.die.net/man/8/chpasswd

(用于生成密码的命令来自http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html


谢谢@Dominick嗯,chpasswd也许在AIX中...我还没用过。和evrytime我必须写一个密码...不能像问题链接中那样由脚本生成...不幸的是,即使那样对我也不起作用
取消了2012年

@munish我不太确定脚本中的generate意味着什么,但是我更新了答案,希望对您有所帮助。
多米尼克·帕斯托

不起作用。“身份验证令牌操作错误”
Cerin

@Cerin您是否有机会做类似的事情sudo echo "username:newpass" | chpasswd?由于提升的权限sudo不会通过管道传递,因此chpasswd将以普通用户身份运行。可以通过移动来固定它sudo,如中所示echo "username:newpass" | sudo chpasswd。还有其他可能导致该错误消息的问题,但是像这样的权限错误可能是最常见的。
Dominick Pastore 2014年

1
使用w,ps或显示有关其他进程信息的其他命令,同一机器上的其他登录用户可以看到命令行中的密码。用户应尽快更改以此方式设置的密码。
Mnebuerquo

3

您可以使用OpenSSL生成随机密码(在这种情况下,为16个字符):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

然后将哈希密码输入useraddusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

应归功于:密码生成是使用代替的类似方法改编/dev/urandomopenssl


2

useradd应该可以工作(我已经在Ubuntu上完成了)。也许检查每个args是否正确(这些组存在,路径是正确的bash)。您可以仅使用密码和用户来运行该命令,然后使用userdel删除然后再尝试使用更多参数,以查看导致此问题的原因(暴力破解方法)。

至少在Ubuntu下,还存在newusers(请参见手册页),在其中您可以给它一个包含passwd文件的文件,例如info,包括纯文本密码,它将创建这些用户。一次处理多个用户的好方法。


+1提及newusersUbuntu命令
Levon

1

我发现的最简单方法:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here

你甚至测试过吗?passwd: unrecognized option '--stdin'
塞林2014年

是的,我已经使用了很多次,但是,与几乎所有其他命令一样,它并不是解决当前问题的实际方法。passwd二进制文件的某些变体不支持--stdin开关。
MelBurslan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.