【前端&运维那点事儿】三:详解Linux中的用户和用户组

1,152 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~

🍎 写在前面

先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。

这篇文章来介绍一下Linux中的用户和组以及相关命令;

Linux同Windows一样,都是多用户多任务的操作系统,在Linux中为了防止资源发生冲突,不同的用户拥有不同的权限,每个用户可以在权限允许的范围内完成不同的任务,通过这种权限的划分与管理从而实现了多用户多任务的运行机制。

🥝 用户和用户组

🧃 用户

在Linux中,每次登录系统都必须使用用户的身份去登录,登录后的权限会根据该用户的权限来确定;每个用户又都有自己的用户ID和组ID,后文中将其UID和GID。

在Linux系统中存在三种类型的用户,如下:

  • root用户: 又称超级用户或者超级管理员,该用户的UID和GID都是0,是Linux中的"上帝",该用户拥有最大的权限,无所不能;

  • 系统用户: 该用户用于运行服务,无家目录,也不能登录系统,系统用户的UID在Centers7中是1-999;

  • 普通用户: 普通用户是由root创建,该用户可以登录,拥有属于自己的家目录;该用户的权限由root用户分配。

🥭 用户组

用户组是具有相同特征用户的逻辑集合,简单的说就是一个用户组内的所有用户具有相同的权限,用户组又分为:

  • 标准组:一个组内可以容纳多个用户

  • 私有组:组内只有自己一个用户

🍇 用户组和用户的关系

在Linux系统中,每个用户必定属于一个主组,默认情况下属于与其同名的用户组,最多可以有31个附属组,从用户权限的角度看,主组和附属组其实差别不大,用户也会拥有其附属组的相关权限。

🍍 与用户相关的配置文件

在Linux中的用户实际上就是系统中的标识,而这些标识是用文件进行存储的,接下来我们先来看一下这些文件

🍌 /etc/passwd

该文件中存储的是用户的所有信息,如下图所示:

image_zwoz6Sw-Gb.png

该文件中一行是一个用户,一行信息中通过:将其拆分为7个字段,分别是:

passwd字段详解.drawio_g1L8Jng3E7.png

🍋 /etc/shadow

该文件存储的是用户密码和一些用户的信息,如下图所示:

shadow文件_jN4H0m7RXK.png

该文件中还是一行一个用户,每个字段的含义如下:

shadow字段详解_VkBl49nGMq.png

🍊 /etc/group

该文件保存的是用户组及其相关信息,如下图所示:

group文件_kzTfinItbq.png

每个字段的含义如下:

grooup字段详解_zCYaeYSJt-.png

🍈 /etc/gshadow

该文件保存的是组的密码信息,不太常用,字段解释如下:

gshadow字段详解_A401YTY6Zx.png

在创建一个新的用户后,会分别更新这几个文件;但是我们尽量不要直接修改这些文件从而达到修改用户的目的,避免出现一些错误。

🍓 相关命令

🍒 用户相关

和用户相关的命令主要由三个:

  • useradd: 创建用户

    useradd [-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <主组>][-G <附加组>][-u <uid>][用户帐号]
    
  • userdel: 删除用户

    userdel [-r][用户帐号] # -r 选项用于删除家目录
    
  • usermod: 修改用户

    usermod [-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <主组>][-G <附加组>][-l <帐号名称>][-u <uid>][用户帐号]
    
  • passwd: 设置密码

    passwd [-l] [-u] [-d] [username]
    #############################################
    # -l 停止账户的使用 仅root权限可以用
    # -u 启用被停用的账户
    # -d 清空密码 仅root权限可以用
    # 注意:passwd命令会出现一个交互,根据提示输入即可
    ##############################################
    

一些示例命令如下:

# 创建用户
[root@ywanzhou ~]$ useradd y  # 创建普通用户 y
[root@ywanzhou ~]$ useradd -g root ywz  # 创建普通用户 ywz 并指定主组为 root
[root@ywanzhou ~]$ useradd -d /home/ywanzhou -g root ywzhou  # 指定家目录和主组
[root@ywanzhou ~]$ tail -3 /etc/passwd  # 查看最新创建的3个用户
y:x:1003:1003::/home/y:/bin/bash
ywz:x:1004:0::/home/ywz:/bin/bash
ywzhou:x:1005:0::/home/ywanzhou:/bin/bash

# 修改用户
[root@ywanzhou ~]$ usermod -d /home/yyy ywz  # 修改用户家目录
[root@ywanzhou ~]$ usermod -u 5432 ywz       # 修改用户的UID
[root@ywanzhou ~]$ tail -3 /etc/passwd       # 查看修改结果
y:x:1003:1003::/home/y:/bin/bash
ywz:x:5432:0::/home/yyy:/bin/bash

# 删除用户
[root@ywanzhou ~]$ userdel -r y             # 删除用户并删除家目录

🍑 用户组相关

跟组相关的命令也是3个,分别是:

  • groupadd: 创建组,可以添加-g参数自定义GID;

  • groupdel: 删除组;

  • groupmod: 修改组,-g参数修改修改GID,-n参数修改组名;

  • gpasswd: 用于将一个用户添加到组或者从组中删除。

示例代码如下:

[root@ywanzhou demo]$ groupadd yGroup             # 创建组
[root@ywanzhou demo]$ groupadd -g 8848 ywzGroup   # 创建组指定GID
[root@ywanzhou demo]$ tail -2 /etc/group          # 查看创建的结果
yGroup:x:1003:
ywzGroup:x:8848:

[root@ywanzhou demo]$ groupmod -n y_group yGroup # 修改名称
[root@ywanzhou demo]$ groupmod -g 9999 ywzGroup  # 修改GID
[root@ywanzhou demo]$ tail -2 /etc/group
ywzGroup:x:9999:
y_group:x:1003:

[root@ywanzhou demo]$ groupdel y_group           # 删除组
[root@ywanzhou demo]$ groupdel ywzGroup          # 删除组

[root@ywanzhou demo]$ gpasswd -a zhou root       # 向组内添加成员
Adding user zhou to group root
[root@ywanzhou demo]$ gpasswd -d zhou root       # 删除组内成员
Removing user zhou from group root


🍎 其他命令

现在介绍一下其他命令,用于查询当前用户的一些信息:

  • id:显示用户当前的UID、GID和用户所属的组列表;

  • groups:显示指定用户所属的组列表;

  • whoami:显示当前用户的名称;

  • w/who:显示登录用户及相关信息。

🍐 写在最后

这篇文章到这也就结束了,如果对你有帮助可以三连支持一下,下一篇文章我们来介绍Linux中的文件及其目录权限;

如果喜欢这个专栏,可以给专栏点个关注~