CentOS 7 用户 & 组管理


一、前言

Linux 的安全性很高,它完善的用户和权限管理机制功不可没。

妥善管理好 Linux 系统上的用户和组是 Linux 系统管理员的义务。

本文以 CentOS 7.4.1708 为例,其他 Linux 发行版部分内容可能会有所不同。


二、用户管理

2.1 用户的类型

在 Linux 系统中,有三种用户。

2.1.1 超级用户

用户名为 root,用户 ID 为 0。有着至高无上的权限,可执行所有任务,可访问所有文件,可管理所有用户。

在服务器配置工作完毕后,为了安全,不应该直接使用超级用户。

2.1.2 普通用户

用户 ID 默认从 1000 开始。供普通用户使用。

2.1.3 系统服务用户

用户 ID 默认为 1-499。仅供系统服务使用,默认不可登录(即默认 SHELL 为 /sbin/nologin)。

2.2 查看本机用户信息

2.2.1 /etc/passwd

文件的格式如下:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

该文件以 : 作为字段分隔符,保存了本机所有用户的基本信息。以下详细说明其含义。

用户名 密码 用户 ID 主要组 ID 描述(可选) 家目录 默认 SHELL
root x 0 0 root /root /bin/bash
bin x 1 1 bin /bin /sbin/nologin

在早期的 Linux 系统中,密码是保存在这个文件里的。但是该文件默认所有用户都可读,会对系统安全造成威胁。现在,密码都以散列的形式存储在了 /etc/shadow 中了。

2.2.2 /etc/shadow

文件的格式如下:

root:$6$3Cprk6.h$Ied2v...:17438:0:99999:7:::
bin:*:17110:0:99999:7:::
...

该文件默认的权限为 000,也就是所有用户都不可访问(root 肯定可以访问,但是不建议直接修改此文件)。

该文件同样以 : 作为字段分隔符,保存了本机所有用户有关密码以及安全的信息。以下详细说明其含义。

用户名 密码散列
(使用 SHA512 算法,放空表示无密码,感叹号或星号表示禁止使用密码登录)
密码修改时间
(自 1970-01-01 的天数)
密码最短使用天数
(0 或放空表示无限制)
密码最长使用天数
(99999 或放空表示无限制)
密码过期前提示天数
(0 或放空表示不提示)
密码过期后宽限天数
(放空表示无宽限)
用户过期时间
(自 1970-01-01 的天数,放空表示无限制)
保留字段
root $6$3Cprk6.h$Ied2v… 17438 0 99999 7
bin * 17110 0 99999 7

2.3 添加用户

命令用法

useradd [选项] <用户名>

常用选项

选项 功能
-d <目录> 指定家目录位置
-M 不创建家目录
-s <SHELL 路径> 指定默认 SHELL
-u <UID> 指定用户 ID
-g <GID>|<组名> 指定用户主要组 ID 或名称(若不指定,默认创建一个与用户名相同的组作为主要组)
-G <组名 1> [<组名 2> ...] 指定加入的附加组列表
-c <描述> 为用户添加描述

2.4 删除用户

命令用法

userdel [选项] <用户名>

常用选项

选项 功能
-r 删除用户的家目录和邮件目录
-f 强制删除用户(可以删除已登录的用户,不建议使用)

2.5 修改用户参数

命令用法

usermod [选项] <用户名>

常用选项

选项 功能
-d <目录> [-m] 更改家目录位置(-m 为迁移文件)
-s <SHELL 路径> 修改默认 SHELL
-u <UID> 修改用户 ID
-g <GID>|<组名>  修改用户主要组 ID 或名称
-G <组名 1> [<组名 2> ...] 重新指定加入的附加组列表
-a <组名 1> [<组名 2> ...] 追加新的附加组到现有的附加组列表中
-l <用户名> 修改用户名
-c <描述> 修改描述

2.6 用户密码及安全管理

命令用法

passwd [选项] <用户名>

常用选项

选项 功能
(无) 修改密码(可不指定用户名,不指定用户名将修改当前用户的密码)
-l 锁定用户(仅限 root 使用)
-u 解锁用户(仅限 root 使用)
-e 强制密码过期(仅限 root 使用)
-x <天数>  设定密码最长使用天数(以密码修改日为基准,仅限 root 使用)
-n <天数> 设定密码最短使用天数(以密码修改日为基准,仅限 root 使用)
-w <天数> 设定密码过期前提醒天数(以密码修改日为基准,仅限 root 使用)
-i <天数> 设定密码过期后宽限天数(以密码修改日为基准,仅限 root 使用)
-S 查看用户安全状态

2.7 切换到某一用户执行命令

命令用法

sudo [选项] <命令>

常用选项

选项 功能
-u <用户名> 以某一用户的身份执行命令,不指定默认为 root
-i 运行指定用户的默认 SHELL

至于谁可以切换到哪个用户、可以执行什么命令,可在 /etc/sudoers 中进行配置,此处不展开讲。


三、组管理

3.1 组的概述

组是一类特殊账户,指具有相同或者相似特性的用户集合。

一个用户可以同时属于多个组,其中某个组为该用户的主要组,其他组为该用户的附加组。

而主要组是在用户登录时默认使用的组身份。在创建文件或目录时,若不指定属主,默认使用该组身份。

组的分类以及组 ID 的分布情况与用户基本一致。

每一个组可以由 root 指定一个或多个组管理员。

管理员可以添加或删除组中的成员。所有组管理员共用一个管理员密码。

组管理员可以是系统中的任意账户,可以不是组中的成员。

3.2 查看本机组信息

3.2.1 /etc/group

文件的格式如下:

root:x:0:
bin:x:1:
...

该文件以 : 作为字段分隔符,保存了本机组的基本信息。以下详细说明其含义。

组名 组管理员密码 组 ID 组用户
(仅有把该组作为附加组的用户)
root x 0
bin x 1

在早期的 Linux 系统中,组管理员密码是保存在这个文件里的。但是该文件默认所有用户都可读,会对系统安全造成威胁。现在,密码都以散列的形式存储在了 /etc/gshadow 中了。

3.2.2 /etc/gshadow

文件的格式如下:

root:::
bin:::
...

该文件默认的权限为 200,也就是只有 root 有写权限(root 也肯定可以读)。

该文件同样以 : 作为字段分隔符,保存了本机所有组的组管理员以及管理员密码。以下详细说明其含义。

组名 管理员密码散列
(使用 SHA512 算法,放空表示无密码,感叹号或星号表示只有 root 才能管理组)
组管理员 组用户
(仅有把该组作为附加组的用户)
root
bin

3.3 添加组

命令用法

groupadd [选项] <组名>

常用选项

选项 功能
-g <GID> 指定组 ID
-r 创建系统组(也就是指定组 ID 为系统组的范围)

3.4 删除组

命令用法

groupdel <组名>

3.5 修改组参数

命令用法

groupmod [选项] <组名>

常用选项

选项 功能
-n <组名> 修改组名
-g <GID> 修改组 ID

3.6 组成员管理

3.6.1 添加一个成员到组中

命令用法

gpasswd -a <用户名> <组名>

3.6.2 从组中删除一个成员

命令用法

gpasswd -d <用户名> <组名>

3.6.3 设置组成员列表

命令用法

gpasswd -M <用户名1>[,<用户名2>,...] <组名>

3.6.4 设置组管理员列表

命令用法

gpasswd -A <用户名1>[,<用户名2>,...] <组名>

3.6.5 设置组管理员密码

命令用法

gpasswd <组名>

3.6.6 删除组管理员密码

命令用法

gpasswd -r <组名>

3.6.7 查看用户加入的组

命令用法

groups [用户名]

若不指定用户名,则查看当前用户加入的组。

3.7 切换用户当前的组身份

命令用法

newgrp <组名>

发表评论