Linux 用户和组

  • Linux中用户和组的相关文件
    • /etc/passwd
    • /etc/shadow
    • /etc/group
    • Linux用户
    • Linux中的组
    • 用户操作
      • useradd的更多使用方式
      • passwd 命令使用方式
      • userdel 删除用户的用法
      • usermod 修改用户
    • 关于 useradd 命令后台执行情况
    • Linux的文件保护

Linux中用户和组的相关文件

最重要的两个文件内容

  1. /etc/passwd : 这是 Linux 中储存用户信息的一个文件,每一行对应一个用户的账号记录;
  2. /etc/shadow : 这是 Linux 中用来储存用户名和密码的一个文件,文件一行内容对应一个用户名和一个密码;
  3. /etc/group : 这是 Linux 中用来储存用户和组关系的一个文件。
    我们来一个一个对它们的内容进行解析

/etc/passwd

我们首先查看 /etc/passwd 的文件内容:

cat /etc/passwd


唔 文件内容太长了,我们单独挑出一行内容来对其核心部分进行解释

root:x:0:0:root:/root:/bin/bash
# 选中文件内容的第一行,root用户的相关信息
# 以冒号为分隔符,将它分为 7 个部分
root    x   0   0   root    /root   /bin/bash
1       2   3   4   5       6       7
字段 含义
1 用户名
2 密码
3 用户账号的UID
4 所属主要组的GID
5 用户描述信息
6 家目录
7 登陆 shell 信息

这里对密码段的内容进行解释,现在 Linux 的密码不再存放在 passwd 文件里了,现在的密码已经放到 /etc/shadow 文件中了,只是用 x 充当一个占位符。

/etc/shadow

cat /etc/shadow

(这里不再过多展示图片了,直接截取第一行 root 用户的相关信息进行展示)

root:$6$jclnGz.Ft4JORmf5$s9CmchcHqxDhVQPx7UGxq2icymWkO.Y8Kpxd5MXj330.JAAWKvg82YS074spsqWWU5EGjLQ08e.kgcGqJ6rcP1::0:99999:7:::- 还是按照惯例将冒号作为分割符
root:   1
$6$jclnGz.Ft4JORmf5$s9CmchcHqxDhVQPx7UGxq2icymWkO.Y8Kpxd5MXj330.JAAWKvg82YS074spsqWWU5EGjLQ08e.kgcGqJ6rcP1: 2
:       3
0:      4
99999:  5
7:      6
::      7
字段 含义
1 用户名
2 加密的密码字串信息
3 上次修改密码的时间
4 密码最短有效天数,默认为0
5 密码最长有效天数,默认为99999
6 提前多少天警告用户口令将要过期,默认为7
7 在密码过期多少天后就禁用该用户

这里也简单提一下第二个密码字段:如果是 */!! 的话就代表没有设置密码不能登陆。

练习题:统计哪些没有设置密码的用户,输出用户名和数量
awk可以解决,如果不会可以了解一下
cat /etc/shadow |awk -F: 'BEGIN{i=0} $2 ~ /!!|*/ {i++;print $1"没有设置密码"}END{print "一共有"i"个用户没有设置密码"}'

/etc/group

cat /etc/group- 选取root的group信息
root:x:0: ==> 组名:密码占位符:gid:

Linux用户

Linux中的用户是什么样的呢?
两个比较简单的命令: 1 - useradd 可以新建用户;2 - id 可以查看用户的id号:

useradd ameameid ameame

我们可以看一下运行得到的结果:

useradd ameame
id ameame
uid=1005(ameame) gid=1005(ameame) 组=1005(ameame)

这里我们看到 id 命令输出的结果有 3 个: uid、gid、组:

名称 作用
uid user id 相当于 Linux 中用户的身份证号
gid group id ,group 是 Linux 中的组,相当于组的身份证号
一个账户可以属于多个组,组里面存放用户存在的组名集合

Linux 中的用户分为:

  1. 超级用户 - root uid 为 0;
  2. 程序用户 - uid 为 1 - 999 ( 准确点应该是 201 -999 ) ;
  3. 普通用户 - uid 大于等于 1000,默认从1000开始,60000截止,但是这里的截至并不是 uid 大于 60000 就会出错,而是程序默认创建最大到 60000,可以通过 useradd -u 指定用户 uid 。

Linux中的组

Linux 中组分为:

  1. 主要组/基本组
  2. 次要组/附属组

一个组会有一个组对应的 gid ,一个用户都有一个主要组,但是可以有多个附属组,所以 id username 得到的 gid 是用户主要组的 gid ,得到的组是用户所在是所有组名及其 gid 组成的一个集合。

用户操作

useradd的更多使用方式

命令选项 作用
-e 指定账号的失效时间
-u 指定 UID
-s 指定 shell 地址
-g 指定主要组名
-G 指定用户的次要组名
-c 指定用户描述信息
-d 指定用户家目录
-M 不为该用户创建家目录
-r 新建系统用户,不会新建家目录,就是程序用户

我们直接使用看看效果

useradd -u 318038 -s /bin/bash -c psglgd=maybe psglgd_maybe
cat /etc/passwd | grep maybe- 得到结果
psglgd_maybe:x:318038:1006:psglgd=maybe:/home/psglgd_maybe:/bin/bash

我们可以看到我们新建的用户 psglgd_maybe 的 uid 是我们设定的318038,shell 地址为 /bin/bash,描述信息为psglgd=maybe。其他的方法也可以采用类似的方法进行定义,这时我们来研究一下 -g 与 -G:
-g : 指的是给用户设置主要组
-G :指的是给用户设置次要组

 - 首先新建组
groupadd dota2 -g 1314
# 新建组 - dota2 ,并设置 gid 为1214
useradd -g dota2 Ameame
cat /etc/passwd | grep Ameame
# Ameame:x:1006:1314::/home/Ameame:/bin/bash
id Ameame
# uid=1006(Ameame) gid=1314(dota2) 组=1314(dota2)- 我们可以看到结果:- 新建的用户 Ameame 的主要组 id 为 1314 -- dota2 这个组
groupadd LGD -g 5000
# 新建组 - LGD ,并设置 gid 为5000 (w)
useradd -g dota2 -G LGD ameame
cat /etc/passwd | grep ameame
# ameame:x:1007:1314::/home/ameame:/bin/bash
id ame
# uid=1007(ameame) gid=1314(dota2) 组=1314(dota2),5000(LGD)- 我们可以看到结果- 新建的用户 ameame 的主要组 id 为1314 -- dota2 这个组- 所存在组的集合为:1314 ,5000 两个组,是 dota2 和 LGD 两个组的集合- dota2 是用户存在的主要组 LGD 是次要组

passwd 命令使用方式

passwd 是 Linux 中帮用户设置密码的命令,新建了用户之后可以使用passwd 命令对用户进行密码设置,密码设置完成后该用户就是可以远程登陆的用户了。

补充提问:什么用户是可登陆的用户?
1 - 用户是否设置密码,设置了密码是登陆的条件;
2 - shell是否为正常的 shell,异常shell是不能登陆的。

什么是正常的 shell?
/bin/bash 和 /bin/sh 是正常的shell;
/sbin/nologin 是异常 shell,nologin 是不能登陆的。

格式: passwd [选项] 用户名

选项 作用
-d 清空用户的密码
-l 锁定用户密码
-u 解锁用户密码
-S 查看用户账号的状态

首先我们来看看 passwd 是如何来设置密码的:

passwd ameame- 显示输出:
更改用户 ameame 的密码 。
新的 密码:

这里有一个很有意思的现象:当我们输入回文密码的时候(12321 这种就被称为回文明密码),它会有一个报错

更改用户 ameame 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:

这边将用户 ameame 的密码设置成 123456,就可以用这个新创建的账号密码从远程登陆我们的 Linux 系统了!

现在我们先看一下 ameame 这个账号 设置密码后 shadow 文件格式,然后分别使用 passwd -l 和 -u 对比一下区别:

cat /etc/shadow | gerp ameame
ameame:$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::
passwd -l ameame
锁定用户 ameame 的密码 。
passwd: 操作成功
cat /etc/shadow | gerp ameame
ameame:!!$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::1. 这里我们看到,密码前面被设置了!!2. !! 的密码就是无效密码
passwd -u ameame
解锁用户 ameame 的密码。
passwd: 操作成功
cat /etc/shadow | gerp ameame
ameame:$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::3. 解锁后!!消失了 密码是可以使用的有效密码

另外,补充一个设置密码常用方式:

echo "123456" | passwd username --stdin- stdin的意思是标准化输入- 代表收录前面 echo 的值 123456 认为是从键盘输入的,然后进行密码的设置- 因为设置密码的时候默认收取的是键盘数据,因此使用该命令设置密码的时候需要加一条这个语句

userdel 删除用户的用法

使用: userdel [-r] username
-r --remove
意思是删除用户,并删除创建的家目录和用户邮箱,删除用户的时候使用 -r 方法能将用户的所有数据删除干净。

usermod 修改用户

全称: user modifies
使用方式: usermod [选项] username

命令选项 作用
-e 指定账号的失效时间
-u 指定 UID
-s 指定 shell 地址
-g 指定主要组名
-G 指定用户的次要组名
-c 指定用户描述信息
-u 解锁用户密码
-l 锁定用户密码
 - 这里只补充一点, usermod -l username 和 passwd -l username 的区别- 下面看例子
usermod -l ameame
cat /etc/shadow|grep ameame
ameame:!$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::

区别就是 usermod -l 锁定用户密码的时候,只会在加密密码前面加上一个 ! 让这个密码变成无效密码。

关于 useradd 命令后台执行情况

  1. 修改文件 - /etc/passwd;
  2. 修改文件 - /etc/shadow;
  3. 修改文件 - /etc/group;
  4. 创建家目录 - /home/username;
  5. 复制 /etc/skel/* 到新建用户的家目录下;
  6. 在/var/spool/mail 文件新建用户邮箱。

/etc/skel/* 文件夹下,复制的内容都有哪些?

  • .bash_profile : 用户每次登陆的时候就会执行的脚本文件;
  • .bash_logout :用户每次退出的时候就会执行的脚本文件;
  • .bashrc : 每次进入新的bash环境下执行的脚本文件,就是每次使用bash命令的时候就会加载这个配置文件;
  • .bashhistory : 记录了上次注销前使用的最多1000条命令。

Linux的文件保护

因为 passwd 、shadow 这些文件都十分重要,因此不要轻易的对这些文件进行操作,Linux 为了方便系统恢复,设置了备份文件:

ls /etc/passwd*
# 输出 /etc/passwd  /etc/passwd-
ls /etc/shadow*
# 输出 /etc/shadow  /etc/shadow-
ls /etc/group*
# 输出 /etc/group  /etc/group-

带 - 号的就是备份文件,我们来探究一下备份文件和原文件之间的差异:

diff /etc/passwd /etc/passwd-
# 判断两个文件是否有差异- 输出内容
29a30
> ameame:x:1007:1314::/home/ameame:/bin/bash
# 这似乎是我们新建的一个用户,我们再新建一个用户看看两个之间有什么变化
useradd chalify
diff /etc/passwd /etc/passwd-- 输出内容
30d29
< chalify:x:1007:1007::/home/chalify:/bin/bash
# 嗷? 没有了ameame 但是新建的用户 chalify 出现了

以此,得到结论:
在有对用户进行改动时,备份文件和原文件存在差异,备份文件每次都会比原文件少一次操作,会落后一步操作命令。

至此,关于 Linux 的用户和组的内容结束了,这里面涉及了很多常用的文件命令以及方法,喜欢别忘了点个赞点个关注!

如果想学更多,欢迎来访 三创 一起交流学习.

Linux 系统基础 — 用户和组(吐血总结,超详细,看这一篇就够了!dog)相关推荐

  1. linux系统中用户和组的管理

    Linux 是支持多用户.多任务的操作系统:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  2. 快速理解Linux系统中用户和组的概念及如何查看存储用户与组信息的文件/etc/passwd,/etc/shadow,/etc/group及其子段意思

    文章目录 用户与组的类型 1.linux中用户的类型 2.linux中用户组的类型 3. linux中存储用户信息的文件是哪个?且其中的字段是什么意思 4.linux中存储组信息的文件是哪个?且其中的 ...

  3. Linux下的用户、组和权限的详细解释

            前言:在linux中一切都是文件(文件夹和硬件设备是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行交流的最好途径.由于所有的配置文件都是文 ...

  4. 给linux系统增加一个系统调用并测试,超详细含错误锦集

    操作系统:给linux系统内核增加系统调用并测试 实验内容 实验环境 实验过程 1.安装环境 2.给内核增加系统调用 3.编译内核 4.安装内核 5.编辑测试文件 实验内容 1.给linux系统内核增 ...

  5. [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

    文章目录 \*本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发 ...

  6. 【Linux系统】第9节 linux系统中用户分类以及用户与组属性的修改示例

    目录 1 用户的分类 2 用户与组的相关设置文件 2.1 passwd文件 2.2 shadow文件 2.3 group文件 3 CentOS系统中用户与组的创建及属性的修改示例 3.1 相关命令 3 ...

  7. linux 查看当前用户和组的信息,Linux查看所有用户和组信息

    主要通过以下两个命令: cat /etc/passwd cat /etc/group 步骤一:cat /etc/passwd查看所有的用户信息,详情如下图: 步骤2:cat /etc/passwd|g ...

  8. Linux——万字总结用户与组相关知识!建议收藏!

    目录 用户和组 用户账户 用户的家目录 组账号 创建用户背后发生了什么? ​ 小练习:# 截取第七字段并查找出几种 useradd命令 userdel -r 用户名 -->家目录和本地邮件目录全 ...

  9. linux系统下io的过程,Linux系统基础知识:IO调度

    Linux系统基础知识:IO调度 IO调度发生在Linux内核的IO调度层.这个层次是针对Linux的整体IO层次体系来说的.从read()或者write()系统调用的角度来说,Linux整体IO体系 ...

最新文章

  1. python 开发版-MicroPython开发之物联网快速开发板
  2. Python函数16道入门练习题
  3. 将SimCLR应用于NLP预训练模型,提升句子语义表征效果
  4. SIGIR 2020 | 第四范式提出深度稀疏网络模型,显著提升高维稀疏表数据分类效果...
  5. 如何编写java请求_如何避免将Java请求从Java Web服务器发送到自身?
  6. 【MySQL】(4)操作数据表中的记录
  7. python 数字转化excel行列_Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换...
  8. 【BZOJ】【3301】【USACO2011 Feb】Cow Line
  9. access与sqlserver数据转换
  10. SAP VA01 消息 没有用于售达方 XXXXXX 的客户主记录存在
  11. 520用Java制作一个表白app
  12. 小说:凡人修仙路基础
  13. 无线网络和本地连接同时启用后,无线网络无法使用。
  14. CSR蓝牙开发资源大全(软件代码资料)
  15. Linux命令之帮助手册
  16. FPA软件评估方法论
  17. Shadow Caster Culling
  18. Pr剪辑上分攻略 -- 文字效果
  19. 记一次应急响应之ssh日志和apache2日志分析
  20. 人工智能与大学数学是“近亲”

热门文章

  1. Lambda表达式断点排错
  2. 手机刷机后数据还在吗?手机刷机并保留数据的方法
  3. AcWing 913. 排队打水 (排序不等式)
  4. python无法打开文件_Python无法打开文件“没有这样的文件或目录”
  5. dns辅助服务器的配置时,主dns配置的区域文件不能复制过来,使用bind部署DNS主从服务器...
  6. DELL PowerEdge 远程开机
  7. 2020最新版C/C++学习路线图--从C小白到C界精英
  8. 在php输出字符串时执行html标签,把字符串作为PHP代码执行
  9. 简笔彩色圣诞树的python代码_Python绘图,圣诞树,花,爱心 | Turtle篇-Go语言中文社区...
  10. 通过api向外发送报告清单邮件