账号文件由5个部份组成:1、“/etc/passwd”,系统用户配置文件,储存了系统中所有用户的基本信息;2、“/etc/shadow”,储存了系统中用户的密码信息;3、“/ect/group”,用户组配置文件,储存了用户组的所有信息等等。
本教程操作环境:linux5.9.8系统、DellG3笔记本。
linux系统的账号文件有5个组成部份:
1、/etc/passwd文件
/etc/passwd文件,是系统用户配置文件,储存了系统中所有用户的基本信息,但是所有用户都可以对此文件执行读操作。
首先我们来打开这个文件,瞧瞧到底包含什么内容,执行命令如下:
[root@localhost ~]# vi /etc/passwd #查看一下文件内容 root:x:0:0:root:/root:/bin/bash 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 ...省略部分输出...
登陆后复制
可以看见,/etc/passwd文件中的内容十分规律,每行记录对应一个用户。
读者可能会问,Linux系统中默认如何会有如此多的用户?那些用户中的绝大多数是系统或服务正常运行所必需的用户,这些用户一般称为系统用户或伪用户。系统用户难以拿来登入系统,但也不能删掉,由于一旦删掉,依赖那些用户运行的服务或程序就不能正常执行,会造成系统问题。
除了这般,每行用户信息都以":"作为分隔符,界定为7个数组,每位数组所表示的涵义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
登陆后复制
接出来,给你们挨个介绍这种主键。
用户名
用户名,就是一串代表用户身分的字符串。
上面讲过,用户名仅是为了便捷用户记忆,Linux系统是通过UID来辨识用户身分,分配用户权限的。/etc/passwd文件中就定义了用户名和UID之间的对应关系。
密码
"x"表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中(下一节做详尽介绍)。
在初期的UNIX中,这儿保存的就是真正的加密密码串,但因为所有程序都能读取此文件,特别容易引起用户数据被盗取。
尽管密码是加密的,并且采用暴力破解的方法也是才能进行破解的。
为此,如今Linux系统把真正的加密密码串放置在/etc/shadow文件中,此文件只有root用户可以浏览和操作,这样就最大限度地保证了密码的安全。
须要注意的是,尽管"x"并不表示真正的密码,但也不能删掉,假如删掉了"x",这么系统会觉得这个用户没有密码,因而造成只输入用户名而不用输入密码就可以登录(只能在使用无密码登入,远程是不可以的),除非特殊情况(如破解用户密码),这其实是不可行的。
UID
UID,也就是用户ID。每位用户都有惟一的一个UID,Linux系统通过UID来辨识不同的用户。
实际上,UID就是一个0~65535之间的数,不同范围的数字表示不同的用户身分。
GID
全称“GroupID”,简称“组ID”,表示用户初始组的组ID号。这儿须要解释一下初始组和附加组的概念。
初始组,指用户登录时就拥有这个用户组的相关权限。每位用户的初始组只能有一个linux 输入法,一般就是将和此用户的用户名相同的组名作为该用户的初始组。例如说,我们手工添加用户lamp,在构建用户lamp的同时,还会构建lamp组作为lamp用户的初始组。
附加组,指用户可以加入多个其他的用户组,并拥有这种组的权限。每位用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这种用户组就是这个用户的附加组。附加组可以有多个,但是用户可以有这种附加组的权限。
举例来说,刚才的lamp用户除属于初始组lamp外,我又把它加入了users组,这么lamp用户同时属于lamp组和users组,其中lamp是初始组,users是附加组。
其实,初始组和附加组的身分是可以更改的,并且我们在工作中不更改初始组,只更改附加组,由于更改了初始组有时会让管理员逻辑混乱。
须要注意的是,在/etc/passwd文件的第四个数组中见到的ID是这个用户的初始组。
描述性信息
这个数组并没有哪些重要的用途,只是拿来解释这个用户的意义而已。
主目录
也就是用户登入后有操作权限的访问目录,一般称为用户的主目录。
比如,root超级管理员帐户的主目录为/root,普通用户的主目录为/home/yourIDname,即在/home/目录下构建和用户名相同的目录作为主目录,如lamp用户的主目录就是/home/lamp/目录。
默认的Shell
Shell就是Linux的命令类库,是用户和Linux内核之间沟通的桥梁。
我们晓得,用户登录Linux系统后,通过使用Linux命令完成操作任务,但系统只认识类似0101的机器语言,这儿就须要使用命令类库。也就是说,Shell命令类库的功能就是将用户输入的命令转换成系统可以辨识的机器语言。
一般情况下,Linux系统默认使用的命令类库是bash(/bin/bash),其实还有其他命令类库,比如sh、csh等。
2、/etc/shadow文件
/etc/shadow文件,用于储存Linux系统中用户的密码信息,又称为“影子文件”。
后面介绍了/etc/passwd文件linux系统用户配置文件是什么?,因为该文件准许所有用户读取,易造成用户密码泄漏,因而Linux系统将用户的密码信息从/etc/passwd文件中分离下来,并单独放在了此文件中。
/etc/shadow文件只有root用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
注意,假若这个文件的权限发生了改变,则须要注意是否是恶意功击。
介绍此文件之前,我们先打开瞧瞧,执行如下命令:
[root@localhost ~]#vim /etc/shadow root: $6$9w5Td6lg $bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: …省略部分输出…
登陆后复制
同/etc/passwd文件一样linux系统用户配置文件是什么?,文件中每行代表一个用户,同样使用":"作为分隔符,不同之处在于,每行用户信息被界定为9个数组。每位数组的涵义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
登陆后复制
接出来,给你们分别介绍这9个主键。
用户名
同/etc/passwd文件的用户名有相同的含意。
加密密码
这儿保存的是真正加密的密码。目前Linux的密码采用的是SHA512散列加密算法,原先采用的是MD5或DES加密算法。SHA512散列加密算法的加密等级更高,也愈发安全。
注意,这串密码形成的乱码不能手工更改,假如手工更改,系统将难以辨识密码,致使密码失效。好多软件透过这个功能,在密码串前加上"!"、"*"或"x"使密码暂时失效。
所有伪用户的密码都是"!!"或"*",代表没有密码是不能登入的。其实,新创建的用户假如不设定密码,这么它的密码项也是"!!",代表这个用户没有密码,不能登入。
最后一次更改时间
此数组表示最后一次更改密码的时间,但是,为何root用户显示的是15775呢?
这是由于,Linux估算日期的时间是以1970年1月1日作为1不断累加得到的时间,到1971年1月1日,则为366天。这儿显示15775天,也就是说,此root帐号在1970年1月1日以后的第15775天更改的root用户密码。
这么,究竟15775代表的是哪三天呢?可以使用如下命令进行换算:
[root@localhost ~]# date -d "1970-01-01 15775 days" 2013年03月11日 星期一 00:00:00 CST
登陆后复制
可以看见,通过以上命令,即可将其换算为我们习惯的系统日期。
最小更改时间间隔
最小更改间隔时间,也就是说,该数组规定了从第3数组(最后一次更改密码的日期)起,多长时间之内不能更改密码。若果是0,则密码可以随时更改;若果是10,则代表密码更改后10天之内不能再度更改密码。
此数组是为了针对个别人频繁修改帐户密码而设计的。
密码有效期
时常变更密码是个好习惯,为了强制要求用户变更密码,这个数组可以指定距离第3数组(最后一次修改密码)多长时间内需要再度变更密码,否则该帐户密码进行过期阶段。
该数组的默认值为99999,也就是273年,可觉得是永久生效。假如改为90,则表示密码被更改90天以后必须再度更改,否则该用户正式过期。管理服务器时,通过这个数组强制用户定期更改密码。
密码须要变更前的警告天数
与第5数组相比较,当帐户密码有效期快到时,系统会发出警告信息给此帐户,提醒用户"再过n天你的密码就要过期了,请早日重新设置你的密码!"。
该数组的默认值是7,也就是说,距离密码有效期的第7天开始,每次登入系统就会向该帐户发出"更改密码"的警告信息。
密码过期后的宽限天数
合称为“口令失效日”,简单理解就是,在密码过期后,用户假如还是没有更改密码,则在此数组规定的宽限天数内,用户还是可以登入系统的;假如过了宽限天数,系统将不再让此帐户登录,也不会提示帐户过期,是完全禁用。
例如说,此数组规定的宽限天数是10,则代表密码过期10天后失效;若果是0,则代表密码过期后立刻失效;若果是-1,则代表密码永远不会失效。
帐号失效时间
同第3个数组一样,使用自1970年1月1日以来的总天数作为帐户的失效时间。该数组表示,帐号在此数组规定的时间之外,不论你的密码是否过期,都将难以使用!
该数组一般被使用在具有收费服务的系统中。
保留
这个数组目前没有使用,等待新功能的加入。
3、/ect/group文件
/ect/group文件是用户组配置文件,即用户组的所有信息都储存在此文件中。
此文件是记录组ID(GID)和组名相对应的文件。上面讲过,etc/passwd文件中每行用户信息的第四个数组记录的是用户的初始组ID,这么,此GID的组名究竟是哪些呢?就要从/etc/group文件中查找。
/etc/group文件的内容可以通过Vim见到:
[root@localhost ~]#vim /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon …省略部分输出… lamp:x:502:
登陆后复制
可以看见,此文件中每一行各代表一个用户组。在上面章节中,我们曾创建lamp用户,系统默认生成一个lamp用户组,在此可以看见,此用户组的GID为502,目前它仅作为lamp用户的初始组。
各用户组中,还是以":"作为数组之间的分隔符,分为4个数组,每位数组对应的含意为:
组名:密码:GID:该用户组中的用户列表
登陆后复制
接出来,分别介绍各个数组具体的含意。
组名
也就是是用户组的名称,有字母或数字构成。同/etc/passwd中的用户名一样,组名也不能重复。
组密码
和/etc/passwd文件一样,这儿的"x"仅仅是密码标示,真正加密后的组密码默认保存在/etc/gshadow文件中。
不过,用户设置密码是为了验证用户的身分,那用户组设置密码是拿来做哪些的呢?用户组密码主要是拿来指定组管理员的,因为系统中的帐号可能会特别多,root用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,假如有用户须要加入或退出某用户组,可以由该组的组管理员代替root进行管理。并且这项功能目前极少使用,我们也极少设置组密码。假如须要赋于某用户调整某个用户组的权限,则可以使用sudo命令替代。
组ID(GID)
就是群组的ID号,Linux系统就是通过GID来分辨用户组的,同用户名一样,组名也只是为了易于管理员记忆。
这儿的组GID与/etc/passwd文件中第4个数组的GID相对应,实际上,/etc/passwd文件中使用GID对应的群组名,就是通过此文件对应得到的。
组中的用户
此数组列举每位群组包含的所有用户。须要注意的是,假如该用户组是这个用户的初始组,则该用户不会写入这个数组,可以如此理解,该数组显示的用户都是这个用户组的附加用户。
举个事例,lamp组的组信息为"lamp:x:502:",可以见到,第四个数组没有写入lamp用户,由于lamp组是lamp用户的初始组。假如要查询那些用户的初始组,则须要先到/etc/passwd文件中查看GID(第四个数组),之后到/etc/group文件中比对组名。
每位用户都可以加入多个附加组,而且只能属于一个初始组。所以我们在实际工作中,假如须要把用户加入其他组,则须要以附加组的方式添加。比如,我们想让lamp也加入root这个群组,这么只须要在第一行的最后一个数组加入lamp,即root:x:0:lamp就可以了。
通常情况下,用户的初始组就是在构建用户的同时完善的和用户名相同的组。
4、/etc/gshadow文件
组用户信息储存在/etc/group文件中,而将组用户的密码信息储存在/etc/gshadow文件中。
首先,我们利用Vim命令查看一下此文件中的内容:
[root@localhost ~]#vim /etc/gshadow root::: bin:::bin, daemon daemon:::bin, daemon ...省略部分输出... lamp:!::
登陆后复制
文件中,每行代表一个组用户的密码信息,各行信息用":"作为分隔符分为4个数组,每位数组的涵义如下:
组名:加密密码:组管理员:组附加用户列表
登陆后复制
组名
同/etc/group文件中的组名相对应。
组密码
对于大多数用户来说,一般不设置组密码,因而该数组常为空,但有时为"!",指的是该群组没有组密码,也不设有群组管理员。
组管理员
从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。这么,哪些是群组管理员呢?
考虑到Linux系统中帐号太多,而超级管理员root可能比较繁忙,因而当有用户想要加入某群组时,root显然不能及时做出回应。这些情况下,假如有群组管理员,这么他能够将用户加入自己管理的群组中,也就免去麻烦root了。
不过,因为目前有sudo之类的工具,因而群组管理员的这个功能早已极少使用了。
组中的附加用户
该数组显示这个用户组中有什么附加用户,和/etc/group文件中附加组显示内容相同。
5、/etc/login.defs文件
/etc/login.defs文件用于在创建用户时,对用户的一些基本属性做默认设置,比如指定用户UID和GID的范围中文linux操作系统,用户的过期时间,密码的最大宽度,等等。
须要注意的是,该文件的用户默认配置对root用户无效。而且,当此文件中的配置与/etc/passwd和/etc/shadow文件中的用户信息有冲突时,系统会以/etc/passwd和/etc/shadow为准。
读者可自行使用vim/etc/login.defs命令查看该文件中的内容,表1中对文件中的各个选项作出了具体的解释。
表1/etc/login.defs文件内容设置项含意
MAIL_DIR/var/spool/mail
创建用户时,系统会在目录/var/spool/mail中创建一个用户邮箱,例如lamp用户的邮箱是/var/spool/mail/lamp。
PASS_MAX_DAYS99999
密码有效期,99999是自1970年1月1日起密码有效的天数,相当于273年,可理解为密码仍然有效。
PASS_MIN_DAYS0
表示自先前更改密码以来,最少隔多少天后用户能够再度更改密码,默认值是0。
PASS_MIN_LEN5
指定密码的最小宽度,默认不大于5位,然而如今用户登入时验证早已被PAM模块代替,所以这个选项并不生效。
PASS_WARN_AGE7
指定在密码到期前多少天,系统就开始通过用户密码正式到期,默认为7天。
UID_MIN500
指定最小UID为500,也就是说,添加用户时,默认UID从500开始。注意,假若手工指定了一个用户的UID是550,这么下一个创建的用户的UID都会从551开始,哪怕500~549之间的UID没有使用。
UID_MAX60000
指定用户最大的UID为60000。
GID_MIN500
指定最小GID为500,也就是在添加组时,组的GID从500开始。
GID_MAX60000
用户GID最大为60000。
CREATE_HOMEyes
指定在创建用户时,是否同时创建用房主目录,yes表示创建,no则不创建,默认是yes。
UMASK077
用房主目录的权限默认设置为077。
USERGROUPS_ENAByes
指定删掉用户的时侯是否同时删掉用户组,打算地说,这儿指的是删掉用户的初始组,此项的默认值为yes。
ENCRYPT_METHODSHA512
指定用户密码采用的加密规则,默认采用SHA512,这是新的密码加密模式,原来的Linux只能用DES或MD5加密。