目录
用户标识符:UID与GID
用户账号
/etc/passwd文件结构
1、账号名称
2、密码
3、UID
4、GID
5、用户信息说明栏
6、家目录
7、shell
/etc/shadow文件结构
1、账号名称
2、密码
3、最近修改密码的日期
4、密码不可被修改的天数(与第三字段相比)
5、密码需要重新修改的天数(与第三字段相比)
6、密码需要修改期限前的警告天数(与第五字段相比)
7、密码过期后的账号宽限时间(密码失效日)(与第五字段相比)
8、账号失效日期
9、保留
关于用户组:有效与初始用户组,groups,newgr
/etc/group文件结构
1、组名
2、用户组密码
3、GID
4、此用户组支持的账号名称
有效用户组(effective group)与初始用户组(initial group)
groups:有效与支持用户组的观察
newgrp:有效用户组的切换
/etc/gshadow
用户标识符:UID与GID
其实Linux主机并不会直接认识你的账号名称,它仅认识ID(ID就是一组号码)。由于计算机智认知0和1,所以主机对于数字比较有概念,而账号只是为了让人们容易记忆而已,我们的ID与账号的对应就在/etc/passwd中
我们知道,一个文件的属性中有拥有人与拥有人组这两个属性,所以每个登录的用户至少会获取两个ID,一个是用户ID(UID),一个是用户组ID(GID)
所以文件判断拥有者与用户组就是依据这两个ID来进行判断的,当我们要显示文件属性时,系统会根据/etc/passwd与/etc/group的内容来找到UID与GID对应的账号与组名再显示出来
下述例子仅说明UID与账号的对应性
系统中redhat的UID与GID都是1000,它们的关系就是redhat对应的UID为1000
此时我们将/etc/passwd中将用户的UID改为2000
你会发现该文件的拥有者就变成了数字
在正常运行的Linux主机环境下,上面的操作不可以随意进行,因为系统上面已经有很多的数据被建立存在了,随意修改系统上某些账号的UID会导致某些程序无法运行,甚至导致系统无法顺利运行——因为权限的问题。上述例子中,我们如果没有将2000改回来会导致redhat下次登录时将没有办法进入自己的家目录,因为它的UID已经改为2000,但是它的家目录却记录的是1000,由于权限为700,因此它将无法进入原本的家目录
用户账号
你输入账号密码后,系统做了哪些处理?
1、先查找/etc/passwd里面是否有你输入的账号,没有则退出,有则将该账号对应的UID与GID(/etc/group)读出来,另外该账号的家目录与shell设置也一并读出
2、再核对密码表,这是Linux会进入/etc/shadow中找出对应账号与UID,然后核对一下你输入的密码是否相符
3、上面一切OK则进入shell管理的阶段
跟用户账号有关的有两个非常重要的文件,一个是管理用户UID与GID重要参数的/etc/passwd,另一个则是专门管理密码相关数据的/etc/shadow
很多程序的运行都与权限有关,而权限与UID和GID有关。因此各程序都需要读取/etc/passwd来了解不同账号的权限,因此我们/etc/passwd的权限需设置为-rw-r--r--这样
/etc/passwd文件结构
文件内容构造:每一行代表一个账号,有几行则代表几个账号在你的系统中,但是里面很多账号本来就是系统正常运行所需要的,我们简称它为系统账号,例如bin、daemon、adm等,这些账号不可随意删除
查看:vim /etc/passwd
root为系统管理员,我们可以看出每一行中都有:来相互分隔开,因此一行中共有七个东西
1、账号名称
就是账号,提供给对数字不敏感的我们用来登录系统的,需要用来对应UID
2、密码
早期UNIX系统的密码就放于此字段上,后来由于这个文件的特性是所有程序都能读取导致容易造成密码数据被窃取,所以就将这个字段的密码数据改放到/etc/shadow中去了,因此我们在这里只能看到一个【x】
3、UID
用户标识符,通常Linux对于UID有几个限制,我们可以了解一下
4、GID
这个与/etc/group有关,其实/etc/group的概念与/etc/shadow差不多,只是它是用来规范组名与GID的对应而已
5、用户信息说明栏
用来解释这个账号的意义而已,如果你使用finger的功能时,这个字段可以提供很多信息(可以了解一下chfn命令)
6、家目录
这就是用户的家目录,我们可以看到每个账号的家目录位置,所以我们使用各个用户登录时,会立刻跑到每个用户的家目录里面。所以当我们想要把家目录进行移动时,就可以在这个字段进行修改,默认的用户家目录在/home/yourIDname
7、shell
当用户登录后会获取一个shell来与系统的内核沟通以进行用户的操作任务,那为何默认shell会使用bash呢?就是在这个字段指定的,这里比较需要注意的是,有一个shell可以使账号在登录时无法获取shell环境,那就是/sbin/nologin这个东西。这也可以用来制作纯pop邮件账号的数据
/etc/shadow文件结构
基本上shadow同样以:来作为分隔符,所以每一行共有九个字段,这九个字段的用途是这样的
1、账号名称
密码也需要与账号对应,所以第一栏为账号且必须与/etc/passwd相同才行
2、密码
这个字段内的数据才是密码,而且是经过编码的密码,这些密码很难破解,但不代表不会,所以它的权限为-rw-------或----------,即只有root才可以读写,所以我们得注意,不要随意修改这个权限
由于固定的摘要算法产生的密码是特定的,因此当修改这个字段后,该密码就会失效(算不出来)。很多软件通过这个功能,在此字段前加上!或*修改密码字段,就会让密码暂时失效
3、最近修改密码的日期
记录了密码修改那一天的日期,我们可以看到bin那栏中的日期为18849呢?这是因为计算Linux是以1970年1月1日作为1而累加的日期,1971年1月1日就是366
4、密码不可被修改的天数(与第三字段相比)
记录了账号的密码在最近一次修改后需要经过几天才能再次修改,如果是0则表示可以随时修改
5、密码需要重新修改的天数(与第三字段相比)
经常修改密码是个好习惯,为了强制修改密码,这个字段可以指定最近一次更改密码后需要在多少天数内再次修改才行。你必须在这个天数内重新设置你的密码,否则这个密码将会变为过期特性,如果是99999(计算为273年)的话,那就表示密码的修改没有强制性
6、密码需要修改期限前的警告天数(与第五字段相比)
当账号密码有效期限快要到的时候(第五字段),系统会根据这个字段的设置,发出警告信息给这个账号,提醒它再过n天你的密码就要过期
7、密码过期后的账号宽限时间(密码失效日)(与第五字段相比)
密码有效期为更新日期+重新修改日期,过了该期限后用户依旧没有更新密码,那该密码就过期了,虽然密码过期了,但是该账号还是可以用来执行其他任务,包括重新登录系统获取bash。不过如果密码过期了,那当你登录系统时,系统会强制你必须重新设置你的密码才能继续登录使用,这就是密码过期特性
8、账号失效日期
这个日期与第三字段相同,都是采用1970年以来的天数的总天数,这个字段表示这个账号在此字段规定的日期之后无法再使用,这个字段通常都是在收费服务系统中
9、保留
最后一个字段为保留,看以后有没有新功能加入
关于用户组:有效与初始用户组,groups,newgr
/etc/group文件结构
该文件也是以:来作为分隔符,共分为四栏
1、组名
用来供人使用,基本上与第三字段的GID对应
2、用户组密码
通常不需要设置,这个设置一般是给用户组管理员用的,目前很少有机会设置用户组管理员。同样密码以及移动到了/etc/shadow中,所以我们只能看到【x】
3、GID
用户组ID,我们/etc/passwd第四个字段使用的GID对应的用户组名,就是由这里对应出来的
4、此用户组支持的账号名称
一个账号可以加入多个用户组中,如果某个账号想要加入此用户组时,将该账户填入这个字段即可(账号之间用逗号隔开,不要有空格),如果一个账号的初始用户组为此用户组,则此账号不写入此字段,例如root的初始用户组为root用户组并且root用户组中只有root用户,所以此字段没有数据
有效用户组(effective group)与初始用户组(initial group)
每个用户在它的/etc/passwd中都有一个GID,这个GID就是所谓的初始用户组,也就是说,用户一登录系统就会立刻拥有这个用户组的相关权限
我么给redhat用户新增加一个次要用户组
此时我们redhat账号同时支持redhat与users这两个用户组,但当我创建一个新目录或文件时,新文件的用户组为哪个?所以这时候就需要理解有效用户组了
groups:有效与支持用户组的观察
我们以redhat用户身份登录后,就可以用groups命令来查看我们所有支持的用户组了
第一个输出的用户组即为有效用户组,所以我此时去建立一个新文件的话,拥有者与用户组都为redhat
newgrp:有效用户组的切换
我们可以使用newgrp来修改有效用户组,但是newgrp是有限制的,即切换的用户组必须是已有支持的用户组
需要注意的是,记得退出newgrp的环境,因为这个命令是以一个shell来提供这个功能,就是说redhat目前是以另一个shell登录的,并且这个shell中redhat的有效用户组为users,虽然用户的环境设置不会有影响,但是用户的用户组权限将会重新计算,所以我们需要使用完newgrp后需要退出到原来的shell环境(有效用户组会改回redhat)
加入用户组有两种方式:一种是系统管理员利用usermod帮你加入;另一种是用户组管理员以gpasswd帮你加入他所管理的用户组中
/etc/gshadow
四个字段的意义为:
- 组名
- 密码栏,同样的,开头为!表示无合法密码,所以无用户组管理员
- 用户组管理员的账号
- 有加入该用户组支持的所属账号(与/etc/group内容相同)
以系统管理员来说,gshadow最大的功能就是建立用户组管理员,该用户组管理员可以将其他账号加入到自己管理的用户组中来减轻root用户的任务(这个功能已经很少使用了)