如何在Linux下批量添加用户以及/etc/passwd、/etc/group、/etc/shadow文件的总结

与用户和用户组有关的信息都在一些系统文件中,这些文件包括/etc/passwd/etc/shadow/etc/group等,本文梳理这三个文件的作用以及之间存在的一些关系

1./etc/passwd文件

Linxu下每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性,这个文件对所有的用户都是可读的,该文件是用户管理工作中最重要的一个文件,下面我们看看该文件都有什么信息

# cat /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段。该文件存在一类用户–伪用户,这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

/etc/passwd中每行的格式是:

注册名:口令:用户标识号:组标识号:用户名:主目录:登录Shell

注册名是代表用户账号的字符串

通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。

为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

口令,有些系统是口令的加密字符

虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在`/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

用户标识号是一个整数,系统内部用来标识用户

一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。

通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

组标识号字段记录的是用户所属的组

这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

用户名字段

包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。

主目录

该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。 在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下,对自己的主目录有读、写、执行(搜索)权限。

登录shell要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序

命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名.

我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

需要注意的是,系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。

2.伪用户

定义:满足相应的系统进程对文件属主的要求而存在,方便系统管理

常见的伪用户

bin 拥有可执行的用户命令文件 
sys 拥有系统文件 
adm 拥有帐户文件 
uucp UUCP使用 
lp lp或lpd子系统使用 
nobody NFS使用

还有许多其他的伪用户,都是为了各自的进程和文件所需要

3./etc/shadow文件

Linux系统把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。这样安全性增加了。

/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生

# pwconv

如果修改了/etc/passwd文件,需要输入pwconv命令让/etc/passwd 和/etc/shadow同步

格式如下:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

# cat /etc/shadow

bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-bus-proxy:!!:17396::::::
systemd-network:!!:17396::::::
Peithon:$6$4KSbeYA2$/z0F3x6UlKQ/Eeez2W.Eq2t63ANb7UBMHoE.SlhkNN9jx322jAn0L/3URE2lONezIEyXcmAQCBe65w8REQ3gT.:17612:0:99999:7:::

“登录名”是与/etc/passwd文件中的登录名相一致的用户账号

“最小时间间隔”指的是两次修改口令之间所需的最小天数。

“最大时间间隔”指的是口令保持有效的最大天数。

4./etc/group文件

每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。

当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。

用户组的所有信息都存放在/etc/group文件中,格式:

组名:口令:组标识号:组内用户列表

# cat /etc/group

bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
Peithon:x:1000:

“组名”是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

“口令”字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是x,*。

“组标识号”与用户标识号类似,也是一个整数,被系统内部用来标识组。

“组内用户列表”是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

如果需要在这个文件添加新的记录,运行grpconv来同步/etc/group/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功。

/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件



5.批量添加用户

当我们需要添加很多用户时,一个一个添加会非常费时,而且特别麻烦,这时需要我们懂得如何大量添加用户,Linux下就提供了这样的工具

编辑一个用户的文本文件

每一列按照/etc/passwd密码文件的格式书写,每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号

user.txt

user001::600:100:user001:/home/user001:/bin/bash
user002::601:100:user002:/home/user002:/bin/bash
user003::602:100:user003:/home/user003:/bin/bash
user004::603:100:user004:/home/user004:/bin/bash
user005::604:100:user005:/home/user005:/bin/bash
user006::605:100:user006:/home/user006:/bin/bash

导入数据,创建用户

# newusers < user.txt

可以查看passwd和主目录是否存在数据

将/etc/shadow参生的shadow密码解码

/etc/shadow产生的shadow密码解码,然后回写到 /etc/passwd中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password 功能。

# pwunconv

编辑每个用户对应的密码文件

passwd.txt

user001:密码
user002:密码
user003:密码
user004:密码
user005:密码
user006:密码

将密码写入passwd的密码栏

创建用户密码,chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏

# chpasswd < passwd.txt

同步到/etc/shadow文件

确定密码经编码写入/etc/passwd的密码栏后,执行命令 /usr/sbin/pwconv 将密码编码为 shadow password,并将结果写入 /etc/shadow。

# pwconv

这样就完成了大量用户的创建,可以去/home目录查看有没有这些用户,还可以使用登录验证密码是否正确

你可能感兴趣的:(Linux学习笔记)