linux批量添加用户
前言:与用户账号有关的系统文件
/etc/passwd:记录用户的基本属性
/etc/passwd中每行对应一个用户:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
passwd中的字段 | 含义 |
---|---|
用户名 | |
口令 | 存放用户口令的加密串,但现在使用了shadow技术,把真正的加密后的用户口令字存放在/etc/shadow文件中,而/etc/passwd文件的口令字段中只存放一个特殊的字符,例如‘x’或者‘*’。 |
用户标识号 | 用户标识号是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的,如果几个用户名对应的用户标识号是一样的,系统内部将把他们视为同一个用户,但是他们可以有不同的口令,不同的主目录以及不同的登录shell等。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。 |
组标识号 | 记录用户所属的用户组,对应着/etc/group文件中的一条记录 |
注释性描述 | 一段任意编写的注释,创建账户时可以通过useradd –c 用户名的-c参数指定 |
主目录 | 用户的起始工作目录,用户在登录到系统之后所处的目录。 |
登录shell | 用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即shell。shell是用户与Linux系统之间的接口。Linux的shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell),csh(C Shell),ksh(Korn Shell),tcsh(TENEX/TOPS-20 type C Shell),bash(Bourne Again Shell)等。可以通过usermod的-s参数为用户指定某个shell。如果useradd不通过-s参数指定shell,那么系统使用bash为默认的登录shell,即这个字段的值为/bin/bash。为用户的登录指定特定的shell可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。不过大部分Linux系统要求只有在系统中登记过的shell才能出现在这个字段中。 |
提示
伪用户(pseudo users)
伪用户的登录shell:/usr/sbin/nologin,即不能登录。他们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
伪用户 | 含义 |
---|---|
bin | 拥有可执行的用户命令文件 |
sys | 拥有系统文件 |
adm | 拥有账户文件 |
uucp | UUCP使用 |
lp | lp或lpd子系统使用 |
nobody | NFS使用 |
/etc/shadow:加密保存用户口令
- 对安全性要求较高的Linux系统都把/etc/passwd文件中的口令字段保存在/etc/shadow文件中,超级用户才拥有该文件读权限。
- /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
- shadow中每行:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
shadow中的字段 | 含义 |
---|---|
登录名 | |
口令 | 存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登录。 |
最后一次修改时间 | 表示从某个时刻起,到用户最后一次修改口令的天数。大部分Linux系统的时间起点是1970年1月1日·。 |
最小时间间隔 | 2次修改口令之间的最小天数 |
最大时间间隔 | 口令保持有效的最大天数 |
警告时间 | 从系统开始警告用户到用户密码正式失效之间的天数。 |
不活动时间 | 用户没有登录活动但账号仍能保持有效的最大天数 |
失效时间 | 该字段给出一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。 |
/etc/group:记录用户组信息
- 每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
- 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
- group中的字段:组名:口令:组标识号:组内用户列表
字段 | 含义 |
---|---|
组名 | |
口令 | 存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。 |
组标识号 | 一个整数,被系统内部用来标识组 |
组内用户列表 | 是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。 |
实验步骤
# 准备文件user.txt和passwd.txt
newusers < user.txt # 批量创建用户
pwunconv # 取消shadow加密
cat passwd.txt | chpasswd # 批量修改密码,激活用户
pwconv # 恢复shadow加密
1. 编辑用户文件user.txt
2. newusers命令批量创建用户
3. 检查/etc/passwd文件是否新增这些用户数据
4. pwunconv命令取消shadow password功能
5. 编辑密码对照文件passwd.txt
注意:文件内容不能有空行,否则等下批量修改密码时会提示“存在空行,忽略改动”,导致修改密码失败。
6. chpasswd命令批量修改密码
- chpasswd:创建用户密码。会将经过/user/bin/passwd命令编码过的密码写入/etc/passwd的密码栏。
- 需要在root用户下操作
- chpasswd < passwd.txt语句错误,无法修改密码,可能原因是passwd.txt的内容没有正确传输给chpasswd。
7. pwconv命令恢复shadow passwd功能
- pwconv命令将密码编码为shadow password,并将结果写入/etc/shadow