第一节 了解:用户和组的概念
一、认识:用户和组的概念
★ 认识:用户和组的意义
在生活中 :我们每一人就是一个用户,我们所属的每一个集体就是一个组。
在计算机中:登录一台电脑,需要使用用户;
:运行一个程序,需要使用用户,该用户的权限,也决定了该程序的权限;
:读写一个文件,需要使用用户;
:对一个组授权,就是对所有的组成员授权,提高了授权管理效率。
★ 认识:UID和GID的重要性
在所有操作系统中,均是依据UID和GID来判断用户和组的身份,而不是依据用户和组的名称!
♦ UID和GID类似于:生活中的身份证号和会员证号
♦ 注意1:只要 UID为 0,它就是超级管理员,拥有最大特权,root用户账户的 UID=0。
♦ 注意2:GID 为 0,不意味着拥有特权。
系统在新建用户和组账户过程中,根据<账户类型>来自动递增式分配<UID和GID>,当然,我们也可以自定义。
通常情况下,应当保证<UID和GID>的<唯一性>。
二、了解:用户的分类
★ 用户分为三类:
超级用户:就是root 用户账户,拥有最大特权。
系统用户:也是普通用户账户,不拥有特权,不可登录电脑,专用于程序的运行。
普通用户:就是普通用户账户,不拥有特权,可以登录电脑,专用于人员的登录。
★ 用户的UID预设范围:
UID编号范围(CentOS 7/8) UID编号范围(CentOS 6)
root用户 0 0
系统用户 1-999 1-499
普通用户 1000 + 500 +
三、了解:用户和组的关系
四、认识:多用户操作系统的概念
★ 什么是单用户操作系统?
它意味着:一次只能有一个用户使用一台计算机。
★ 什么是多用户操作系统?
它意味着:一次可以有多个用户使用一台计算机。
★ 案例体验:多用户操作系统
## 创建:两个用户,一个叫 user01,另一个叫 user02
useradd user01
useradd user02
## 设置:两个用户的登录密码
echo 'user01:123' | chpasswd
echo 'user02:456' | chpasswd
## 尝试:两个用户同时终端登录
ssh user01@10.0.0.101
ssh user02@10.0.0.101
## 查看:两个用户同时终端登录的登录信息
w
第二节 掌握:组账户的管理
一、了解:组账户的属性要素
★ 组名称 必须
★ 组密码 可选,不常用
★ 组GID 必须,会自动生成,也可自定义
★ 组成员 可选,可后期添加
二、管理:组账户
1.创建:组账户
groupadd g01
groupadd g02
2.删除:组账户
groupdel g02
3.添加:组成员
useradd user01
useradd user02
groupmems -a user01 -g g01 ## 添加:单个组成员
gpasswd -a user02 g01 ## 添加:单个组成员
4.删除:组成员
groupmems -d user01 -g g01 ## 删除:单个组成员
gpasswd -d user02 g01 ## 删除:单个组成员
5.重置:组成员
useradd user03
useradd user04
gpasswd -M user03,user04 g01 ## 重置:组成员(可一次性设置:一个或多个组成员)
## 注意:是重置组账户的组成员,而不是重置用户账户的附加组
6.清空:组成员
groupmems -p -g g01
7.列出:组成员
groupmems -l -g g01
8.修改:组账户
语法:groupmod -n <新组名称> <老组名称> ## 更名:组账户
## 选项备注:
## -n ☚ 改名为 NEW_GROUP
语法:groupmod [-o] -g <新GID> <组名称> ## 更改:组GID
## 选项备注:
## --g ☚ 将组 ID 改为 GID
## --o ☚ 允许使用重复的 GID
三、了解:组账户的相关配置文件
★ /etc/group 文件 ## 这是:组账户文件,主要包含:组账户名称、组账户GID号、附加的组成员名称。
★ /etc/gshadow 文件 ## 这是:组账户密码文件,主要包含:组账户名称、组密码、附加的组成员名称。
第三节 掌握:用户账户的管理
一、了解:用户账户的属性要素
★ 用户账户名(姓名) 必须
★ 密码(登录口令) 可选,视<用户类型>而定,可后期设置<密码>
★ 用户UID(身份证号码) 必须,会自动生成,也可自定义
★ 主要组(第一国籍) 必须,会自动生成,也可自定义
★ 附加组(第N国籍) 可选,可后期添加
★ 辅助信息(记录其他的描述性信息) 可选,可后期添加
★ 家目录(用户私密空间)) 可选,视<用户类型>而定
★ 登录Shell(使用什么兵器) 可选,视<用户类型>而定
★ 密码时限策略 可选,采用<默认的密码时限策略>,可后期修改
★ 账户有效期(工作时限) 可选,视<人事要求>而定,可后期添加
二、管理:用户账户
1.创建:用户账户
★ 语法:useradd [选项] <用户账户名>
## 常用选项:
## -u, --uid UID 新账户的用户 ID
## -o, --non-unique 允许使用重复的 UID 创建用户
## -U, --user-group 创建与用户同名的组
## -N, --no-user-group 不创建同名的组
## -g, --gid GROUP 新账户主组的名称或 ID
## -G, --groups GROUPS 新账户的附加组列表
## -r, --system 创建一个系统账户
## -M, --no-create-home 不创建用户的主目录
## -m, --create-home 创建用户的主目录
## -b, --base-dir BASE_DIR 新账户的主目录的基目录
## -d, --home-dir HOME_DIR 新账户的主目录
## -s, --shell SHELL 新账户的登录 shell
## -e, --expiredate EXPIRE_DATE 新账户的过期日期
## -f, --inactive INACTIVE 新账户的密码不活动期
## -c, --comment COMMENT 新账户的 GECOS 字段
★ 举例1:创建一个普通用户(其他属性均采用默认设置)
useradd user01
★ 举例2:创建一个系统用户,不允许其Shell登录、不需要家目录(其他属性均采用默认设置)
useradd -s /sbin/nologin -r user02 或者 useradd -s /sbin/nologin -M user02
★ 举例3:创建一个普通用户,指定其家目录为</tmp>(其他属性均采用默认设置)
useradd -d /tmp user03
2.设置/清除:用户密码
passwd ## 交互式设置:当前用户的<用户密码>
passwd user01 ## 交互式设置:指定用户的<用户密码>
echo 'root:a123456!' | chpasswd ## 非交互式设置:指定用户的<用户密码>
echo 'user01:a123456!' | chpasswd ## 非交互式设置:指定用户的<用户密码>
passwd -d user01 ## 清除:指定用户的<用户密码>
3.删除:用户账户
userdel user01 ## 删除<用户账户>,保留<用户家目录>
userdel -r user02 ## 删除<用户账户>,删除<用户家目录>
4.查看:用户账户
id user01
5.加入/退出:用户账户的附加组
groupadd g01
groupadd g02
useradd -G g01 user01 ## 在创建用户账户的同时,加入指定的附加组
useradd user02
usermod -G g01 user02 ## 针对已经创建的用户账户,退出当前的附加组,然后加入新的附加组
usermod -aG g02 user02 ## 针对已经创建的用户账户,不退出当前的附加组,然后加入新的附加组
usermod -G "" user02 ## 针对已经创建的用户账户,退出当前的附加组
6.修改:用户账户的主要组
★ 什么是主要组?
主要组也称为<effective group有效组>,它是默认被授予UNIX权限的组。
用户必须有且只能有1个主要组。
文件和目录的UNIX权限中,默认将主要组作为所属组来予以授权。
针对用户家目录和家目录中的内容,系统会实时跟踪并更新:用户的主要组。
useradd user01
groupadd g01
usermod -g g01 user01 ## 针对已经创建的用户账户,修改其主要组
7.修改:用户账户的其他属性
★ 语法:usermod [选项] <用户账户名>
## 常用选项:
## -l, --login LOGIN 新的登录名称
## -u, --uid UID 用户帐号的新 UID
## -o, --non-unique 允许使用重复的(非唯一的) UID
## -g, --gid GROUP 强制使用 GROUP 为新的<主要组>
## -G, --groups GROUPS 重新设置用户的附加组列表 GROUPS
## -a, --append GROUP 追加设置用户的附加组,须与 -G 合并使用
## 注意:不会在<其它附加组>中删除<此用户>
## -r, --system 创建一个系统账户
## -d, --home HOME_DIR 用户的新主目录
## -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
## -s, --shell SHELL 该用户帐号的新登录 shell
## -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
## -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
## -c, --comment 注释信息 账户的注释信息
## -L, --lock 锁定用户帐号
## -U, --unlock 解锁用户帐号
★ 举例:
usermod -c "张总" user01 ## 针对已经创建的用户账户,修改其<辅助性描述信息>
usermod -e "2021-12-31" user01 ## 针对已经创建的用户账户,修改其<账户有效期>
usermod -l "zhangzong" user02 ## 针对已经创建的用户账户,更改其<用户账户名>
8.更改:账户过期策略
chage -l root ## 显示:<root用户>当前的<密码更改和过期策略>
chage -E 2020-03-28 root ## 设置:<用户账户>的<帐户过期日期=2020-03-28>
chage -E $(date -d +180days +%Y-%m-%d) root ## 设置:<用户账户>的<帐户过期日期=180天之后>
9.锁定/解锁:用户账户
★ 锁定:用户密码
usermod -L user01 或者 passwd -l user01
★ 解锁:用户密码
usermod -U user01 或者 passwd -u user01
10.id命令:查看<用户帐户UID>及<所属组GID>
★ 用法:id [OPTION]... [USER]
☞ 选项:
不带任何选项 显示:一些可供识别用户身份的有用信息
-a 忽略:<与其他版本>之间的兼容性
-g, --group 查看:<用户>的<主要组>的<GID>
-G, --groups 查看:<用户>隶属的所有的<组>的<GID>
-n, --name 查看:<用户和组>的<NAME名称>,而不是<UID/GID号>,请结合-u、-g、-G来使用
-r, --real 查看:<用户和组>的<UID/GID号>,而不是<NAME名称>,请结合-u、-g、-G来使用
-u, --user 查看:<用户>的<UID号>
-Z, --context 查看:<当前用户>的<安全上下文>
★ 用例:
id user04
id -un root ## 显示:<用户账户>的<用户名>
id -gn root ## 显示:<用户账户>的<主要组的名称>
id -ur root ## 显示:<用户账户>的<用户UID号>
id -gr root ## 显示:<用户账户>的<主要组的GID号>
11.chsh:设置<用户的shell解释器>
echo $SHELL ## 查看:当前的<shell解释器>
chsh -l ## 列出:<shell解释器>列表,其实就是显示</etc/shells文件>中的内容
chsh -s /bin/bash user01 ## 设置:<user01用户>的<shell解释器>为</bin/bash>
12.chfn:编辑<用户辅助信息>
★ 用法:chfn [选项] [用户名]
☞ 选项:
-f, --full-name <全名> 真实姓名
-o, --office <办公> 办公地址
-p, --office-phone <电话> 办公电话
-h, --home-phone <电话> 住宅电话
★ 用例:
chfn -f 张三 -o 武汉 -p 027-88888888 -h 6666666 user01
cat /etc/passwd | grep -E "^user01"
三、了解:用户账户的相关配置文件
1.简介:用户账户的相关配置文件
/etc/passwd 文件 ## 保存:<用户账户>的<账户信息>
/etc/shadow 文件 ## 保存:<用户账户>的<密码信息>
/etc/skel/ 目录 ## 定义:<用户home家目录>的<模板内容>
/etc/default/useradd 文件 ## 定义:<useradd命令>的<默认参数>
2.详解:/etc/passwd 配置文件
★ 格式:<:冒号>分隔,一共为7段,每一行记录一个用户账号信息
root:x:0:0:root:/root:/bin/bash
※ 字段1:用户账号的名称
※ 字段2:用户账号的用户密码,此字段值为x,而真正的组密码则存储在</etc/shadow>中
※ 字段3:用户账号的<UID>
※ 字段4:用户账号所属的主要组GID,即:用户登录时,一开始就属于这个组
※ 字段5:用户账号的注释信息
※ 字段6:用户账号的home家目录
※ 字段7:用户账号的登录shell
3.详解:/etc/shadow 配置文件
★ 格式:<:冒号>分隔,一共为8段,每一行记录一个用户账号信息
user01:$6$aK9cnC......WcPL0HF0:18865:0:99999:7:1:18992:
※ 字段1:用户账号的名称
※ 字段2:默认MD5加密的用户密码,如果此字段值以 ! 开头,则表示:密码被 usermod -L 锁定
※ 字段3:用户密码的最后一次的更改日期(天数,以1970.1.1为参照点)
※ 字段4:用户密码的最短使用期限(天数)
※ 字段5:用户密码的最长使用期限(天数)
※ 字段6:提前警告密码过期的天数,即:临近密码过期时,可以提前多少天予以警告(天数)
※ 字段7:密码到期之后的宽限期(天数)
※ 字段8:用户账号的账号过期日期(天数,以1970.1.1为参照点)
※ 字段9:保留
★ 注意:
提问1:两个用户的密码都是 123456 一样的,那么 shadow 中加密的 HASH 值一样吗?
答:不一样,因为采用了 salt(撒盐哈希算法)。
salt(撒盐哈希算法)是通过对密码添加一个随机前缀或随机后缀之后,再计算HASH值,从而实现针对<相同的密码>计算出<不同的HASH值>,从而防止<查表法、反向查表法和彩虹表>针对<密码HASH值>的暴力破解。
提问2:把 2 段加密的互换还能登陆吗?salt在什么时候执行的?
答:可以登录。
在设置用户密码的过程中,系统就自动通过salt(撒盐哈希算法)来保护了密码的机密性。
4.详解:/etc/skel/ 目录
★ /etc/skel 目录 :包含着<用户登录>之后所需的<用户级别的环境配置文件>。
☞ 如果我们创建了一个<用来登录主机的用户账户>,则系统会自动复制</etc/skel 目录>中的<用户级别的环境配置文件>到<用户的家目录>,从而为用户操作提供<必需的环境配置参数>,否则,<用户>除了不能获得<用户级别的环境配置>之外,还将无法调用<etc/bashrc 全局环境配置文件>。
ls -al /etc/skel/
5.解析:/etc/default/useradd 配置文件
★ /etc/default/useradd 配置文件:定义了<useradd命令>的<默认参数>。
cat /etc/default/useradd
## 显示内容如下:
# useradd defaults file
GROUP=100 ## 设置:<用户组账号>的<起始GID>
HOME=/home ## 设置:<用户账号>的<home家目录>
INACTIVE=-1 ## 设置:<用户密码>的<宽限期>,-1表示<永久有效>
EXPIRE= ## 设置:<用户帐户>的<到期时间>,<空>表示:禁用<此限制>
SHELL=/bin/bash ## 指定:<shell解释器>
SKEL=/etc/skel ## 设置:<家目录>的<模板目录>
CREATE_MAIL_SPOOL=yes ## 设置:是否创建<用户邮件目录>,<yes>表示:创建
第四节 管理:用户密码策略
一、管理:用户密码时限策略
1.方式1:全局性设置(/etc/login.defs 文件)
★ 了解:/etc/login.defs 文件内容 ☚ 对root 账户及root 操作无效
● 功能:
全局性定义:用户的站内邮件目录
全局性定义:用户的用户密码策略
☛ PASS_MAX_DAYS 99999 # 用户密码的最长使用期限(天数)
# 99999 表示:密码永不过期
# N 表示:当天+N天之后,密码将会过期,须更新密码
# 1 表示:当天+1天之后,密码将会过期,须更新密码
# 0 表示:当天之后,密码将会过期,须更新密码
☛ PASS_MIN_DAYS 0 # 用户密码的最短使用期限(天数)
# 0 表示:可以立即修改
# 非0 表示:N天之后,方可修改
☛ PASS_MIN_LEN 5 # 密码最小长度
☛ PASS_WARN_AGE 7 # 提前警告密码过期的天数
# 0 表示:不提前警告
# 非0 表示:提前 N 天,当用户登录时,提醒用户修改密码
注意:
♦ 由于:Linux 系统以<UTC格林格林威治统一时间 00:00 点>作为天数的计时点
♦ 因此:中国时区的Linux 系统就显现为:以<CST 8:00 点>作为天数的计时点
全局性定义:用户ID号的生成策略
全局性定义:组ID号的生成策略
全局性定义:是否创建用户home家目录、用户home家目录的umask 值
全局性定义:用户密码的加密算法
☛ ENCRYPT_METHOD SHA512 # 设置:用户密码的加密算法
二、管理:用户密码复杂性策略
1.方式1:/etc/login.defs 文件(用于 CentOS 6)
★ 了解:/etc/login.defs 文件内容 ☚ 对root 账户及root 操作无效
● 功能:
全局性定义:用户的站内邮件目录
全局性定义:用户的用户密码策略
☛ PASS_MAX_DAYS 99999 # 用户密码的最长使用期限(天数)
☛ PASS_MIN_DAYS 0 # 用户密码的最短使用期限(天数)
☛ PASS_MIN_LEN 5 # 密码最小长度
# 需要<pam_cracklib 模块>,用于CentOS 6
# CentOS 7 默认取消了对<pam_cracklib 模块>的使用
☛ PASS_WARN_AGE 7 # 提前警告密码过期的天数
全局性定义:用户ID号的生成策略
全局性定义:组ID号的生成策略
全局性定义:是否创建用户home家目录、用户home家目录的umask 值
全局性定义:用户密码的加密算法
☛ ENCRYPT_METHOD SHA512 # 设置:用户密码的加密算法
2.方式2:/etc/security/pwquality.conf(用于 CentOS 7)
★ CentOS7/RHEL7 开始使用pam_pwquality模块进行密码复杂性策略的控制管理。
★ pam_pwquality 模块替换了Centos6/RHEL6中的pam_cracklib 模块,并向后兼容。
★ 了解:/etc/security/pwquality.conf
retry=N 定义:登录/修改密码失败时,可以重试的次数;
Difok=N 定义:新密码中必须有几个字符要与旧密码不同。
但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;
minlen=N 定义:用户密码的最小长度;
dcredit=N 定义:用户密码中必须包含多少个数字;
ucredit=N 定义:用户密码中必须包含多少个大写字母;
lcredit=N 定义:用户密码中必须包含多少个小些字母;
ocredit=N 定义:用户密码中必须包含多少个特殊字符(除数字、字母之外);
如果 =-1 表示:至少有一个
★ 了解:authconfig 命令
命令语法:authconfig [选项] {--update | --updateall}
## 常用选项:
## --passminlen=<number> 密码最小长度
## --passminclass=<number> 密码中,字符类的最小数量
## --passmaxrepeat=<number> 密码中,连续相同字符的最大数量
## --passmaxclassrepeat=<number> 密码中,连续同类字符的最大数量
## --enablereqlower 密码中至少需要一个小写字符
## --disablereqlower 密码中不需要小写字符
## --enablerequpper 密码中至少需要一个大写字符
## --disablerequpper 密码中不需要大写字符
## --enablereqdigit 密码中至少需要一个数字
## --disablereqdigit 密码中不需要数字
## --enablereqother 密码中至少需要一个其他字符
## --disablereqother 密码中不需要其他字符
## --update 采用<新设置>来更新<配置文件>
## --updateall 采用<新设置>来更新<所有配置文件>
★ 案例演示:仅限制密码最小长度 10 位,不限制其他内容
authconfig --passminlen=10 \
--disablereqlower \
--disablerequpper \
--disablereqdigit \
--disablereqother \
--update
useradd user03
echo 'user03:123' | chpasswd
su -l user03
passwd
★ 课后作业
1.当前服务器需要运行一个程序,为了防止程序因漏洞造成的非法提权隐患,要求该程序以一个test用户身份来运行,请问:我应该如何创建这个test用户?
2.现在有一个user01用户,它当前隶属于kaifa开发组,现在因为工作需要,需要进入cheshi测试组开展工作,同时保留他的kaifa开发组成员身份,请问:我该如何配置user01用户加入cheshi测试组?
3.当前zhangsan张三用户试用期3个月已过,公司决定正式录用,合同期从当天日期开始计算,为期一年,请问:我该如何配置zhangsan张三用户,让其用户账户的有效期顺延一年?
4.当我cat查看/etc/shadow文件时,发现user01用户的密码字段是以 ! 开头,请问:这说明了什么?
5.现在liujun刘军用户因工作需要,被暂时调离了工作岗位,请问:出于工作维系与安全考虑,我该如何处置liujun刘军用户?
6.由于 root 用户大家都知道,因此我想让jack杰克用户直接具备root用户一模一样的特权。请问:我该如何做?
7.由于大家密码安全意识淡薄,因此我需要在密码安全策略方面,增加密码的最小长度限定。请问:我该如何做。
8.我创建了一个tom汤姆用户,但是我不小心执行了rm -rf /home/tom/.*命令,从这之后,每当tom用户登录之后,就会看到如下图的命令行提示符:
请问:我该如何使之恢复正常?
9.企业A有三个部门,分别为:销售部、财务部、生产部。
销售部有三名员工
财务部有二名员工
生产部有四名员工
总经理:王二
要求:每个部门的员工需要隶属于每个部门小组。
总经理要隶属于所有的部门小组。
要求:销售部员工小张离职,你该如何处理其用户账户?
生产部员工小王暂时借调到销售部协助工作,你该如何处理其用户账户?
财务部员工小赵结婚,需要停薪留职,你该如何处理其用户账户?