用户和组文件介绍

1.用户账号文件:passwd

passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

选项

-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。

知识扩展

与用户、组账户信息相关的文件

存放用户信息:

/etc/passwd
/etc/shadow

存放组信息:

/etc/group
/etc/gshadow

用户信息文件分析(每项用:隔开)

例如:jack:X:503:504:::/home/jack/:/bin/bash
jack  //用户名
X  //口令、密码
503  //用户id(0代表root、普通新建用户从500开始)
504  //所在组
:  //描述
/home/jack/  //用户主目录
/bin/bash  //用户缺省Shell

组信息文件分析

例如:jack:$!$:???:13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的口令
13801  //创建日期与今天相隔的天数
0  //口令最短位数
99999  //用户口令
7  //到7天时提醒
*  //禁用天数
*  //过期天数

实例

如果是普通用户执行passwd只能修改自己的密码。如果新建用户后,要为新用户创建密码,则用passwd用户名,注意要以root用户的权限来创建。

[root@localhost ~]# passwd linuxde    //更改或创建linuxde用户的密码;
Changing password for user linuxde.
New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功;

普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。

[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用户的密码;
(current) UNIX password: //请输入当前密码;
New UNIX password: //请输入新密码;
Retype new UNIX password: //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功;

比如我们让某个用户不能修改密码,可以用-l选项来锁定:

[root@localhost ~]# passwd -l linuxde    //锁定用户linuxde不能更改密码;
Locking password for user linuxde.
passwd: Success //锁定成功; [linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户;
[linuxde@localhost ~]$ passwd //linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: //输入linuxde的当前密码;
passwd: Authentication token manipulation error //失败,不能更改密码;

再来一例:

[root@localhost ~]# passwd -d linuxde  //清除linuxde用户密码;
Removing password for user linuxde.
passwd: Success //清除成功; [root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态;
Empty password. //空密码,也就是没有密码;

注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。

/etc/passwd每一个分段的含义:
1、账户名称:
    用来对应UID
2、密码:
    早起Unix系统的密码就是防止这个字段上,但是英文这个档案的特性是所有程序都能读取,容易造成密码数据被窃取
    应此后来就将这个字段的密码数据放到了/etc/shadow中了,所以这里使用【X】,
3、UID:
    这就是使用者标示符,UId有以下限制:
    ID             该ID使用的者特性
    0            UID是0时,代表这个账号是【系统管理员】!所以当你的其他啊账号名称也具有root
                的权限是,就将该账号的UID改为0即可,一个系统上面的系统管理不见得只有root,
                不过不建议有多个UID为0的账号。
    1~499        保留给系统使用的ID,默认500以下的数字给系统作为保利账号只是一个习惯。
                由于系统上面启动的服务希望使用较小的权限去运行,应此不希望使用root的身份去执行
                这些服务,所以我们就得要提供这些运行中的程序的拥有者账号才行,这些系统账号通常是不可登陆的,
                所以才会有/sbin/nologin这个特殊的shell的存在。
    500~        一般使用者
4、GID:
        这个与/etc/group有关!其实/etc/group的观念与/etc/passwd差不多,应用来规范组名
5、用户信息说明栏:
6、家目录:
        root的家目录在/root,所以当root登陆的之后,就会立刻跑到/root目录里头,如果坏、这个账号需要使用
        特别大的空间,就可以对这个字段进行修改,已移动到其他同硬盘。默认的用户家目录在/home/youIdname
             
/etc/shadow文件结构:
    
8、Shell:
        定义用户登陆系统使用什么shell,这里需要注意,有一个shell可以用来特带成让账户无法取得shell环境的登陆动作!
        那就是/sbin/nologin这个特殊东西,也可以用来制作pop邮件账号者的数据。(Post Office Protocol)

通过查看“/etc/passwd”文件,可以得到如下完整的系统账号文件

2.用户影子文件——shadow

/etc/shadow

由于shadow文件的权限,所以,只有root可以读

vi /etc/shadow

一共有九列信息:

第一列表示用户名;

第二列表示经过加密之后的密码,如果密码是!!或者*,表示没有密码,不能登录;

第三列表示密码的最后一次修改日期,使用1970.1.1作为标准时间,每过一天时间戳+1;

第四列表示两次密码的修改间隔;

第五列表示密码的有效期;

第六列表示密码到期之前的警告时间;

第七列表示密码过期之后的宽限天数(0表示到期后立即失效,-1则永久不失效);

第八列表示账号失效时间,要用时间戳表示,时间戳换算为日期:date -d "1970-01-01 18382 days",日期换算为时间戳:echo $(($(date --date="2020/05/13" +%s)/86400+1));

第九列保留

3.用户组账号文件——group和gshadow

group:

/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。

此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找。

/etc/group 文件的内容可以通过 Vim 看到:


可以看到,此文件中每一行各代表一个用户组。在前面章节中,我们曾创建 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 就可以了。

一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

到此,我们已经学习了/etc/passwd、/etc/shadow、/etc/group,它们之间的关系可以这样理解,即先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码。

gshadow:

前面讲过,/etc/passwd 文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow 中。本节要将的 /etc/gshadow 文件也是如此,组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。

首先,我们借助 Vim 命令查看一下此文件中的内容

文件中,每行代表一个组用户的密码信息,各行信息用 ":" 作为分隔符分为 4 个字段,每个字段的含义如下:

组名:加密密码:组管理员:组附加用户列表

组名


同 /etc/group 文件中的组名相对应。

组密码


对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 "!",指的是该群组没有组密码,也不设有群组管理员。

组管理员


从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。那么,什么是群组管理员呢?

考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。

不过,由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。

组中的附加用户


该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。

最新文章

  1. Android Volley完全解析(一),初识Volley的基本用法
  2. Python 深入理解yield
  3. 一个创建Coco2d-x项目的脚本
  4. POJ 3384 Feng Shui
  5. Kinect SDK C++ - 2. Kinect Depth Data
  6. 第4天:JS入门-给div设置宽高背景色
  7. 我的hibernate学习记录(二)
  8. js数组遍历(for in ,for of ,map,foreach,filter)的区别
  9. Exp3 免杀原理与实践_05齐帅
  10. python-web自动化-Python+Selenium之expected_conditions:各种判断
  11. Python 远程桌面协议RDPY简介
  12. CentOS中利用Docker安装RabbitMQ
  13. L老师 Shader编程教程 学习
  14. linux以16进制方式查看文件
  15. 第15章 RCC—使用HSE/HSI配置时钟
  16. centos6.8下redis的安装和配置
  17. Java封装Redis常用操作
  18. JAVAEE——SSH项目实战04:联系人添加、列表显示和修改
  19. javascript遍历json对象数据的方法
  20. Dell服务器iDrac口默认账号密码和IP

热门文章

  1. Python-随机模块-random
  2. gRPC-微服务间通信实践
  3. Python练习题 021:递归方法求阶乘
  4. 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令
  5. 【Java】socket编程,输入输出中的问题
  6. Java知识系统回顾整理01基础03变量07final关键字
  7. DX12龙书 02 - DirectXMath 库中与向量有关的类和函数
  8. UDP协议网络Socket编程(java实现C/S通信案例)
  9. 【人人都懂密码学】一篇最易懂的Java密码学入门教程
  10. [转] Swoft HTTP 服务