与用户和用户组有关的信息都在一些系统文件中,这些文件包括/etc/passwd
和/etc/shadow
、/etc/group
等,本文梳理这三个文件的作用以及之间存在的一些关系
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程序的全路径名.
需要注意的是,系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。
定义:满足相应的系统进程对文件属主的要求而存在,方便系统管理
常见的伪用户
bin 拥有可执行的用户命令文件
sys 拥有系统文件
adm 拥有帐户文件
uucp UUCP使用
lp lp或lpd子系统使用
nobody NFS使用
还有许多其他的伪用户,都是为了各自的进程和文件所需要
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
文件中的登录名相一致的用户账号
“最小时间间隔”指的是两次修改口令之间所需的最小天数。
“最大时间间隔”指的是口令保持有效的最大天数。
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/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)管理密码就是存放在这个文件
当我们需要添加很多用户时,一个一个添加会非常费时,而且特别麻烦,这时需要我们懂得如何大量添加用户,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/passwd
中,并将/etc/shadow
的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password 功能。
# pwunconv
passwd.txt
user001:密码
user002:密码
user003:密码
user004:密码
user005:密码
user006:密码
创建用户密码,chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏
# chpasswd < passwd.txt
确定密码经编码写入/etc/passwd的密码栏后,执行命令 /usr/sbin/pwconv 将密码编码为 shadow password,并将结果写入 /etc/shadow。
# pwconv
这样就完成了大量用户的创建,可以去/home目录查看有没有这些用户,还可以使用登录验证密码是否正确