Linux中的用户配置文件(passwd、shadow、group、gshadow)

您所在的位置:网站首页 linux配置文件是什么意思 Linux中的用户配置文件(passwd、shadow、group、gshadow)

Linux中的用户配置文件(passwd、shadow、group、gshadow)

#Linux中的用户配置文件(passwd、shadow、group、gshadow)| 来源: 网络整理| 查看: 265

一、用户信息文件  : /etc/passwd

首先我们可以使用命令man 5 passwd查看以下 passwd 文件的格式

我们看出 passwd 文件的格式是由七个字段组成,每个字段通过冒号分隔,并且每一行代表一个用户。下面我们将通过我个人的passwd文件作为模板,详细介绍每一个字段的含义。

第一字段  :用户名称(account)

这个字段没什么可说的,就是用户个人的用户名,不过,需要注意的是用户在起名时要遵守相应规范。

第二字段  :密码标识(password)

该字段若是 x ,则代表这个用户设有密码。x 不能省略,如果省略,系统在登录时就不会去 /etc/shadow 中搜索真正的密码,从而认为这个用户没有密码,于是直接登录,很不安全。

真正的密码并不存在于 passwd 文件,而是保存在/etc/shadow中,这里保存的只是一个密码标识。

第三字段  :UID

0 :表示该账户是超级用户

1~499 : 表示该账户是系统用户(伪用户)。专门用来为系统的启动服务或启动命令服务,一旦删除这些伪用户,系统会崩溃。

                 这些用户不能登录,其原因在于最后一个字段的 /sbin/nologin ,我们之后再谈。

500及以上  :  普通用户

当我们想把一个普通用户变为超级用户,只需把该用户的这个字段改为 0 ,这样,该用户便拥有了超级用户的权限。

注意 : 改变的只是该用户的权限,其家目录还是原来的位置。

第四字段   : GID(用户初始组ID)

初始组:指用户一登录就立刻拥有这个用户组的相关权限,每个用户都必须有一个初始组,并且初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。

附加组: 指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个

在 passwd 该字段下看到的 GID 是这个用户的初始组 GID,那么这个组到底指的是哪一个组呢?这时就需要匹配 /etc/group 文件,才能看到。我们不建议更改初始组,如果需要把用户添加到其他组中,请使用附加组。

第五字段  :  用户说明

该字段只是对本用户的一个备注说明,用户可以把一些重要信息保存在这里,方便日后的查看。

第六字段  :  家目录

普通户  : /home/用户名/

管理员  : /root/

第七字段  :登录之后的 shell

shell :命令解释器。我们需要通过 shell 才能与系统内核进行交流,shell有很多种,Linux 中的默认 shell 是 bash。

我们发现所有伪用户在这个字段是 /sbin/nologin , 我们知道 log in 是登录的意思,那么no log in就是禁止登陆,所以,所有的伪用户才无法登录。

也就是说,如果我把某一普通用户的这一字段由 /bin/bash 改为 /sbin/nologin ,该用户就会被禁用,无法登陆。

当然,如果粗心大意把这个字段的 shell 名字写错了,也会造成无法登陆的情况。

 

二 、影子文件  /etc/shadow

这个文件也是每一行代表一个用户,而且它与 passwd 文件的内容是对应的。shadow 下的每一行由冒号分隔的九个字段组成。

我们依然进行详细介绍。

第一字段  :  用户名

不赘述。

第二字段  : 加密密码

真正的密码就是保存在这一字段,这里是显示的加密后的密码。虽然经过加密,但我们还是不要轻易把这个文件传给别人,因为完全可以通过暴力破解来从加密密码中得到真正的密码。

如果这一字段是两个感叹号 !!或者一个星号 * ,表示该用户没有设置密码,无法登录。

第三字段  : 密码最后一次的修改日期

该字段是用时间戳表示的。(以1970年1月1日为起始时间,每过一天加一,得出来的数字称为时间戳。)

如果我们想通过命令行对时间戳进行换算,可以用以下命令:

时间戳换算日期

date  -d  “1970-01-01 17066 days”

日期换算时间戳

echo  $(($(date  --date=”2018/01/01”+%s)/86400+1))

第四字段 : 两次密码的修改时间间隔

该字段所谓的间隔是与上一字段相比较的。

如果该字段是 0,则可在任意时刻修改该用户的密码。

假如该字段是 10 ,则要求 10 天内不允许用户修改密码。

第五字段  : 密码有效期

比如设置为30,则每隔30天必须改密码。如果到期,根据后面第六、第七字段来行动。

我这里的这一字段显示的是99999,是个相当长的时间,等同永远不会失效。

第六字段 :修改密码警告天数 n

当距离密码有效期(第五字段)还剩 n 天时,系统每天都会提醒你修改密码。

第七字段 :密码到期后的宽限天数

0:代表密码过期后立即失效

-1:代表密码永远不会失效

n :往后宽限 n 天

第八字段 :账号失效时间

要用时间戳表示。该账号到期立即失效。

第九字段 : 保留

 

三、组信息文件  /etc/group

该文件显示的是用户组的内容,有四个字段,每个字段的特性与前面的 passwd 和 shadow 的一些字段是相似的,所以这里简单介绍一下。

第一字段:组名

第二字段:组密码标志

与 passwd 中的第二字段特性相同,只是一个密码标志,真正的密码在 /etc/gshadow 中。只是我们通常不给组设置密码。

第三字段:GID

第四字段:组中附加用户

我们发现这个字段是空的,说明我们没有向其中添加其他用户。并且在这一字段,我们是看不到初始用户的,要想查看该组的初始用户,则要通过 GID 来与 passwd 文件对照查看。也许有人疑惑用户名和用户组名不是一样吗,何必特意去查看呢?因为这只是一般情况,有时候也会有人故意设置成不同的名字。

四、组密码文件  /etc/gshadow

该文件每行也是四个字段,group 和 gshadow 是两个对应的文件,但因为我们也很少用到它,所以这里也只是简述。

第一字段 : 组名

第二字段 : 组密码

第三字段 :组管理员的用户名

第四字段 : 组中附加用户

这四个字段我们从名字就可以了解其功能和特性,不在赘述。

 

五、用户管理的相关文件

关于用户,除了以上比较重要的四个配置文件,我们还需要了解一些其他相关文件。

1、家目录

     在前文提到过,在这里温习一下。

     普通用户: /home/用户名/,所有者和所属组都是此用户,权限是700

     超级用户: /root/,所有者和所属组都是root用户,权限是550

2、用户的邮箱   : /var/spool/mail/用户名/

      之后的学习会用到,这里先做一了解。

3、用户模板目录  :  /etc/skel

   这里解释一下什么叫模板目录。当我们添加一个新用户时,进入其家目录会发现是空的,但其实不然,这里面还有一些隐藏文件(见下图),这些文件自然不会是凭空出现,而是从某个地方复制过来的,这个地方就是模板目录。 

 所以,我们可以进入这个模板目录中,创建一个名为new的文件,这样,每次当我们添加新用户时,这个文件就会自动复制到该用户的家目录中。一般我们可以写一些警告或者注意事项在里面。

 

六、用户管理命令及探究

1、添加用户

useradd  [选项]   用户名

-u  UID  : 手工指定用户的UID号

-d 家目录  : 手工指定用户的家目录

-c 用户说明 : 手工指定用户的说明

-g 组名 : 手工指定用户的初始组

-G 组名 : 指定用户的附加组

-s  shell :  手工指定用户登录的shell,默认是 /bin/bash

 

接下来我们思考一下,在添加一个新用户时,系统都做了哪些操作呢?

由前面的配置文件我们知道,首先,它在passwd、shadow、group、gshadow中都添加了一行该用户及其用户组的信息,然后在 /home 下创建自己的家目录,并且从模板目录 /etc/skel 中复制文件到其家目录,在 /var/spool/mail 中建立自己的邮箱。

我们其实可以通过手动更改这些文件达到添加用户的目的,不过有点繁琐罢了。

另外在我们创建新用户时,许多值都是系统默认的,这些值大多被保存在以下两个配置文件中。

第一个是  /etc/default/useradd

GROUP=100        用户默认组(公有模式,我们用的是私人模式,所以不同)

HOME=/home       用户家目录

INACTIVE=-1        密码过期宽限天数

EXPIRE=               密码失效时间

SHELL=/bin/bash  默认shell

SKEL=/etc/skel     模板目录

CREATE_MAIL_SPOLL=yes  是否建立邮箱

 

第二个是 /etc/login.defs

PASS_MAX_DAYS 99999     密码有效期

PASS_MIN_DAYS  0             密码修改间隔

PASS_MIN_LEN  5                密码最小位数(由于太简单了,所以这里未生效,真正的位数定义在别的地方)

PASS_WARN_AGE  7            密码到期时间

UID MIN  500                           最小和最大UID范围       

UID_MAX  60000

GID MIN  500                           最小和最大GID范围       

GID_MAX  60000

 

2、更改密码

passwd  [选项]  用户名

-S   查询用户的密码状态 (root权限)

-l (小写 L)   锁定用户(实际上是在shadow中的加密密码字段前加了两个感叹号, root权限)

-u   解锁用户 (root权限)

--stdin 可通过管道符输出的数据作为用户的密码(echo “123” | passwd -–stdin 用户名)

我们之前在介绍shadow配置文件时,曾说过其第二字段加密密码,如果密码位是 !! 或 * 代表没有密码,不能登录。现在把这句更新一下,如果在该字段的加密密码前有感叹号,其效果也是一样的。这样用户无法登陆,也就达到了锁定用户的结果。这就是 passwd -l 锁定用户和 passwd -u 解锁用户的原理。(详见下图)

 

3、修改用户信息(针对已存在的用户)

usermod  [选项]  用户名

 -u  修改UID

-c   修改说明信息

-G   修改附加组

-L   锁定用户

(实际上是在 shadow 中的加密密码字段前加了一个感叹号,通过passwd锁定用户是加两个感叹号,其实作用都一样)

-U  解锁用户

 

4、更改用户密码状态

chage [选项] 用户名

-l (小写L) : 列出用户详细的密码状态

-d 日期   : 修改密码的最后一次的修改日期

-m 天数   : 两次密码修改间隔(shadow字段4)

-M 天数   :密码有效期(shadow字段5)

-w 天数    :密码过期前警告天数(shadow字段6)

-I  天数     : 密码过期后宽限天数(shadow字段7)

-E  日期    : 账号失效时间(shadow字段8)

实际上,这些命令都可以通过修改配置文件 shadow 来达到,其实这个命令中最常用的一条命令为

chage  -d  0  用户名

这个命令其实是把密码修改日期归零了,这样用户在一登录就需要修改密码,修改过后,shadow第三字段发生改变,该用户以后就可以正常使用了。这条命令的作用常见于批量添加用户后设置了一个极为简单的密码,当某人使用其中的一个用户第一次登录时,就可以创建属于自己的密码。

5、删除用户

userdel  [选项]  用户名

-r 删除用户同时删除用户家目录

相当于手动删除这些文件:

/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/var/spool/mail/用户名、/home/用户名

 

6、切换用户身份

su    [选项]  用户名

  -  : 连带用户的环境变量一起切换

 -c :仅执行一次命令,而不切换用户身份

如果我们只用用 su root 命令切换用户身份,通过 env 命令查看环境变量时,发现一些信息根本没变(见下图)。既然已经切换了root,为什么有些地方还是看起来还是之前的普通用户?这一问题通常会导致一些常见的错误发生。所以我们在切换用户时,一定要使用 “-” 选项

su – root -c “useradd test_3”

不切换成root,只是利用root身份执行一个命令。

7、添加组

groupadd  [选项]  组名

-g GID  :   指定组id

8、修改组

groupmod  [选项]  组名

-g  GID  :  修改组id

-n 新组名  :修改组名

例:group  -n  group2 group1       把组名从group1修改为group2

 

9、删除用户组

groupdel  组名

如果该组中有初始用户,该组是删除不了的

如果该组中只有附加用户,可以删除

 

10、向组中添加用户

gpasswd  [选项]   组名

-a 用户名 :把用户加入组

-d 用户名 : 把用户从组中删除



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3