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