Linux基础笔记5 | 用户与用户组管理

基本概念

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个唯一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

用户通过用户账户可以登录到系统,并访问已经被授权使用的资源。

系统根据账户来区分属于每个用户的文件、进程和任务,并给每个用户提供特定的工作环境。

用户与用户组的关系

  1. 一个用户可以存在于一个组中(一对一的关系)
  2. 一个用户可以存在多个用户组中,拥有多个组的共同权限(一对多的关系)
  3. 多个用户可以存在一个组中,这些用户具有和组相同的权限(多对一的关系)
  4. 多个用户可以存在多个组中(多对多的关系)

账户类型

  • 系统账户:守护进程使用系统账户来访问文件和目录,这些操作通常不允许通过 shell 的交互式登录系统账户进行,主要是方便系统管理,大多是在安装系统及部分应用程序时自动添加的。
  • 交互式账户:通过 shell 或物理控制台登录系统访问 linux 系统中的资源。
    • 超级用户账户(root):对系统具有绝对的控制权,可以管理系统中的所有资源。
    • 普通用户账户:访问自己权限范围内的目录和文件。
  • 使用用户标识(UID)来区分不同的用户:root 用户的 uid 为0,其他系统用户的 uid从1到999,普通用户账户默认从1000开始编号,创建用户的同时会自动创建一个与用户同名的用户组;使用组标识(GID)来区分不同的组,普通组的 gid 默认也是从1000开始编号的,root 用户的 gid 为0。

用户组

  • 具有相同特性的一组用户的集合。
  • 一个用户拥有一个自己的主组,其他组为该用户的附加组。

不过需要注意的是,centos7系列的版本是上述所说的编号规则

用户配置文件/etc/passwd

存放用户账户及其相关信息(密码除外)

/etc/passwd 文件对所有用户可读:

在这里插入图片描述

/etc/passwd 具体文件内容如下:

在这里插入图片描述

各个字段的含义:(以冒号为分隔符)

  • 用户名
  • 加密的密码(使用 x 占位表示)
  • 用户 ID
  • 用户组 ID
  • 用户的描述信息(默认用户的全名或者空值)
  • 用户的主目录
  • 登录 shell 类型

举例:

root:x:0:0:root:/root:/bin/bash

  1. 用户名:root

  2. 加密的密码:x占位表示

  3. 用户ID:0

  4. 用户组ID:0

  5. 用户的描述信息:root

  6. 用户的主目录:/root

  7. 用户登录的 shell 类型:/bin/bash(/sbin/nologin,表示禁止登录)

密码信息配置文件/etc/shadow

用于存放密码相关的信息,包括用户密码

/etc/shadow 文件只对超级用户 root 可读,普通用户无法读取

在这里插入图片描述

/etc/shadow 具体文件内容如下:

在这里插入图片描述

各个字段的含义:

  • 用户名
  • 加密后的密码(如果为空,不需要输入密码即可登录系统)
  • 密码的最后一次修改时间(是一个相对时间)
  • 密码在多少天内不能更改
  • 密码在多少天后必须更改
  • 密码到期前多少天给用户发出警告
  • 密码在多少天后被禁用
  • 密码被禁用的具体日期(相对时间)
  • 保留的字段

用户组配置文件/etc/group

用于存放用户组的加密密码,每个用户组账户的信息在改文件中占用一行,每行分为4个字段,中间用“:”分割。

/etc/group 文件对所有用户可读:

在这里插入图片描述

/etc/group 具体文件内容如下:

在这里插入图片描述

各个字段的含义:

  • 用户组的组名
  • 加密后的用户组密码:一般不设置,提供给用户组管理员使用,同样的密码存放在用户组密码文件中/etc/gshadow 文件中
  • 用户组 ID:GID,与/etc/passwd 文件中的第4个字段对应
  • 用户组的成员列表(多个组成员用逗号分割):用户的主组并不把该用户作为成员列出,只有用户的附属组才能把该用户作为成员列出

用户属性配置文件/etc/login.defs

建立用户账户是会根据/etc/login.defs文件的配置信息设置用户的某些属性

/etc/login.defs 文件对所有用户可读:

在这里插入图片描述

/etc/login.defs 具体文件内容如下:

在这里插入图片描述

  • MAIL_DIR /var/spool/mail (用户邮箱所在的目录)
  • PASS_MAX_DAYS 99999 (账户密码最长有效天数)
  • PASS_MIN_DAYS 0 (账户密码最短有效天数)
  • PASS_MIN_LEN 5 (账户密码的最小长度)
  • PASS_WARN_AGE 7 (账户密码过期前,提前警告的天数)
  • UID_MIN 1000 (使用useradd命令添加账户是自动产生UID,最小UID值)
  • UID_MAX 60000 (使用useradd命令添加账户是自动产生UID,最大UID值)
  • SYS_UID_MIN 201 (使用useradd -r 添加账户时自动产生的系统UID,最小UID值)
  • SYS_UID_MAX 999 使用useradd -r 添加账户时自动产生的系统UID,最大UID值)
  • GID_MIN 1000 (使用groupadd命令添加账户组时自动产生GID,最小GID值)
  • GID_MAX 60000 (使用groupadd命令添加账户组时自动产生GID,最大GID值)
  • SYS_GID_MIN 201 使用groupadd -r 添加账户组时自动产生的系统GID,最小GID值)
  • SYS_GID_MAX 999 使用groupadd -r 添加账户组时自动产生的系统GID,最大GID值)
  • CREATE_HOME yes (创建用户时是否为用户创建主目录)
  • USERGROUPS_ENAB yes (创建用户时是否为用户创建同名的组)
  • ENCRYPT_METHOD SHA512 (密码加密方式)

用户组密码配置文件/etc/gshadow

用于存放组的加密密码,每个组账户在该行占用一行,每行分为4个字段,中间用“:”分割

/etc/gshadow 文件对所有文件可读:

在这里插入图片描述

/etc/gshadow 文件具体内容如下:

在这里插入图片描述

各字段含义:

  • 用户组的组名
  • 加密后的用户组密码:空值代表没密码
  • 用户组管理员:空值代表没有管理员
  • 用户组的成员列表:空值代表没有成员列表

配置文件总结

安全性

  • 账户卫生是系统安全的决定性因素
  • 12个字符是一个确保安全的密码的最小长度,虽然和企业中常见的默认要求都要长,但是确实更安全一些比较好
  • shadow 密码文件中 MD5 密码字段总是以$1$$md5$开头,SHA-256密码长度以$5$开头,SHA-512密码以$6$开头

规范性建议

  • 坚持使用字母数字字符作为登录名,采用小写形式,以字母起始

  • 大型站点中,采用全名电子邮件寻址方案(jie.he@565616251),从而向外部隐藏登录名

  • 不要回收重用 UID 信息

  • 主目录不要通过网络文件系统挂载

  • /etc/shadow 中的相对日期指定的是从1970年1月1日起始的天数(不是秒数)

  • 登录名长度限制在32个字符

  • 组名长度限制在8个字符

  • 组成员关系来自 passwd 和 group 文件中查找结果的合集

  • 不建议通过手动维护配置文件来调整系统中的用户管理,而是借助高级一点的工具:useradd、adduser等

用户管理的常见命令

命令说明
useradd添加用户
usermod修改用户信息
userdel删除用户及与用户有关联的配置或文件
passwd为用户设置或修改密码
chpasswd批量更新用户密码
chage修改用户密码属性信息
id查看用户 uid、gid、所归属的用户组信息
su切换用户角色工具
sudo普通用户提权的工具
visudo用于编辑 suders 配置文件(sudo 授权文件)

用户组管理的常见命令

命令说明
groupadd添加用户组
groupdel删除用户组
groupmod修改用户组
gpasswd为用户组设置密码
groups显示用户所属的用户组
newgrp更改用户所属的有效用户组

用户的增删改

新增用户

useradd 用法说明:

useradd [-u] [-g] [-G] [-m|M] [-c] [-d] [-s] [-e] [-f] [-r] username

参数说明:(更多参数选项可使用 --help 方式查看)

  • -u:新用户的用户 id(uid)
  • -g:新用户主组的名称或 gid
  • -G:新用户附加组的名称或 gid
  • -m:创建新用户的主目录
  • -M:强制不创建新用户的主目录
  • -c:新用户的说明信息
  • -d:新用户的主目录
  • -s:指定 shell 类型,未指定默认是 /bin/bash

命令执行后的背后过程:

  1. 不带任何参数时候,首先读取配置文件/etc/login.defs 和 /etc/default/useradd 中定义的规则,根据规则添加用户
  2. 同时向/etc/passwd 和 /etc/group 文件内容中添加新建的用户和用户组记录
  3. /etc/shadow 和 /etc/gshadow 同步生成记录,同时系统还会根据 /etc/defalut/useradd 及 /etc/login.defs 文件中配置的信息建立用户的家目录,并复制 /etc/skel 中所隐藏的环境配置文件到新用户的家目录中
  4. 最终完成对用户环境的初始化设置

实践:

  • 直接不加任何参数添加用户:useradd ceshi

在这里插入图片描述

  • 查看相关内容:

在这里插入图片描述

  • 分析一下过程:

    • 查看配置文件:cat /etc/default/useradd

      家目录位置:/home

      -1表示不启用用户过期停权

      用户终止日期是空值,表示不启用

      用户默认使用的 shell 类型:/bin/bash

      新建用户下的默认环境变量配置文件路径:/etc/skel

      是否创建 mail 文件

在这里插入图片描述

在这里插入图片描述

  • 读取 /etc/login.defs 配置文件信息设定相关参数:

    新建的用户 uid 是1002

    新建家目录的权限是:700(默认umask 077)

在这里插入图片描述

  • 其他命令用法示例:
# 不带任何参数,新建用户 test
[root@whale ~]# useradd test

# 指定用户组和 uid
[root@whale ~]# useradd -u 888 -g root test1

# 创建用户禁止登陆且不创建家目录
[root@whale ~]# useradd -M -s /sbin/nologin test2

# 创建用户并设置过期时间
[root@whale ~]# useradd -e "2022/09/05" test3

# 创建用户附带一些用户信息
[root@whale ~]# useradd -c "helloworld" test4
[root@whale ~]# tail -n 1 /etc/passwd
test4:x:1006:1006:helloworld:/home/test4:/bin/bash

# 改变配置文件/etc/default/useradd 文件的默认值
# 修改默认登陆 shell 信息
[root@whale ~]# useradd -D -s /sbin/nologin
[root@whale ~]# useradd test5
[root@whale ~]# tail -1 /etc/passwd
test5:x:1007:1007::/home/test5:/sbin/nologin

# 用户信息修改
[root@whale ~]# grep "test4" /etc/passwd
test4:x:1006:1006:ceshi:/home/test4:/bin/bash
[root@whale ~]# usermod -c "测试描述信息" test4
[root@whale ~]# grep "test4" /etc/passwd
test4:x:1006:1006:测试描述信息:/home/test4:/bin/bash
[root@whale ~]#

# 删除用户命令
# -f:强制删除用户,即时当前已登录
# -r:删除用户同时,删除与用户有关的所有文件
[root@whale ~]# grep "test" /etc/passwd
test:x:1003:1003::/home/test:/bin/bash
test1:x:888:0::/home/test1:/bin/bash
test2:x:1004:1004::/home/test2:/sbin/nologin
test3:x:1005:1005::/home/test3:/bin/bash
test4:x:1006:1006:测试描述信息:/home/test4:/bin/bash
test5:x:1007:1007::/home/test5:/sbin/nologin
[root@whale ~]# userdel -r test
[root@whale ~]# userdel -r test1
[root@whale ~]# ll /home/test
ls: cannot access /home/test: No such file or directory
[root@whale ~]#

用户组的增删改

命令用法

groupadd [-g] [-f] 用户组

  • -g:指定用户组的 gid,不指定的话,则从默认的 gid 开始
  • -f:新增一个账户,强制覆盖一个已经存在的组账户

示例:

# 指定一个 gid 创建
[root@whale ~]# groupadd -g 802 test99
[root@whale ~]# grep "test99" /etc/group
test99:x:802:

# 删除一个用户组(不能删除还有用户存在的用户组)
[root@whale ~]# grep "test99" /etc/group
test99:x:802:
[root@whale ~]# groupdel test99
[root@whale ~]# groupdel root
groupdel: cannot remove the primary group of user 'root'

用户密码的修改

命令用法

passwd [选项] [用户名]

  • -k:为密码已经过期的用户更新有效期
  • –stdin:从标准输入读取密码字符串

示例

# 修改当前账户密码
[root@whale ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@whale ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.


# 修改任意一个账户密码(root 账号下)
[root@whale ~]# passwd test2
Changing password for user test2.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

# 显示账号密码信息
[root@whale ~]# passwd -S test2
test2 PS 2022-09-04 0 99999 7 -1 (Password set, SHA512 crypt.)

# 标准输入设置密码
[root@whale ~]# echo "admin@123"|passwd --stdin test2
Changing password for user test2.
passwd: all authentication tokens updated successfully.
[root@whale ~]#

# 批量修改密码
# chpasswd 命令后每一行按照:用户名:密码 形式输入,一行一个,在新的空行按 ctrl+d 结束输入
[root@whale ~]# grep "test" /etc/passwd
test2:x:1004:1004::/home/test2:/sbin/nologin
test3:x:1005:1005::/home/test3:/bin/bash
test4:x:1006:1006:测试描述信息:/home/test4:/bin/bash
test5:x:1007:1007::/home/test5:/sbin/nologin
[root@whale ~]# chpasswd
test2:admin@123
test3:admin@123
test4:admin@123
test5:admin@123
[root@whale ~]#

# 另一种方式批量修改密码
[root@whale ~]# cat test.txt
test2:admin@123
test3:admin@123
test4:admin@123
test5:admin@123
[root@whale ~]# chpasswd < test.txt
[root@whale ~]#

密码有效期的修改

命令用法

chage [选项] [用户名]

  • -l:显示账号有效期信息
  • -W:密码到期之前,提前收到警告信息的天数
  • -M:密码保持有效的最大天数
  • -m:密码可更改的最小天数,默认为0,表示任何时候都可以更改密码
  • -I:设置密码过期多少天后禁用账户
  • -E:设置密码过期的时间
  • -d:设置上一次密码更改的日期

示例

# 查看账户有效期信息
[root@whale home]# chage -l test2
Last password change                                    : Sep 04, 2022 # 最后一次密码变化时间
Password expires                                        : never # 密码过期时间
Password inactive                                       : never # 密码停权时间
Account expires                                         : never # 账户过期时间
Minimum number of days between password change          : 0					# -m 控制
Maximum number of days between password change          : 99999				# -M 控制
Number of days of warning before password expires       : 7					# -W 控制
[root@whale home]#

# 修改示例
[root@whale ~]# useradd ceshi99
[root@whale ~]# chage -l ceshi99
Last password change                                    : Sep 04, 2022
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
[root@whale ~]# chage -m7 -M60 -W10 -I30 ceshi99
[root@whale ~]# chage -l ceshi99
Last password change                                    : Sep 04, 2022
Password expires                                        : Nov 03, 2022
Password inactive                                       : Dec 03, 2022
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 60
Number of days of warning before password expires       : 10
[root@whale ~]#

用户查询的相关命令

id

## 查看当前登陆用户信息
[root@whale ~]# id
uid=0(root) gid=0(root) groups=0(root)

## 查看特定用户的信息
[root@whale ~]# id ceshi99
uid=1001(ceshi99) gid=1001(ceshi99) groups=1001(ceshi99)

## 只查看用户的 uid
[root@whale ~]# id -u ceshi99
1001

## 只查看用户组的 gid
[root@whale ~]# id -g ceshi99
1001

# 只查看用户名
[root@whale ~]# id -un
root
[root@whale ~]# id -un ceshi99
ceshi99
[root@whale ~]#

## 只查看用户组名
[root@whale ~]# id -gn ceshi99
ceshi99

whoami、w、who、last、lastlog

## 查看当前登陆的用户
[root@whale ~]# whoami
root

## 查看当前已经登陆的用户,并且展示他做了什么信息
[root@whale ~]# w
 15:40:18 up 3 days, 16:58,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    112.193.75.213   15:23    9:30   0.03s  0.03s -bash
root     pts/1    112.193.75.213   15:39    2.00s  0.00s  0.00s w

## 查看当前登陆的信息并展示一些:登陆终端以及时间
[root@whale ~]# who
root     pts/0        2022-09-04 15:23 (112.193.75.213)
root     pts/1        2022-09-04 15:39 (112.193.75.213)

## 显示已登录的用户列表及登陆时间
[root@whale ~]# last
root     pts/1        112.193.75.213   Sun Sep  4 15:39   still logged in
root     pts/0        112.193.75.213   Sun Sep  4 15:23   still logged in
root     pts/1        112.193.75.213   Sun Sep  4 14:38 - 15:23  (00:45)
root     pts/0        112.193.75.213   Sun Sep  4 12:57 - 15:22  (02:25)
root     pts/0        112.193.75.213   Sun Sep  4 12:57 - 12:57  (00:00)
root     pts/1        112.193.75.234   Sat Sep  3 16:42 - 16:42  (00:00)
root     pts/0        112.193.75.234   Sat Sep  3 16:22 - 18:34  (02:12)
root     pts/1        112.193.75.234   Thu Sep  1 15:43 - 15:47  (00:04)
root     pts/0        112.193.75.234   Thu Sep  1 15:29 - 17:41  (02:11)
root     pts/2        112.193.75.234   Thu Sep  1 14:17 - 16:29  (02:12)
root     pts/1        112.193.75.234   Thu Sep  1 13:24 - 15:35  (02:11)
root     pts/0        112.193.75.234   Thu Sep  1 12:59 - 15:11  (02:11)
root     pts/0        112.193.75.234   Thu Sep  1 10:55 - 10:55  (00:00)
root     pts/0        112.193.75.234   Wed Aug 31 23:42 - 02:02  (02:20)
root     pts/0        112.193.75.234   Wed Aug 31 22:44 - 22:46  (00:01)
root     pts/0        112.193.75.234   Wed Aug 31 22:43 - 22:44  (00:01)
reboot   system boot  3.10.0-957.21.3. Thu Sep  1 06:41 - 15:42 (3+09:01)
reboot   system boot  3.10.0-957.21.3. Thu Sep  1 06:40 - 15:42 (3+09:02)
reboot   system boot  3.10.0-957.21.3. Wed Oct 21 21:19 - 15:42 (682+18:23)

wtmp begins Thu Jul 11 11:10:20 2019

## 最近所有系统用户的登陆信息
[root@whale ~]# lastlog
Username         Port     From             Latest
root             pts/1    112.193.75.213   Sun Sep  4 15:39:49 +0800 2022
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
halt                                       **Never logged in**
mail                                       **Never logged in**
operator                                   **Never logged in**
games                                      **Never logged in**
ftp                                        **Never logged in**
nobody                                     **Never logged in**
systemd-network          
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值