linux批量添加账号


系统上面如果有一堆账号,怎么判断某些账号是否存在问题? 如果需要大量新建或者删除账号,是否需要一个一个的执行useradd或者userdel命令呢? 此外,如果还有需要使用到下一章会介绍到的 quota (磁盘配额) 时,那是否还要额外使用其他机制来建立这些限制值? 既然已经学过shell script了, 当然写支脚本让它将所有的动作做完最轻松吧!

一些账号相关的检查工具

回到顶部
先来检查看看用户的家目录、密码等数据有没有问题?这时会使用到的主要有 pwck 以及 pwconv / pwuconv 等,让我们来了解一下先!

pwck命令和grpck命令

回到顶部
pwck命令可以检查/etc/passwd文件内的信息,如果/etc/passwd文件内的数据字段有错误,也会给出提示信息。 pwck命令还可以比对/etc/passwd与/etc/shadow文件中的信息是否一致。
            [root@study ~]# pwck
            user 'ftp': directory '/var/ftp' does not exist
            user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
            user 'pulse': directory '/var/run/pulse' does not exist
            pwck: no changes
            
可以看到上面好多用户的家目录都不存在,由于那些账号绝大部分都是系统账号,确实不需要家目录, 所以这属于正常的错误!
相对应的群组检查可以使用grpck命令!

pwconv命令和pwunconv命令

回到顶部
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文件中信息本来就是同步一致的,并不会有上述的两点问题!
如果是通过手动编辑/etc/passwd文件添加账号,那么pwconv就很重要!
当然linux并不推荐直接修改编辑/etc/passwd文件,/etc/passwd文件中每个字段的修改都有对应的命令可以使用!
pwunconv命令和pwconv命令刚好相反,pwunconv命令将/etc/shadow文件的账号密码信息写回到/etc/passwd文件内, 并且删除/etc/shadow文件。
说实话这两个命令真的很无聊,完全没有存在的意义!希望永远也不要用到这两个命令!

chpasswd

回到顶部
chpasswd可以由Standard input读入未加密前的密码,将密码加密,最后将加密后的密码写入/etc/shadow文件中。 这个命令常被用在批量创建账号的情况中!
chpasswd读取的数据格式为username:password 。
例如想要更改peter的密码为123456,可以像下面这样:
            [root@study ~]# echo "peter:123456" | chpasswd
            
这样就可以更新peter的密码,chpasswd默认会读取/etc/login.defs文件内的加密算法对密码进行加密, 也可以使用-c或-e选项指定加密算法,具体可以通过--help选项查看。 其实chpasswd命令和passwd命令的--stdin选项类似,因此chpasswd命令也就变得英雄无用武之地了! 不过,在批量创建账号的shell脚本中也可以使用该命令!

批量添加账号脚本

回到顶部
我们使用passwd命令的--stdin选项或者chpasswd命令就可以批量创建用户账号, 可以参考鸟哥提供的shell script,:
            [root@study ~]# vim accountadd.sh
            #!/bin/bash
            # This shell script will create amount of linux login accounts for you.
            # 1. check the "accountadd.txt" file exist? you must create that file manually.
            #     one account name one line in the "accountadd.txt" file.
            # 2. use openssl to create users password.
            # 3. User must change his password in his first login.
            # 4. more options check the following url:
            # http://linux.vbird.org/linux_basic/0410accountmanager.php#manual_amount
            # 2015/07/22 VBird

            export PATH=/bin:/sbin:/usr/bin:/usr/sbin

            # 0. userinput
            
            usergroup=""       # if your account need secondary group, add here.
            pwmech="openssl"   # "openssl" or "account" is needed.
            homeperm="no"      # if "yes" then I will modify home dir permission to 711

            # 1. check the accountadd.txt file

            action="${1}"      # "create" is useradd and "delete" is userdel.
            if [ ! -f accountadd.txt ]; then
              echo "There is no accountadd.txt file, stop here."
              exit 1
            fi

            [ "${usergroup}" != "" ] && groupadd -r ${usergroup}
            rm -f outputpw.txt
            usernames=$(cat accountadd.txt)

            for username in ${usernames}
            do
              case ${action} in
                "create")
                  [ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""
                  useradd ${usegrp} ${username}   # 新增账号
                  [ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 6) || usepw=${username}
                  echo ${usepw} | passwd --stdin ${username} # 建立密码
                  chage -d 0 ${username} # 强制登入修改密码
                  [ "${homeperm}" == "yes" ] && chmod 711 /home/${username}
                  echo "username=${username}, password=${usepw}" >> outputpw.txt
                  ;;
                "delete")
                  echo "deleting ${username}"
                  userdel -r ${username}
                  ;;
                *)
                  echo "Usage: $0 [create|delete]"
                  ;;
              esac
            done
            
只要建立accountadd.txt文件即可,每行一个账号。 而是否需要修改密码?是否与账号相同的信息等等,可以自由选择! 若使用openssl自动猜密码时,用户的密码请由outputpw.txt去!
            [root@study ~]# vim accountadd.txt
            std01
            std02
            std03
            std04
            std05
            [root@study ~]# sh accountadd.sh create
            Changing password for user std01.
            passwd: all authentication tokens updated successfully.
            ...省略...
            

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读