首页 > 技术文章 > 【Linux】学习笔记:(二)用户和组群账户管理

suhai 2021-01-04 13:21 原文


前言

  • 在Linux系统中,用户账户是登录系统的唯一凭证,其中root用户是系统的最高管理者,该用户的UID是0,与用户和组群账户相关的配置文件有/etc/passwd,/etc/shadow,/etc/group和/etc/gshadow。


一、 用户账户简介

1、 用户账户分类

  1. root用户
    • root用户UID为0。root用户的权限是最高的,普通用户无法执行的操作,root用户都能完成,所以也称之为超级用户
  2. 系统用户
    • 系统用户的UID为1~999
    • 这类用户不具有登录Linux的能力,但却是系统运行不可缺少的用户。
  3. 普通用户
    • 系统用户的UID为1000~60000
    • 在Linux系统上进行普通操作,其使用系统的权限受限制。

2、 /etc/passwd文件

  • 假设以账户zhangsan登录系统时,系统首先会检查/etc/passwd文件,存在zhangsan账户,然后确定用户zhangsan的UID,通过UID确认用户身份,如果存在,则读取/etc/shadow文件中对应的密码,核实无误,则登录系统,读取用户的配置文件
[root@centos83 home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
..............(省略)..........
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rngd:x:994:991:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

字段 字段含义
用户名 在系统中用户名应该具有唯一性
密码 存放加密用户的密码,看到的是一个x,其实密码已经被映射到/etc/shadow文件中
用户标识号(UID) 每个用户的UID都是唯一的,root用户的UID是0,普通用户的UID默认从1000开始
组群标识号(GID) 在系统内用一个整数标识用户所属的主要组群ID号,每个组群ID都是唯一的
用户名全称 用户名描述,可以不设置
主目录 用户登录系统后首先进入的目录
登录shell 用户使用的Shell类型,Linux系统默认使用的Shell是/bin/bash

2、 /etc/shadow文件

  • /etc/shadow文件内容包括用户及被加密的密码以及其他/ect/passwd不能包括的信息,比如账户有效期等
  • /etc/shadow文件只有root用户可以读取和操作,确保系统安全
[root@centos83 home]# cat /etc/shadow
root:$6$Uq9EeN5GfNDLF83M$csUva0exzO/n3PIvhKv5D1Xs3Ga06G2whjfagtEtJUW1wlQbREEd6HkOjTRCTqGuZCXvg2WQ1wdyzqY.qfAzE1::0:99999:7:::
bin:*:18397:0:99999:7:::
..............(省略)..........
sshd:!!:18625::::::
rngd:!!:18625::::::
zhangsan:$6$HMTy.raoMPbhboQn$71FPRHyRycVf3AcenfNW1n7/qD7ep.x5vSeBSSxzJdWmvjoQ98oDhfA8Kz/6PlOgKe/ksj58AXeWBPOGAm/dl1:18625:0:99999:7:::
字段 字段含义
用户名 这里的用户名和/etc/passwd中的相同
加密密码 密码已经加密,如果由用户显示"!!",则表示这个用户还没有设置密码,无法登录到系统
用户最后一次更改密码的日期 从1970年1月1日算起到最后一次修改密码的时间间隔天数
密码允许更换前的天数 如果设置为0,则禁用此功能。该字段指定用户可以更改密码的天数
密码需要更换的天数 如果设置为0,则禁用此功能。该字段指定用户必须更改密码的天数
密码更换前警告的天数 用户登录系统后,系统登录程序提醒用户密码即将过期
账户被取消激活前的天数 表示用户密码过期多少天后,系统会禁用此用户
用户账户过期日期 指定用户账户禁用的天数(从1970年1月1日开始到账户被禁用的天数),如果这个字段的值为空,账户可以永久使用
保留字段 目前为空,为将来发展做预留


二、 用户账户设置

1、useradd:创建用户

  1. 创建用户
    • useradd moon
  2. 创建用户并设置UID为1010
    • useradd -u 1010 moon
  3. 创建用户并设置用户所属群组为root
    • useradd -g root moon
  4. 创建系统用户mysql并设置所属组群
    • useradd -r -g mysql mysql
选项 选项含义
-d <主目录> 新账户每次登录时所使用的主目录
-e <过期日> 设置账户的有效期限,日期格式为MM/DD/YY
-f <失效日> 设置密码过期多少天后为失效状态
-c <用户名全称> 设置用户账户的用户名全称(描述)
-g <主要组群名> 指定用户账户所属的主要组群。
-G <次要组群名> 指定用户账户为多个次要组群的成员,每个组群使用“,”来分隔
-m 用户主目录如果不存在则自动建立
-r 创建系统用户账户,不会创建用户主目录,也不会响应在文件/etc/login.defs中定义的值
-u <用户UID> 用户的UID,数字不可以为负值

2、 usermod:修改用户账户

  1. 修改用户pp的登录名为moon
    • usermod -l moon pp
  2. 修改用户moon账户过期时间为2028年11月23日
    • usermod -e 11/23/2028 moon
  3. 修改用户moon的主目录到/home/oopp,并自动创建目录
    • usermod -d /home/oopp -m moon
选项 选项含义
-m 移动主目录的内容到新的位置
-l <新登录名> 修改用户账户名称
-u <用户UID> 修改用户UID
-c <用户名全称> 修改用户账户的用户名全称
-d <主目录> 修改用户登陆时的主目录,如果指定-m选项,用户旧目录会移动到新的目录中,如果旧目录不存在,则创建新目录
-e <过期日> 修改账户的有效期限,日期格式为MM/DD/YY
-f <失效日> 修改在密码过期后多少天即设定密码为失效状态
-g <主要组群名> 修改用户所属的主要组群
-G <次要组群名> 修改用户所属的次要组群(附加组群)

3、 userdel:删除用户账户

  1. 删除用户moon
    • userdel moon
  2. 删除用户的同时删除用户主目录
    • userdel -r moon
选项 选项含义
-r 删除用户时,把用户的主目录和本地邮件存储的目录或文件一同删除
-f 强制删除用户


三、组群账户简介

1、 组群账户分类

  1. 分类法一

    • 私有组群
      • 创建新用户时,如果没有指定该用户所属那一组群,则Linux会自动创建同名组群,此时这个组群就是私有组群
      • 将其他用户加入到这个私有组群中,会使这个组群变为标准组群
    • 标准组群
      • 也称为普通组群,可以包含多个用户账户
      • 如果使用标准组群,则在创建新用户时,应该指定该用户所属组群
  2. 分类法二

    • 主要组群
      • 当一个账户属于多个组群成员时,登录后所属组群便是主要组群,其他组群是次要组群,一个用户账户智能属于一个主要组群
    • 次要组群
      • 也称之为附加组群,一个用户账户可以属于多个次要组群

2、 /etc/group文件

  1. 文件简介

    • 内容包括组群名、组群密码、GID及该组群所包含的用户
    • 比如把某一用户加入到root组群,那么这个用户就可以浏览root用户主目录的文件
    • 如果root用户把某个文件的读写执行权限开放,root组群的所有用户就都可以修改此文件
    • 如果是可执行文件,root组群的用户也是可以执行的
[root@centos83 home]# cat /etc/group
root:x:0:
bin:x:1:
..............(省略)..........
sshd:x:74:
rngd:x:991:
zhangsan:x:1000:

字段 字段含义
组群名 组群名称
组群密码 存放加密的组群密码,看到一个x,密码已经被映射到/etc/gshadow文件中
组群标识号(GID) 在系统内用一个整数标识组群GID,每个GID都是唯一的,默认普通组群GID从1000开始,root组群GID是0
组群成员 属于这个组群的成员,如root组群的成员有root用户
  1. 组群GID范围查看
//查看系统创建组群默认的GID范围
[root@centos83 ~]# cat /etc/login.defs |grep GID
GID_MIN                  1000
GID_MAX                 60000

3、 /etc/gshadow文件

  • /etc/gshadow是/etc/group的加密文件,组群密码存放在此文件中
  • /etc/gshadow和/etc/group是互补的两个文件
  • 对于大型服务器,需要针对很多用户和组群,定制比较复杂的权限模型。设置组群密码是很有必要的
[root@centos83 ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
..............(省略)..........
zhangsan:!::

字段 字段含义
组群名 组群的名称
组群密码 密码已加密,如果组群显示的是“!”,表示这个组群没有密码
组群管理者 组群的管理者有权在该组中添加、删除用户
组群成员 属于该组群的用户成员列表,如有多个用户则用逗号分隔


四、 组群账户设置

1、 groupadd:创建组群账户

  1. 创建组群china
    • groupadd china
  2. 创建GID为1300的组群ous
    • groupadd -g 1300 ous
  3. 创建系统族群chinese
    • groupadd -r chinese
    • // cat /etc/group |grep chinese命令查看用户gid为978,1000以内均为系统组群
选项 选项含义
-g 为组群设置GID
-r 创建系统组群
-o 允许使用和别的组群相同GID创建组群
-f 即使组群存在,还是强制创建组群
-p <密码> 为新组群设置加密的密码

2、 groupmod:修改组群账户

  1. 修改china的GID为1400(修改的GID必须是新的。否则使用-o)
    • groupmod -g 1400 china
  2. 修改组群名称为suhai
    • groupmod -n suhai china
选项 选项含义
-g 设置GID
-o 重复使用组群GID
-n <新组群名> 更改组群名称

3、 groupdel:删除组群账户

  1. 删除时,如果该组群中仍旧包括某些用户,必须先删除这个用户后才能删除组群
  2. 删除组群china
    • groupdel china


五、 用户和组群账户维护

1、 passwd:设置用户密码

  1. 为用户china添加密码

    • passwd china
  2. 删除用户china密码

    • passwd -d china

2、 gpasswd:组群管理

  1. 把用户china添加到已有的组群group1中
    • gpasswd -a china group1
  2. 从组群group1中删除china用户
    • gpasswd -d china group1
选项 选项含义
-a <用户> 将一个用户加入到一个组群中
-d <用户> 将一个用户从一个组群中移除

3、 su:切换用户

  1. 切换用户china,但是不切换环境
    • su china
  2. 切换用户china,并切换环境
    • su - china
  3. 从china用户切换到root用户
    • su 或者 su -
    • 切换root用户不需要写root名称

ps:加了"-",是以login shell登陆的,所以会设置环境变量,也会将目录变更到用户所属目录下;如果不加,使用的还是切换前用户的环境变量,有时候会出错,看情况使用

4、 groups:显示组群成员

[wuyiz@centos83 ~]$ groups wuyiz
wuyiz : wuyiz suhai

5、 id:显示用户UID及该用户所属组群的GID

[wuyiz@centos83 ~]$ id
uid=1000(wuyiz) gid=1000(wuyiz) 组=1000(wuyiz),1001(suhai) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

推荐阅读