5.1 用户和组概念
1 主要命令:
用户增删查改 useradd userdel id 或 cat/etc/passwd usermod
组增删查改 groupadd groupdel cat/etc/group groupmems 或 gpasswd
id ## 查看当前用户的 uid gid 附属组(G)
-u ## 显示用户的唯一标识符(UID)。
-g ## 显示用户所属组的标识符(GID)。
-G ## 显示用户所属的所有组的标识符。
2 什么是用户和组:
在linux系统中
用户指的是对操作系统实现不同功能身份的人。
组表示一个或多个用户合成的一个群体。
3 用户和组的关系:
组中可以没有用户、也可以有一个或者多个用户。
用户只有一个主要组,可以同时属于多个组,除了主组以外的其他组称为附属组。
4 linux用户分为三大类
1.超级用户 : root uid=0 系统中唯一的超级管理员 ,拥有最大权限!
2.系统用户 : rhel6 系统 uid=1~499 centos系统 uid=1-999 不需要登录系统!维护系统正常运行。
3.普通用户 : rhel6 系统 uid>=500 centos系统 uid>=1000 可以登录操作系统
5.2 用户账户 user
5.2.1 用户账户属性要素
★ 用户账户名(姓名) 必选
★ 密码(登录口令) 可选,视<用户类型>而定,可后期设置<密码>
★ 用户UID(身份证号码) 必须,会自动生成,也可自定义
★主要组(第一国籍) 必须,会自动生成,也可自定义
★ 附加组(第N国籍) 可选,可后期添加
★ 辅助信息(记录其他的描述性信息) 可选,可后期添加
★ 家目录(用户私密空间)) 可选,视<用户类型>而定
★ 登录Shell(使用什么兵器) 可选,视<用户类型>而定
★ 密码时限策略 可选,采用<默认的密码时限策略>,可后期修改
★ 账户有效期(工作时限) 可选,视<人事要求>而定,可后期添加
5.2.2 管理用户账户
用户增删查改 useradd userdel id 或 cat/etc/passwd usermod
重要文件:
/etc/passwd ## 保存:<用户>的<账户信息>
/etc/shadow ## 保存:<用户>的<密码信息>
/etc/skel/ ## 定义:<用户home目录>的<模板内容>,可用来恢复家,复制就行
## 假如用户cl没有家了 可以使用cp /etc/skel/.* /home/cl
/etc/default/useradd ## 定义:创建<用户>的<默认参数>
1 创建用户
语法:useradd 选项… 用户名
注意:一次只能创建一个用户
选项:
-u ## 指定 uid ,普通用户uid大于1000,填数字 ,默认自动创建
-g ## 指定 gid ,可写主组名称或者gid数字,确保主组存在,默认自动创建
-G ## 加入指定的附加组
-U ## 创建与用户同名的组,默认就同名 ##没卵用
-N, --no-user-group ## 不创建同名的组
-m ## 创建用户的主目录 常和 -d 一起使用,搬家
-M ## 不创建用户的主目录,常和 -s 指定不登录时一起使用
-s, --shell SHELL ## 新账户的登录 shell 如 useradd -s /bin/bash cl 或 useradd -s /sbin/nologin
-r, --system ## 创建一个系统账户
-d, --home-dir HOME_DIR ## 指定新账户的主目录 常和 -m一起使用 搬家
-c, --comment COMMENT ## 新账户的 GECOS 字段
-o, --non-unique ## 允许使用重复的 UID 创建用户
-f, --inactive INACTIVE ## 新账户的密码不活动期
## -m -d 搬家 -s /sbin/nologin 不需要登录的用户
例子:
举例1:创建一个普通用户(其他属性均采用默认设置)
useradd user01
举例2:创建一个系统用户,不允许其Shell登录、不需要家目录(其他属性均采用默认设置)
useradd -s /sbin/nologin -r user02 或者 useradd -s /sbin/nologin -M user02
举例3:创建一个普通用户,指定其家目录为</tmp>(其他属性均采用默认设置),本来就有 /tmp,所以不用 -m
useradd -d /tmp user03
设置/清除:用户密码
passwd ## 交互式设置:当前用户的<用户密码>
passwd user01 ## 交互式设置:指定用户的<用户密码>
echo 'root:a123456!' | chpasswd ## 非交互式设置:指定用户的<用户密码>
echo 'user01:a123456!' | chpasswd ## 非交互式设置:指定用户的<用户密码>
passwd -d user01 ## 清除指定用户的<用户密码>
删除:用户账户
userdel user01 ## 删除<用户账户>,保留<用户家目录>
userdel -r user02 ## 删除<用户账户>,删除<用户家目录> (重要常用)
查看:用户账户
id user01
加入/退出:用户账户的附加组
groupadd g01
groupadd g02
useradd -G g01 user01 ## 在创建用户账户的同时,加入指定的附加组
useradd user02
usermod -G g01 user02 ## 针对已经创建的用户账户,退出当前的附加组,然后加入新的附加组
usermod -aG g02 user02 ## 针对已经创建的用户账户,不退出当前的附加组,然后加入新的附加组 重要
usermod -G "" user02 ## 针对已经创建的用户账户,退出当前的附加组
修改:用户账户的主要组
useradd user01
groupadd g01
usermod -g g01 user01 ## 针对已经创建的用户账户,修改其主要组
5.2.3 修改用户账户其他属性
语法:usermod [选项]… <用户账户名> 和useradd用的选项基本一致,一个是创建一个是修改
选项:
-l, --login LOGIN ## 新的登录名称
-u ## 设置用户的新 uid
-g ## 强制使用 GROUP 为新主组
-G ## 加入指定的附加组,原附加组会退出,常和 -a一起使用##useradd不需要-a
-a, --append GROUP ## 将用户追加至上边 -G 中提到的附加组中,并且保留原附加组
例如 usermod -aG lz,ikun GROUP
-U ## 创建与用户同名的组,默认就同名 ##没卵用
-N, --no-user-group ## 不创建同名的组
-m ## 创建用户的主目录 常和 -d 一起使用, 建家
-d, --home-dir HOME_DIR ## 指定新账户的主目录 常和 -m一起使用 搬家
-M ## 不创建用户的主目录,常和 -s 指定不登录时一起使用
-s, --shell SHELL ## 修改新账户的登录 shell 如 useradd -s /bin/bash cl 或 useradd -s /sbin/nologin
-r, --system ## 创建一个系统账户
-c, --comment COMMENT ## 新账户的 GECOS 字段,如 usermod -c "厕所长" zs
-o, --non-unique ## 允许使用重复的 UID
-e, --expiredate EXPIRE_DATE ## 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE ## 过期 INACTIVE 天数后,设定密码为失效状态
-L, --lock ## 锁定用户帐号 ,即在shadow文件密码那里的前面多了一个 ! ## 解锁用 -U 或者去shadow文件把 ! 删掉
-U, --unlock ## 解锁用户帐号
## -m -d 搬家 -s /sbin/nologin 不需要登录的用户
例子:
修改:用户账户的其他属性
usermod -c "张总" user01 ## 针对已经创建的用户账户,修改其<辅助性描述信息>
usermod -e "2021-12-31" user01 ## 针对已经创建的用户账户,修改其<账户有效期>
usermod -l "zhangzong" user02 ## 针对已经创建的用户账户,更改其<用户账户名> ,将 user02 改为 zhangzong
更改:账户过期策略
chage -l root ## 显示:<root用户>当前的<密码更改和过期策略>
chage -E 2020-03-28 root ## 设置:<用户账户>的<帐户过期日期=2020-03-28>
chage -E $(date -d +180days +%Y-%m-%d) root ## 设置:<用户账户>的<帐户过期日期=180天之后>
锁定/解锁:用户账户
锁定:用户密码
usermod -L user01
解锁:用户密码
usermod -U user01
或者
vim /etc/shadow
把 user01 那一行的密码前面的 ! 删掉 保存即可
5.2.4 用户账户配置文件
- 简介:用户账户的相关配置文件
/etc/passwd 文件 ## 保存:<用户>的<账户信息>
/etc/shadow 文件 ## 保存:<用户>的<密码信息>
/etc/skel/ 目录 ## 定义:<用户home目录>的<模板内容>,可用来恢复家,复制就行
假如用户cl没有家了
mkdir -p /home/cl
cp /etc/skel/.* /home/cl/ 或 cd /home/cl cp /etc/skel/.* .
/etc/default/useradd 文件 ## 定义:创建<用户>的<默认参数>,可修改
[root@server ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
- 详解:/etc/passwd 配置文件
格式:<:冒号>分隔,一共为7段,每一行记录一个用户账号信息
root:x:0:0:root:/root:/bin/bash
字段1:用户账号的名称
字段2:用户账号的用户密码,此字段值为 x,而真正的组密码则存储在</etc/shadow>中
字段3:用户账号的<UID>
字段4:用户账号所属的主要组GID,即:用户登录时,一开始就属于这个组
字段5:用户账号的注释信息 -c 指定写入的内容,辅助性描述信息
字段6:用户账号的家目录
字段7:用户账号的登录shell
- 详解:/etc/shadow 配置文件
格式:<:冒号>分隔,一共为8段,每一行记录一个用户账号信息
user01:$6$aK9cnC......WcPL0HF0:18865:0:99999:7:1:18992:
字段1:用户账号的名称
字段2:默认MD5加密的用户密码,如果此字段值以 ! 开头,则表示:密码被 usermod -L 锁定 ,可删去 ! 号或者用 -U 解锁,不区分大小写
字段3:用户密码的最后一次的更改日期(天数,以1970.1.1为参照点)
字段4:用户密码的最短使用期限(天数)
字段5:用户密码的最长使用期限(天数)
字段6:提前警告密码过期的天数,即:临近密码过期时,可以提前多少天予以警告(天数)
字段7:密码到期之后的宽限期(天数)
字段8:用户账号的账号过期日期(天数,以1970.1.1为参照点)
字段9:保留
提问1:两个用户的密码都是 123456 一样的, 那么 shadow 中加密的 hash 值一样吗?
答: 不一样。 因为 salt(撒盐加密)不一样
提问2:把 2 段加密的互换还能登陆吗?salt 什么时候指定的?
答:可以登录,salt 在加密过程中随机生成,保护了加密密码的机密性。
如果忘记root的密码,假如我们不是 root 用户,而是普通用户提权了
我们可以进去shadow文件,进行密码替换
useradd dj ; echo "dj:1" | chpasswd
vim /etc/shadow
将 dj 那一行哈希加密 的密码复制到 root 那一行密码里面,root的密码会被替换成 1
或者 vim /etc/passwd
将 root 登录的shell环境删掉,即 把 x删掉,登录root在修改密码即可
5.3 组账户 group
5.3.1 组账户属性要素
★ 组名称 必须
★ 组密码 可选,不常用
★ 组GID 必须,会自动生成,也可自定义
★ 组成员 可选,可后期添加
5.3.2 管理组账户
增删查改 groupadd groupdel cat /etc/group groupmems | gpasswd
以下都是对组里面的附加用户操作,因为如果是主要用户,这个组相当于他的主要组,只能用用户操作,不能用组操作,而且查看组只会显示这个组的附加用户,不会显示主要用户。
注意:使用 groupmems 命令 要使用 -g 指定组名 , gpasswd 不需要 -g 直接接组名即可
命令 groupmems
语法:groupmems 选项… -g 组名
注意:一次只能创建一个用户
-g, --group groupname ## 更改组 groupname,而不是用户的组(只 root)
-R, --root CHROOT_DIR ## chroot 到的目录
动作:
-a, --add username ## 将用户 username 添加到组成员中
-d, --delete username ## 从组的成员中删除用户 username
-h, --help ## 显示此帮助信息并推出
-p, --purge ## 从组中移除所有成员
-l, --list ## 列出组中的所有成员
例子
1. 创建:组账户
groupadd g01
groupadd g02
2. 删除:组账户
groupdel g02
3. 添加:组成员 -a -g
useradd user01
useradd user02
groupmems -a user01 -g g01 ## 添加:单个组成员 把user01 加入 g01 组 一次只能添加一个成员
gpasswd -a user02 g01 ## 添加:单个组成员
4. 删除:组成员 -d
groupmems -d user01 -g g01 ## 删除:单个组成员 把user01 移除 g01 组
gpasswd -d user02 g01 ## 删除:单个组成员
5. 重置:组成员 -M ,给g01组恢复出厂,并把 user03 user04 添加进 g01 组
useradd user03
useradd user04
gpasswd -M user03,user04 g01 ## 重置:组成员(可一次性设置:一个或多个组成员)
## 注意:是重置组账户的组成员,而不是重置用户账户的附加组
6. 清空:组成员 -p
groupmems -p -g g01
7. 列出:组成员 -l 注意:只会列出附加成员,主要成员(该组是该用户的主要组)不会列出
groupmems -l -g g01
8. 修改:组账户
语法:groupmod -n <新组名称> <老组名称> ## 更名:组账户
## 选项备注:
## -n ☚ 改名为 NEW_GROUP
语法:groupmod [-o] -g <新GID> <组名称> ## 更改:组GID
## 选项备注:
## --g ☚ 将组 ID 改为 GID
## --o ☚ 允许使用重复的 GID
5.3.3 组账号配置文件
/etc/group 文件 组账户文件,主要包含:组账户名称、组账户GID号、附加的组成员名称。
/etc/gshadow 文件 组账户密码文件,主要包含:组账户名称、组密码、附加的组成员名称。
5.4 管理用户密码策略
5.4.1 修改密码方式
useradd dj
echo "123456" | passwd --stdin cephadm
或
echo "dj:123456" | chpasswd
需要 sudo 加在管道符后面比如 echo "dj:1223456" | sudo chpasswd
5.4.2 管理用户密码时限策略
方式1 全局性设置
★ 了解:/etc/login.defs 文件内容 ☚ 对root 账户及root 操作无效
cat /etc/login.defs|egrep -v “^\s*(#|$)”
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 点>作为天数的计时点
UID_MIN 1000 ## 全局性定义:用户ID号的生成策略
UID_MAX 60000
SYS_UID_MIN 201 ## 系统用户的最小 ID
SYS_UID_MAX 999
GID_MIN 1000 ## 全局性定义:组ID号的生成策略 普通用户 最小 和 最大GID
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes ## 全局性定义:是否创建用户home家目录、用户home家目录的umask 值
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512 ## 设置:用户密码的加密算法
方式2 单个用户设置
chage 命令
功能: 更改用户的密码过期信息和账户相关的参数。
语法:chage [options]
常用的选项包括:
-d 设置最后一次更改密码的日期(yyyy-mm-dd 格式)。
-E 设置账户的到期日期(yyyy-mm-dd 格式)。
-I 设置账户处于不活动状态后多少天才会被禁用。
-m 设置两次更改密码之间的最短天数。 ## 没到时间不能修改
-M 设置用户密码的有效期限制,超过这个天数需要更改密码。
-W 在密码过期之前给出警告的天数。
-l 列出用户的密码过期信息和账户相关的参数。 ## 重要
-i 显示账户的不活动状态时间。
-R 更改指定目录下的用户密码过期信息,而不是默认的 /etc/shadow 文件。
例子
chage -d 2019-03-28 root ## 更改:最近一次密码修改日期为指定的日期
chage -m 0 root ## 设置:密码最短使用期限(天数=0,可随时更改密码)
chage -M 7 root ## 设置:密码最长使用期限(天数=7) 7天后就过期
chage -W 3 root ## 设置:密码过期之前提前警告期限(天数=3)
chage -I 1 root ## 设置:密码过期宽限期为1天
[root@server appendonlydir]# chage -l root
最近一次密码修改时间 从不 -d
密码过期时间 从不 -M
密码失效时间 从不 -M
帐户过期时间 从不 -E
两次改变密码之间相距的最小天数 0 -m
两次改变密码之间相距的最大天数 99999
在密码过期之前警告的天数 7 -W
- 设置用户 it02 第一次登陆时强制修改密码且密码在 2023/12/12 失效
chage -d 0 -E 2023-12-12 it02
5.4.3 管理用户密码复杂性策略
方式1:/etc/login.defs 文件(用于 CentOS 6)
和上面的方式一是一样的,全局设置