用户(User)和用户组(Group)配置文件详解

与用户相关的系统配置文件主要有/etc/passwd和/etc/shadow,其中/etc/shadow是用户资讯的加密文件,比如用户的密码口令的加密保存等;/etc/passwd 和/etc/shadow 文件是互补的;我们可以通过对比两个文件来差看他们的区别;

/etc/passwd 是系统识别用户的一个文件,做个不恰当的比喻,/etc/passwd 是一个花名册,系统所有的用户都在这里有登录记载;当我们以beinan 这个账号登录时,系统首先会查阅 /etc/passwd 文件,看是否有beinan 这个账号,然后确定beinan的UID,通过UID 来确认用户和身份,如果存在则读取/etc/shadow 影子文件中所对应的beinan的密码;如果密码核实无误则登录系统,读取用户的配置文件;

1)/etc/passwd 的内容理解:
linuxsir:x:501:502::/home/linuxsir:/bin/bash
第一字段:用户名(也被称为登录名);
第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
第三字段:UID;
第四字段:GID;
第五字段:用户名全称,备注信息等;
第六字段:用户的家目录所在位置;;
第七字段:用户所用SHELL 的类型;

root用户uid为0,任何修改uid为0的用户都将拥有root用户的权限。

2、关于/etc/shadow;

shadow内容包括用户及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作。

beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::

第一字段:用户名,在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
第二字段:密码,如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd来修改用户的密码,然后查看/etc/shadow中此字段的变化;
第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS中有定义;
第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
第九字段:保留字段,目前为空,以备将来Linux发展之用;

二、关于用户组;

具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有/etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;

1、/etc/group 解说;

group_name:passwd:GID:user_list

第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

3、/etc/gshadow 解说;

/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码;

groupname:password:admin,admin,...:member,member,...

第一字段:用户组
第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
第四字段:组成员,如果有多个成员,用,号分割;

如何设置用户组的密码? 我们可以通过 gpasswd 来实现;不过一般的情况下,没有必要设置用户组的密码;
用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;

id和finger,是两个各有测重的工具,id工具更测重用户、用户所归属的用户组、UID 和GID 的查看;而finger 测重用户资讯的查询,比如用户名(登录名)、电话、家目录、登录SHELL类型、真实姓名、空闲时间等等;如果finger 不加任何参数和用户,会显示出当前在线用户,和w命令类似;

finger 选项 用户名1 用户名2 ...

我们可以通过用户来查询所归属的组,用groups 来查询;比如我查询beinan和linuxsir 所归属的组,我们可以用groups 来查询:groups beinan linuxsir


手动添加用户:

1)修改 /etc/passwd ,添加用户记录;注意uid不能重复
lanhaitun:x:508:508::/home/lanhaitun:/bin/bash

然后执行pwconv ,让/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的内容是否同步;

2)修改/etc/group
首先,我们得查看是否有lanhaitun用户组,以及GID 508 是否被其它用户组占用;
添加:lanhaitun:x:508:
其次,是运行 grpconv 来同步/etc/group 和/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功了;

3)创建用户的家目录,并把用户启动文件也复制过去;需要把/etc/skel 目录下的.*隐藏文件复制过去;

4)改变新增用户家目录的属主和权限;默认为root,chown chmod 700

5)设置新增用户的密码;

6)测试添增用户是否成功;

可以用userdel 来删除用户;加上-r 参数,是删除家目录及mail等;所以要小心操作;用userdel 删除用户的同时,也会把其用户组删除;我们可以通过/etc/passwd 和/etc/group 的内容变化来查看;

Tags: Linux

添加新评论