我有10台Linux服务器需要locking,一次为所有用户重设密码。 这背后的故事是漫长的,但总的想法是,我需要它在特定的时间很快发生。 我将为所有的用户帐户(最初)使用一个单一的,严格的密码,所以这不需要从密码文件或类似的东西中读取。
所以我需要的是最好的方法来编写脚本,以便我可以一次重置所有的密码。 我可以用cat /etc/passwd | cut -f1 -d:提取用户帐户的列表 cat /etc/passwd | cut -f1 -d: command,但是最终会包含所有的帐户,包括系统帐户,我认为我不应该这样做。
那么我最好的select是什么?
注意! 重置密码时,还需要确保擦除~/.ssh/authorized_keys文件中的任何内容。 直到后来才记得这个 – 幸好我几乎把服务器locking得很紧,除了服务器到服务器的东西外,没有任何东西在authorized_keys中。
您可以select> = 500的UID以确保只获取真实用户而不是系统帐户,然后使用passwd选项–stdin更改密码。
像这样的东西应该工作:
while IFS=: read ux nn rest; do if [ $nn -ge 500 ]; then echo "YOURSTRONGPASSWORD" |passwd --stdin $u; fi done < /etc/passwd
你可以使用类似“newusers”命令的方式来更新批处理模式下的用户密码。 创build一个包含用户:密码组合的文件,并通过新用户加载…密码以未encryption方式input,但在此过程中将被encryption。
newusers userpass.txt
userpass.txt看起来像/ etc / passwd文件。 相同的格式。
我将/ etc / passwd复制到一个新文件中,删除系统帐户的行并用您希望使用的通用密码replace第二个字段“x”,然后使用newusers命令重新导入。
编辑影子数据库:
vipw -s
这将locking更新的文件也是,然后使用您的文本编辑器来取代每一个有pw字段的行的第二个字段。
例如,使用:
$ openssl rand -base64 12 gw9H5sqr8YioMdwd $ openssl passwd -1 Password: Verifying - Password: $1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0
然后以root身份使用vipw -s; 假设你的文本$ EDITOR / $ VISUAL是vi(m),那么vipw会把你转储到那里,你可能会这样做:
:g/^[^:]*:[^*!:][^:]*:/s,:[^:]*,:$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0:,
这是一个基本的模式匹配,并在匹配该模式的行进行replace(每行只有一次)。 模式匹配排除密码字段为“!”的行 或'*',所以只为已设置密码的用户设置密码,不pipe是什么uid; 这将保护你免受包装系统创build一个高级uid或任何其他废话一些包装生产“系统”帐户的情况。
注意这也将重置根密码。 如果你想排除这个,并且root在第一行,那么用:2,$ greplace最初的:g