• 13.7 CentOS 7 环境下大量创建帐号的方法
    • 13.7.1 一些帐号相关的检查工具
    • 13.7.2 大量创建帐号范本(适用 passwd —stdin 选项)

    13.7 CentOS 7 环境下大量创建帐号的方法

    系统上面如果有一堆帐号存在,你怎么判断某些帐号是否存在一些问题?这时需要哪些软件的协助处理比较好? 另外,如果你跟鸟哥一样,在开学之初或期末之后,经常有需要大量创建帐号、删除帐号的需求时,那么是否要使用 useradd 一行一行指令去创建? 此外,如果还有需要使用到下一章会介绍到的 quota (磁盘配额) 时,那是否还要额外使用其他机制来创建这些限制值?既然已经学过 shell script 了, 当然写支脚本让它将所有的动作做完最轻松吧!所以啰,下面我们就来聊一聊,如何检查帐号以及创建这个脚本要怎么进行比较好?

    13.7.1 一些帐号相关的检查工具

    先来检查看看使用者的主文件夹、密码等数据有没有问题?这时会使用到的主要有 pwck 以及 pwconv / pwuconv 等,让我们来了解一下先!

    • pwck
      pwck 这个指令在检查 /etc/passwd 这个帐号配置文件内的信息,与实际的主文件夹是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,会提示使用者修订。 一般来说,我只是利用这个玩意儿来检查我的输入是否正确就是了。
    1. [root@study ~]# pwck
    2. user 'ftp': directory '/var/ftp' does not exist
    3. user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
    4. user 'pulse': directory '/var/run/pulse' does not exist
    5. pwck: no changes

    瞧!上面仅是告知我,这些帐号并没有主文件夹,由于那些帐号绝大部分都是系统帐号,确实也不需要主文件夹的,所以,那是“正常的错误!”呵呵!不理他。 ^_^。 相对应的群组检查可以使用 grpck 这个指令的啦!

    • pwconv
      这个指令主要的目的是在“将 /etc/passwd 内的帐号与密码,移动到 /etc/shadow 当中!” 早期的 Unix 系统当中并没有 /etc/shadow 呢,所以,使用者的登陆密码早期是在 /etc/passwd 的第二栏,后来为了系统安全,才将密码数据移动到 /etc/shadow 内的。使用 pwconv 后,可以:

    • 比对 /etc/passwd 及 /etc/shadow ,若 /etc/passwd 内存在的帐号并没有对应的 /etc/shadow 密码时,则 pwconv 会去 /etc/login.defs 取用相关的密码数据,并创建该帐号的 /etc/shadow 数据;

    • 若 /etc/passwd 内存在加密后的密码数据时,则 pwconv 会将该密码栏移动到 /etc/shadow 内,并将原本的 /etc/passwd 内相对应的密码栏变成 x !

    一般来说,如果您正常使用 useradd 增加使用者时,使用 pwconv 并不会有任何的动作,因为 /etc/passwd 与 /etc/shadow 并不会有上述两点问题啊! ^_^。不过,如果手动设置帐号,这个 pwconv 就很重要啰!

    • pwunconv
      相对于 pwconv , pwunconv 则是“将 /etc/shadow 内的密码栏数据写回 /etc/passwd 当中, 并且删除 /etc/shadow 文件。”这个指令说实在的,最好不要使用啦! 因为他会将你的 /etc/shadow 删除喔!如果你忘记备份,又不会使用 pwconv 的话,粉严重呢!

    • chpasswd
      chpasswd 是个挺有趣的指令,他可以“读入未加密前的密码,并且经过加密后, 将加密后的密码写入 /etc/shadow 当中。”这个指令很常被使用在大量创建帐号的情况中喔! 他可以由 Standard input 读入数据,每笔数据的格式是“ username:password ”。 举例来说,我的系统当中有个使用者帐号为 vbird3 ,我想要更新他的密码 (update) , 假如他的密码是 abcdefg 的话,那么我可以这样做:

    1. [root@study ~]# echo "vbird3:abcdefg" | chpasswd

    神奇吧!这样就可以更新了呢!在默认的情况中, chpasswd 会去读取 /etc/login.defs 文件内的加密机制,我们 CentOS 7.x 用的是 SHA512, 因此 chpasswd 就默认会使用 SHA512 来加密!如果你想要使用不同的加密机制,那就得要使用 -c 以及 -e 等方式来处理了! 不过从 CentOS 5.x 开始之后,passwd 已经默认加入了 —stdin 的选项,因此这个 chpasswd 就变得英雄无用武之地了! 不过,在其他非 Red Hat 衍生的 Linux 版本中,或许还是可以参考这个指令功能来大量创建帐号喔!

    13.7.2 大量创建帐号范本(适用 passwd —stdin 选项)

    由于 CentOS 7.x 的 passwd 已经提供了 —stdin 的功能,因此如果我们可以提供帐号密码的话, 那么就能够很简单的创建起我们的帐号密码了。下面鸟哥制作一个简单的 script 来执行新增用户的功能喔!

    1. [root@study ~]# vim accountadd.sh
    2. #!/bin/bash
    3. # This shell script will create amount of linux login accounts for you.
    4. # 1\. check the "accountadd.txt" file exist? you must create that file manually.
    5. # one account name one line in the "accountadd.txt" file.
    6. # 2\. use openssl to create users password.
    7. # 3\. User must change his password in his first login.
    8. # 4\. more options check the following url:
    9. # 0410accountmanager.html#manual_amount
    10. # 2015/07/22 VBird
    11. export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    12. # 0\. userinput
    13. usergroup="" # if your account need secondary group, add here.
    14. pwmech="openssl" # "openssl" or "account" is needed.
    15. homeperm="no" # if "yes" then I will modify home dir permission to 711
    16. # 1\. check the accountadd.txt file
    17. action="${1}" # "create" is useradd and "delete" is userdel.
    18. if [ ! -f accountadd.txt ]; then
    19. echo "There is no accountadd.txt file, stop here."
    20. exit 1
    21. fi
    22. [ "${usergroup}" != "" ] && groupadd -r ${usergroup}
    23. rm -f outputpw.txt
    24. usernames=$cat accountadd.txt
    25. for username in ${usernames}
    26. do
    27. case ${action} in
    28. "create"
    29. [ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""
    30. useradd ${usegrp} ${username} # 新增帐号
    31. [ "${pwmech}" == "openssl" ] && usepw=$openssl rand -base64 6 || usepw=${username}
    32. echo ${usepw} | passwd --stdin ${username} # 创建密码
    33. chage -d 0 ${username} # 强制登陆修改密码
    34. [ "${homeperm}" == "yes" ] && chmod 711 /home/${username}
    35. echo "username=${username}, password=${usepw}" >> outputpw.txt
    36. ;;
    37. "delete"
    38. echo "deleting ${username}"
    39. userdel -r ${username}
    40. ;;
    41. *)
    42. echo "Usage: $0 [create|delete]"
    43. ;;
    44. esac
    45. done

    接下来只要创建 accountadd.txt 这个文件即可!鸟哥创建这个文件里面共有 5 行,你可以自行创建该文件!内容每一行一个帐号。 而是否需要修改密码?是否与帐号相同的信息等等,你可以自由选择!若使用 openssl 自动猜密码时,使用者的密码请由 outputpw.txt 去捞~鸟哥最常作的方法,就是将该文件打印出来,用裁纸机一个帐号一条,交给同学即可!

    1. [root@study ~]# vim accountadd.txt
    2. std01
    3. std02
    4. std03
    5. std04
    6. std05
    7. [root@study ~]# sh accountadd.sh create
    8. Changing password for user std01.
    9. passwd: all authentication tokens updated successfully.
    10. ....(后面省略)....

    这支简单的脚本你可以在按如下的链接下载:

    • http://linux.vbird.org/linux_basic/0410accountmanager/accountadd.sh

    原文: https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/120.html