米拓后台维护密码_密码维护

迁移用户时,应提供初始密码。 然后通常通过电话向用户发送电子邮件或告知其新密码。 然后,将在登录时提示用户更改其密码(即,如果实施了安全密码策略规则)。 密码更改也可以通过临时请求进行,这将需要在本地或远程重置用户帐户密码。 进行这些密码更改需要花费时间,并且非常重复。 但是,使用AIX实用程序chpasswd(也随Linux变种一起提供),可以轻松执行和重复执行这些任务。

但是,选择一个好的密码是另一回事。 一次更改或重置多个密码以使用词典单词甚至用户名时很容易,但这不是一个好的密码策略。 密码应该足够容易记住,但又不能太硬,以至于用户必须写下来记住它。 有人建议对普通用户帐户使用随机密码是一种很好的安全策略。 我建议,只有用户可以记住自己的密码,这才是好策略。 如果用户将密码写在便笺上,他们很可能会将其放在可以轻松检索的位置,例如在桌面下方或在桌面上。 最终,这可能是可疑入侵者轻松找到用户密码的地方。

从系统管理员的角度或想要生成自己的密码的用户使用的一种可用于产生可发音和不可发音的密码的好工具是称为pwgen的实用程序。 Pwgen可以生成一个或多个密码,并且您可以指定不同的密码长度,其中可以包括大写或数字。

在本文中,我将演示chpasswd和pwgen的用法,以及在处理密码更改时如何交互或批量使用它们。 几年前将用户迁移到LDAP环境时,我第一次接触chpassswd。 现在,它是我用于非交互式更改本地或远程帐户密码的首选工具。 要查看从哪里下载pwgen(二进制或源代码),请参阅“ 相关主题”部分。

使用chpasswd

使用chpasswd,您可以一次更改一个或多个帐户密码。 这意味着不再需要像通常在命令行上那样重新键入密码。 尽管chpasswd可以交互使用,但我建议在非交互模式下使用它。 使用chpasswd,因为它是更改密码的快速方法。

chpasswd使用的格式为:

chpasswd -f <pwdadm flags> -c

哪里:
-f pwdadm标志可以被解析
-c清除密码标志

从标准输入中以以下格式读取用户和密码:

user_name:user_password

想象一下,我们刚刚创建了三个用户帐户,其名称分别为:alpha,bravo和charlie

这些帐户尚未设置密码,您可以通过查询/ etc / passwd文件和pwdadm命令来告知:

# tail /etc/passwd alpha:*:209:1:alpha.apps:/home/alpha:/usr/bin/ksh bravo:*:210:1:bravo.suppt:/home/bravo:/usr/bin/ksh charlie:*:211:1:charlie.suppt:/home/charlie:/usr/bin/ksh

请注意,第二列的passwd文件带有“ *”,这通知我们尚未设置密码。 这也可以通过使用pwdadm命令查询其中一个用户来确认:

# pwdadm -q alpha alpha:

由于未设置密码,因此未产生任何输出。 如果存在,则在设置“ lastupdate”字段时,将以秒为单位填充UTC时间戳。

使用chpasswd,我将演示这些用户在其中设置初始密码的两种方式。 在下面的示例中,我从命令行回显alpha的用户名​​和mypasswd的密码,然后通过管道传递到chpasswd:

echo "alpha:mypasswd" | chpasswd

登录名和密码的详细信息也可以包含在字符串中,并通过管道传递到chpasswd,如下所示:

# detail="charlie:charpw" echo $detail | chpasswd

现在通过pwdadm查询用户alpha,我们可以看到标志值ADMCHG已设置,这是重置密码时chpasswd的默认设置:

# pwdadm -q alpha alpha: lastupdate = 1265765265 flags = ADMCHG

ADMCHG表示,下一次用户alpha尝试使用已设置的初始密码(mypasswd)登录时,将强制用户alpha更改其密码。 这也适用于尝试设置了ADMCHG标志的其他帐户。

密码也可以更改,详细信息保存在文件中。 例如,考虑文件传递的以下内容:

# cat pass bravo:bravpass charlie:charpass

在上一个名为pass的文件中,bravo用户将其密码更改为bravpass,而charlie用户将其密码更改为charpass。 要执行密码更改,只需整理文件并将其通过管道传递到chpasswd,如下所示:

# cat pass | chpasswd

文件也可以重定向到chpasswd中进行处理。 在此示例中,我将通过指定'c-'选项(清除密码标志)来指定bravo和charlie用户不必更改密码,如下所示:

# chpasswd -c < pass

使用pwdadm查询用户charlie,将产生以下内容:

# pwdadm -q charlie charlie: lastupdate = 1265853052

注意chpasswd命令中使用了clear flags选项。 它已清除该字段中的所有标志值。

确定密码的最后设置或更改时间,如pwdadm输出中的最后更新值所示。 需要将以秒为单位的UTC时间戳转换为更有意义的当前日期时间戳。

以下两个命令均返回密码更改或初始设置(如果有)的最新更新。 在此示例中,我们正在询问用户alpha的上次密码更新:

# lssec -f /etc/security/passwd -s alpha -a lastupdate alpha lastupdate=1265940457 # pwdadm -q alpha alpha: lastupdate = 1265940457 flags = ADMCHG

您可以使用perl或gawk将UTC转换为当前时间戳,以下两个示例均达到相同的结果:

# perl -e 'use POSIX;print ctime(1265940457)' Thu Feb 11 20:07:37 2010 # gawk 'BEGIN {print strftime("%c",1265940457)}' Thu Feb 11 20:07:37 GMT 2010

安装pwgen

如果下载源,则当前pwgen版本为2.0.6。 二进制版本为2.0.5。 在此演示中,我将使用源代码。

下载后,将其解压缩并编译:

# gunzip pwgen-2.06.tar.gz # tar -xvf pwgen-2.06.tar # cd pwgen-2.06 #./configure # make # make install

pwgen二进制文件将安装在/ usr / local / bin中。

使用pwgen

Pwgen生成的密码可以是随机的(很难记住),也可以在大脑上很容易(不容易记住)。 该实用程序可以交互方式或以批处理方式用于脚本。

默认情况下,pwgen将一个充满密码的屏幕显示到标准输出中。 通常,您不希望这样做。 但是,如果您或用户希望选择一次手动输入的密码,这将很有用。 生成密码时,默认情况下,pwgen会尝试将其与数字和大写字母混合使用。

格式为:

pwgen <options> <password_length> <number_of_passwords>

常见的选项有:

-1 每行打印一个密码
-C 必须包含大写字母
-n 必须包含一个数字
-s 随机密码

要打印一个长度为8个字符的密码:

# pwgen 8 1 eej3eeZu

要打印三个长度为7个字符的密码,强制使用大写字母,请使用:

# pwgen -c 7 3
ohw4Aj7 Pei0obe gaw4De4

要打印10个8个字符长的密码,强制使用大写字母和数字,请使用:

# pwgen -c -n 8 10 zum5Shei Choo6Eih Ub5uagei Ooxu6ohs Eix9xeip iV4yoeph Io3aeGhe taiTh6ia cuere1AW phai9Pai

Pwgen将确定您是否通过tty执行该实用程序。 如果没有,则默认情况下,如果未传递任何选项,它将仅生成一个密码。 当您需要将值存储在变量中时,这使编写脚本更加容易,例如:

# pass=$(pwgen) # echo $pass ohtherah

如果愿意,可以使用反引号代替命令。 它达到相同的结果:

pass=`pwgen` # echo $pass oowahxei

当然,我们可以包含任意数量的密码。 在以下示例中,生成了三个密码:

# pass=$(pwgen -c -n 8 3) # echo $pass EluBie0z thohku0W Ail3fu3z

要打印八个字符的真正随机密码,请使用:

# pwgen -s 8 1 9bTzZxt9

使用随机选项时(如上例所示),应注意注意事项。 这些密码可能很难记住,如果分配给用户,他们可能会写下密码。 以我的经验,随机生成的密码仅应用于应用程序所有者帐户。

把它放在一起

既然我们已经看到了pwgen和chpasswd工具的实际作用,我们就可以开始为用户设置初始密码了。 显然,这必须通过清单1之类的脚本来执行。 首先,确定要为其设置密码的用户列表; 该列表可以包含在文件中(尽管在本演示中,用户包含在包含三个用户的字符串$ list中)。 对于每个用户,当通过循环处理每个用户时,将使用以下命令生成八个字符长度的密码:

pwgen 8 1

进行初步检查,以确保用户帐户在AIX主机上存在。 如果是这样,则将用户名和生成的密码以chpasswd的格式附加到文件密码文件中。 处理完所有用户后,将文件通过chpasswd传递。 如果/ etc / passwd中不存在用户,则该用户的密码文件中将不存在任何用户/密码条目。

清单1. setpass
#!/bin/sh # setpass passfile=/home/dxtans/passfile >$passfile list="alpha bravo charlie" for user in $list do if ! grep -w ^$user /etc/passwd > /dev/null then echo "user NOT present: $user" else echo "user present: $user" pass=$(pwgen 8 1) echo "$user:$pass">>$passfile fi done cat $passfile | chpasswd

运行脚本setpass之后,在通过chpasswd处理之前,将使用以下内容生成文件passfile:

# cat passfile alpha:jiebuzio bravo:oegaeyay charlie:ooweipoa

在下一个示例(请参见清单2 )中,使用初始密码创建了一个名为foxtrot的用户,并且更改了登录属性。 create_user脚本演示了使用pwgen设置密码的一种方法。 在此示例中,密码设置为8个字符,其中至少包含一个大写字母和一个数字:

pwgen -c -n 8 1

首先,使用su设置为false创建用户foxtrot。 然后在帐户上设置密码,清除用户的所有密码限制标志(这意味着用户foxtrot在登录时将不会提示其更改密码)。 然后设置gecos字段,将变量$ user扩展为foxtrot,然后将“ apps”附加到扩展的变量中。 密码上限设置为五周,最后一次更改密码或设置密码后五周,用户foxtrot将被迫更改密码。 根据minage = 1的规定,用户foxtrot只能在一周后更改该密码。 最后,设置组成员身份时将主要组设置为staff(这是AIX的默认设置)。

清单2. create_user
#!/bin/sh # create_user user="foxtrot" pass=$(pwgen -c -n 8 1) echo "the passwd for $user is: $pass" echo "creating user $user..creating password" mkuser su=false $user if [ $? = 0 ] then echo "$user:$pass" | chpasswd -c else echo "error: unable to create user $user" exit 1 fi echo "changing $user attributes..." chuser gecos="${user}.apps" $user chuser maxage=5 $user chuser minage=1 $user

在上一个示例中,执行脚本create_user时,输出为:

# create_user the passwd for foxtrot is: oiN2hi9r creating user foxtrot..creating password changing foxtrot attributes...

我们可以通过使用pwdadm命令来告知密码标志已被清除,如前所述:

# pwdadm -q foxtrot foxtrot: lastupdate = 1266174412

经常更改根密码是一项审核要求。 我认为,执行此操作的最佳方法是以root用户身份向每个主机SSH,然后在连接到该主机后更改密码。 但是请注意,这是您不想忘记的密码。 因此,最好先在本地使用pwgen生成密码,然后在脚本中对其进行硬编码,然后在密码推出后以及在安全的地方将其安全保存之后,从脚本中删除密码。 。 不要忘记将新密码通知其他系统管理员。

一个好的做法是让要连接的所有主机都包含一个文件。 使用这种方法意味着其他脚本可以读取该文件,从而通过手动将错别字放入脚本来停止错别字。 包含主机的典型文件可以采用以下格式:

# cat all_hosts host1 host2 host3 host..

清单3显示了一种简单的方法。 密码已使用pwgen生成,密码为“ tu8ahLae”。 对于all_hosts文件中读取的每个连接的主机,使用here文档方法。 这意味着单词“ mayday”之间包含的所有命令都将作为远程主机上的标准输入读取。 字符串root:tu8ahLae通过管道传递到chpasswd,如下所示:

echo "root:tu8ahLae" | chpasswd
清单3. chpw_root
#!/bin/sh cat all_hosts | while read host do echo "[$host]″ ssh -T -t -l root $host<<'mayday' hostname echo "root:tu8ahLae" | chpasswd if [ $? != 0 ] then echo " password of root change failed $host" else echo " password of root change OK" fi mayday done

chpw_root脚本假定ssh密钥已从远程主机交换到该脚本所在的主机。

通知用户

清单2中包含的脚本创建了一个具有初始密码集的用户,尽管通知用户其新密码的方法是手动的。 因为这通常涉及将身份验证详细信息复制并粘贴到电子邮件中,然后向用户发送邮件或给详细信息打电话。 一种更自动的方法可能是直接从脚本通过电子邮件发送给用户。 为此,必须有一个可以将用户和电子邮件地址关联起来的过程。 可以考虑的一种选择是使用一个包含用户ID及其各自电子邮件地址的文件。 另一种选择是在/ etc / password文件的gecos字段中使用以下格式的电子邮件地址:< first_name>。< last_name> @< domain&gt ;,

dxtans:!:203:1:david.tansley@btinternet.com:/home/dxtans:/usr/bin/ksh

但是,这种情况特别是在您有许多AIX框的情况下为输入错误打开了大门,因此只有在管理几个框的情况下才应考虑它。

另一种选择(我认为这是一种更快的设置方法,并且需要对/ etc / passwd文件进行零修改)是具有全局查找文件。 该文件可以包含所有可登录用户及其各自的电子邮件地址的列表,如下所示:

# cat email_lookup alpha alpha.apps@mycompany.com bravo bravo.suppt@mycompany.com charliecharlie.suppt@mycompany.com

然后可以将包含所有用户名和电子邮件帐户的全局文件email_lookup推送到所有框中。 只需更新一个全局文件就可以减少麻烦,只需记住在添加或删除用户时对其进行更新,然后通过scp将其再次推送到所有框中。 用户是否不存在于存在email_lookup文件的远程框中都没有关系,因为如果更改密码(因为该用户不存在),则不会对该用户进行查找。

清单4中包含的脚本使用先前的email_lookup文件来查找用户名及其各自的电子邮件地址,并将其帐户更改通知用户。 它从文件passfile中读取用户和密码(在本演示的前面生成),然后通过检查/ etc / passwd来检查这是一个有效帐户。 如果一切正常,那么将从email_lookup文件中提取该给定用户的电子邮件地址。 该脚本假定chpasswd已经运行,并且登录名和密码详细信息如前所述在文件passfile中存在。 理想情况下,该脚本还应包含chpasswd和pwgen例程,以便在一次点击中更改密码,如本文所示。 现在,清单4中包含的脚本应该为您提供一些有关在密码重置或更改后如何通过电子邮件自动通知用户的想法。

清单4. email_user
#!/bin/sh passfile=/home/dxtans/passfile email_lookup=/home/dxtans/email_lookup IFS=":" cat $passfile | while read user pass do if grep -w ^$user /etc/passwd >/dev/null then echo "$user - found" email_name=$(grep -w ^$user $email_lookup | awk '{print $2}') if [ "$email_name" = "" ] then echo "lookup failed for this user:$user" fi mail -s "`hostname` account change" $email_name<<mayday your account: $user new password: $pass mayday else echo "$user - NOT found" fi done

结论

将pwgen与chpasswd结合使用,可使系统管理员自动执行设置用户密码的任务。 从pwgen生成的密码不是容易预测的单词,因此确保了密码更改的良好安全做法。 我还建议了两种方式可以通知用户密码更改。


翻译自: https://www.ibm.com/developerworks/aix/library/au-chpasspwgen.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值