目录
本章节目标:
了解什么是用户什么是组
了解Linux用户和组的相关配置文件
了解用户和组相关的管理命令
概念部分:
用户和组的概念:
用户存在的目的是为了实现资源的分派
用户分类:
【管理员root:0】
【系统用户:1-1000】
【普通用户:10001-60000】
运行中的程序:
进程 :【以进程的发起者身份运行】【进程所能访问的权限来自于发起者的权限】
Linux通过安全上下文的概念完成用户权限的指派【先判断用户是否是某文件的属主】【再判断用户是否属于某个组】【最后定其为其他用户】
Linux用户组类别
用户组类别 | 特性 |
---|---|
私有组 | 创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组 |
基本组 | 用户的默认组 |
附加组 | 默认组以为的其他组 |
各配置文件说明
配置文件 | 作用 |
---|---|
/etc/passwd | 用户及其属性信息(名称、uid、基本组id等等) |
/etc/group | 组及其属性信息 |
/etc/shadow | 用户密码及其相关属性 |
/etc/gshadow | 组密码及其相关属性。在用户执行基本组切换时使用 |
配置文件 | /etc/passwd | /etc/group |
---|---|---|
第一字段 | 用户名 | 组名 |
第二字段 | 密码占位符 | 组密码 |
第三字段 | UID | GID |
第四字段 | GID | 以当前组为附加组的用户列表(分隔符为逗号) |
第五字段 | 用户的描述信息 | |
第六字段 | 用户家目录 | |
第七字段 | 用户的登录shell |
配置文件 | /etc/shadow |
---|---|
第一字段 | 登录名 |
第二字段 | 加密后的密码 |
第三字段 | 最近一次更改密码的日期 |
第四字段 | 密码的最小使用期限 |
第五字段 | 密码的最大使用期限 |
第六字段 | 密码警告时间段 |
第七字段 | 密码禁用期 |
第八字段 | 帐号的过期日期 |
第九字段 | 保留字段 |
加密方法
对称加密:加密和解密使用同一个密钥
公钥加密:每个密码都成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密:也叫散列加密,提取数据特征码,能加密不能解密,常用于做数据完整性校验
单向加密特点:
雪崩效应(初始条件的微小改变,将会引起结果
定长输出
实验部分:用户和组相关的管理命令
用户创建命令useradd:
使用格式:useradd [option] username
[option]:
-u UID //[UID_MIN,UID_MAX]定义在/etc/login.defs文件中
-g GID //指定用户所属基本组,可为组名或GID
-G groupname,... //附加组,可以有多个,用逗号隔开。组groupname必须事先存在
-c "COMMENT" //注释信息
-d /path/to/directory //指定用户的家目录。此目录必须不能事先存在, \
//否则将不会从/etc/skel中复制环境设置文件
-s shell //这里的shell最好使用/etc/shells里面有的shell, \
// /etc/shells指定了当前系统可用的安全shell
-M //创建用户时不给其创建家目录
-r //添加一个系统用户
实验操作【-u -g -G -c -d -s】
[root@sh ~]# useradd sh -u 1001 -g 1001 -G xx,ss -c'ssss' -d /opt/sh -s /bon/nologin
[root@sh ~]# id sh
uid=1001(sh) gid=1001(taoist) 组=1001(taoist),1003(xx),1004(ss)
[root@sh ~]# ls /opt/
sh
[root@sh ~]# cat /etc/passwd | tail -4
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
wangqing:x:1000:1002:wuliangtianzun:/home/wangqing:/bin/csh
sh:x:1001:1001:ssss:/opt/sh:/bon/nologin
实验操作【-M】
[root@sh ~]# useradd -M ww
[root@sh ~]# ls /home
wangqing
实验操作【-r】
[root@sh ~]# useradd -r lk
[root@sh ~]# id lk
uid=997(lk) gid=995(lk) 组=995(lk)
用户删除命令userdel:
使用格式:user [option] username
[option]:
-r [删除用户时同时删除其家目录(默认情况下不会删除家目录)]
实验操作【-r】
[root@sh ~]# userdel -r wangqing
[root@sh ~]# ls /home
[root@sh ~]#
查看用户账号的信息命令id:
使用格式:id [option] username
[option]
-u //查看UID
-g //查看GID
-G //查看组
实验操作【-u -g -G】
[root@sh ~]# id sh
uid=10000(sh) gid=1001(taoist) 组=1001(taoist),1003(xx),1004(ss)
[root@sh ~]# id -u sh
10000
[root@sh ~]# id -g sh
1001
[root@sh ~]# id -G sh
1001 1003 1004
修改用户账号属性的命令:
使用格式:usermod [option] username
[option]
-u UID
-g GID
-a -G groupname //不使用-a选项,会覆盖此前的附加组
-d -m //改变用户家目录的同时把原来家目录的文件移动到新的家目录中
-e YYYY-MM-DD //指明用户帐号过期日期
-f INACTIVE //设定非活动期限
-L //锁定帐号。
//被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
-U //解锁帐号
//chsh 修改用户的默认shell
//语法:chsh [options] [username]
-s SHELLL
实验操作【-u -g -a -G -d -m】
[root@sh ~]# id jjyy
uid=10001(jjyy) gid=10001(jjyy) 组=10001(jjyy)
[root@sh ~]# usermod -u 10002 -g 1001 -a -G 100 jjyy
[root@sh ~]# id jjyy
uid=10002(jjyy) gid=1001(taoist) 组=1001(taoist),100(users)
root@sh ~]# usermod -d /opt/123 -m jjyy
[root@sh ~]# ls /opt/
123 jjyy sh
[root@sh ~]# ls /home/
[root@sh ~]#
实验操作【-e -f -L 】
[root@sh ~]# usermod -e 2019-03-20 -f 7 -L jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :5月 28, 2019
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :3月 20, 2019
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@sh ~]# ssh jjyy@192.168.91.132
The authenticity of host '192.168.91.132 (192.168.91.132)' can't be established.
ECDSA key fingerprint is SHA256:QZ4qPvKv8db35i50VU7HAAVwv5zfmP92dvVEdYwJtpE.
ECDSA key fingerprint is MD5:a9:63:73:a8:40:4a:5f:4f:3b:85:51:0f:02:58:72:12.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': y
Please type 'yes' or 'no': y
用户切换命令su:
使用格式:su [-] username
切换用户的方式 | 特点 |
---|---|
su USERNAME | 非登录式切换,即不会读取目标用户的配置文件 |
su - USERNAME | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
实验操作
[root@sh ~]# su - jjyy
上一次登录:三 5月 29 00:04:57 CST 2019pts/0 上
[jjyy@sh ~]$
bash的配置文件:
配置文件类型 | 配置文件路径 |
---|---|
全局配置 | /etc/profile /etc/profile.d/*.sh /etc/bashrc |
个人配置 | ~/.bash_profile~/.bashrc |
配置文件类型 | 功能 |
---|---|
profile类 | 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本 |
bashrc类 | 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名 |
登录式shell如何读取配置文件?
【/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc】
非登录式shell如何读取配置文件?
【~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh】
密码管理命令passwd:
使用格式:passwd [option] [username]
[option]:
--stdin //从标准输入获取用户密码, \
//例:echo "redhat"|passwd --stdin user1
-l //锁定用户
-u //解锁用户
-d //删除用户密码
-n mindays //指定最短使用期限
-x maxdays //指定最长使用期限
-w warndays //提前多少天开始警告
-i inactivedays //非活动期限,密码过期后到禁用前的这段时间
实验操作【-stdin】
[root@sh ~]# echo "123456" | passwd --stdin jjyy
更改用户 jjyy 的密码 。
passwd:所有的身份验证令牌已经成功更新。
实验操作【-l】
[root@sh ~]# passwd -l jjyy
锁定用户 jjyy 的密码 。
passwd: 操作成功
实验操作【-u】
[root@sh ~]# passwd -u jjyy
解锁用户 jjyy 的密码。
passwd: 操作成功
实验操作【-d】
[root@sh ~]# passwd -d jjyy
清除用户的密码 jjyy。
passwd: 操作成功
实验操作【-n -x -w -i】
[root@sh ~]# passwd -n 2 -x 7 -w 5 -i 3 jjyy
调整用户密码老化数据jjyy。
passwd: 操作成功
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :5月 28, 2019
密码过期时间 :6月 04, 2019
密码失效时间 :6月 07, 2019
帐户过期时间 :12月 12, 2020
两次改变密码之间相距的最小天数 :2
两次改变密码之间相距的最大天数 :7
在密码过期之前警告的天数 :5
改变用户密码过期信息命令chage:
使用格式:chage [option] username
[option]
-d //最近一次的修改时间
-E //过期时间
-I //非活动时间
-m //最短使用期限
-M //最长使用期限
-W //警告时间
实验操作【-d】
[root@sh ~]# chage -d 1 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :1月 09, 1970
密码失效时间 :1月 12, 1970
帐户过期时间 :12月 12, 2020
两次改变密码之间相距的最小天数 :2
两次改变密码之间相距的最大天数 :7
在密码过期之前警告的天数 :5
实验操作【-E】
[root@sh ~]# chage -E 2030-12-30 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :1月 09, 1970
密码失效时间 :1月 12, 1970
帐户过期时间 :12月 30, 2030
两次改变密码之间相距的最小天数 :2
两次改变密码之间相距的最大天数 :7
在密码过期之前警告的天数 :5
实验操作【-I】
[root@sh ~]# chage -I 10 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :1月 09, 1970
密码失效时间 :1月 19, 1970
帐户过期时间 :12月 30, 2030
两次改变密码之间相距的最小天数 :2
两次改变密码之间相距的最大天数 :7
在密码过期之前警告的天数 :5
实验操作【-m】
[root@sh ~]# chage -m 20 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :1月 09, 1970
密码失效时间 :1月 19, 1970
帐户过期时间 :12月 30, 2030
两次改变密码之间相距的最小天数 :20
两次改变密码之间相距的最大天数 :7
在密码过期之前警告的天数 :5
实验操作【-M】
[root@sh ~]# chage -M 50 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :2月 21, 1970
密码失效时间 :3月 03, 1970
帐户过期时间 :12月 30, 2030
两次改变密码之间相距的最小天数 :20
两次改变密码之间相距的最大天数 :50
在密码过期之前警告的天数 :5
实验操作【-W】
[root@sh ~]# chage -W 10 jjyy
[root@sh ~]# chage -l jjyy
最近一次密码修改时间 :1月 02, 1970
密码过期时间 :2月 21, 1970
密码失效时间 :3月 03, 1970
帐户过期时间 :12月 30, 2030
两次改变密码之间相距的最小天数 :20
两次改变密码之间相距的最大天数 :50
在密码过期之前警告的天数 :10
密码生成工具openssl:
使用格式:openssl command [commmand_opts] [comand_args]
command //包含标准命令、消息摘要命令、加密命令
version //查看程序版本号
dgst //提取特征码
passwd //生成密码
rand //生成伪随机数
实验操作【vresion】
[root@sh ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
实验操作【dgst】
[root@sh ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= 2ed3a1cb4c50baaf4a7a0ebaa97f9c85
实验操作【passwd】
[root@sh ~]# openssl passwd -1 -salt jjyy
Password:
$1$jjyy$eiFPyIJZ5lnGddpF9mdxU.
实验操作【rand】
[root@sh ~]# openssl rand -base64 20
hcXGyI0rNEuQ04HZLlIMv5pOK1s=
创建组命令groupadd:
使用格式:groupadd [opention] group
[option]:
-g GID //指定GID
-r //添加一个系统组
实验操作【-g】
[root@sh ~]# groupadd -g 123 hh
[root@sh ~]# cat /etc/group | grep hh
hh:x:123:
实验操作【-r】
[root@sh ~]# groupadd -r kk
[root@sh ~]# cat /etc/group | grep kk
kk:x:994:
修改组信息命令groupmod:
使用格式:gropmod [option] group
[opention]:
-g GID //修改指定组的GID
-n groupname //修改组名
实验操作【-g】
[root@sh ~]# groupmod -g 321 hh
[root@sh ~]# cat /etc/group | grep hh
hh:x:321:
实验操作【-n】
[root@sh ~]# groupmod -n ll hh
[root@sh ~]# cat /etc/group | grep ll
ll:x:321:
删除组命令groupdel:
使用格式:groupdel [option] group
实验操作
[root@sh ~]# groupdel ll
[root@sh ~]# cat /etc/group | grep ll
[root@sh ~]#
给组设定密码命令gpasswd:
使用格式:gpasswd [opton] group
[option]:
-a, --add USER //将用户添加至组
-d, --delete USER //将用户从组中删除
-r, --delete-password //删除组密码
实验操作【-a】
[root@sh ~]# gpasswd -a jjyy kk
正在将用户“jjyy”加入到“kk”组中
实验操作【-d】
[root@sh ~]# gpasswd -d jjyy kk
正在将用户“jjyy”从“kk”组中删除
实验操作【-r】
[root@sh ~]# gpasswd kk
正在修改 kk 组的密码
新密码:
请重新输入新密码:
[root@sh ~]# gpasswd -r kk
组的删除groupdel
实验操作
[root@sh ~]# groupdel ll
[root@sh ~]# cat /etc/group | grep ll
[root@sh ~]#
给组设定密码命令gpasswd:
使用格式:gpasswd [opton] group
[option]:
-a, --add USER //将用户添加至组
-d, --delete USER //将用户从组中删除
-r, --delete-password //删除组密码
实验操作【-a】
[root@sh ~]# gpasswd -a jjyy kk
正在将用户“jjyy”加入到“kk”组中
实验操作【-d】
[root@sh ~]# gpasswd -d jjyy kk
正在将用户“jjyy”从“kk”组中删除
实验操作【-r】
[root@sh ~]# gpasswd kk
正在修改 kk 组的密码
新密码:
请重新输入新密码:
[root@sh ~]# gpasswd -r kk