1、用户
1.1 用户分类
Linux用户分为管理员和普通用户两种
用户类别 | 用户ID |
---|---|
管理员 | 1-999 |
普通用户 | 1000-65535 |
其中普通用户又分为系统用户和登录用户两种:
用户类别 | 用户ID |
---|---|
系统用户 | 1-499(为守护类进程获取系统资源而完成权限指派的用户) |
登录用户 | 500-6000(为了完成交互式登录使用的用户) |
1.2 Linux安全上下文
运行中的程序:进程(process)
- 以进程发起者的身份运行
- root:cat
- tom:cat
- 进程所能够访问的所有资源的权限取决于进程的发起者的身份
Linux通过完全上下文的概念完成用户权限的指派
- 先判断用户是否某文件的属主
- 再判断用户是否属于某个组
- 最后定其为其他用户
1.3 Linux用户组类别
配置文件 | 作用 |
---|---|
/etc/passwd | 用户及其属性信息(名称、、uid、基本组id等) |
/etc/group | 组及其属性信息 |
/etc/shadow | 用户密码及其相关属性 |
/etc/gshadow | 组密码及其相关属性。在用户执行基本组切换时使用 |
2、Linux用户和组相关的配置文件
2.1 各配置文件说明
配置文件 | /etc/passwd | /etc/group |
---|---|---|
第一字段 | 用户名 | 组名 |
第二字段 | 密码占位符 | 组密码 |
第三字段 | UID | GID |
第四字段 | GID | 以当前组为附加组的用户列表(分隔符为逗号) |
第五字段 | 用户的描述信息 | |
第六字段 | 用户家目录 | |
第七字段 | 用户登录shell |
配置文件 | /etc/shadow |
---|---|
第一字段 | 登录名 |
第二字段 | 加密后的密码 |
第三字段 | 最近一次更改密码的日期 |
第四字段 | 密码的最小使用期限 |
第五字段 | 密码的最大使用期限 |
第六字段 | 密码警告时间段 |
第七字段 | 密码禁用期 |
第八字段 | 账号的过期日期 |
第九字段 | 保留字段 |
2.2 加密方法
对称加密: 加密和揭秘使用同一个密钥
公钥加密: 每个密码都成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密: 也叫散列加密,提取数据特征码,能加密不能解密,常用于做数据完整性校验
单向加密特点:
雪崩效应(初始条件的微小改变,将会引起结果的巨大改变)
定长输出
1. MD5:Message Digest,128位定长输出
2. SHA1:Secure Hash Algorithm,160位定长输出
3. SHA224:224位定长输出
4. SHA256:256位定长输出
5. SHA384:384位定长输出
6. SHA512:512位定长输出
2.3 Linux用户密码加密方式
Linux密码是使用的单项加密方式进行加密
密码复杂性策略:
- 使用数字、大写字母、小写字母及特殊字符中至少3种
- 足够长
- 使用随机密码,不要使用有意义的单词或数字
- 定期更换,不要使用最近曾使用的密码
3、用户和组相关的管理命令
3.1 用户管理
3.1.1 用户创建命令 useradd
#语法:useradd [option] USERNAME
-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/shell s里面的shell
# /etc/shells指定了当前系统可用的安全shell
-M #创建用户时不给其创建家目录
-r #添加一个系统用户
-D #直接打印 /etc/default/useradd
# 示例
useradd jlin #创建jlin用户
useradd -u 1001 jlin #创建jlin用户并指定uid为1001
useradd -u 1001 -g 1001 jlin #创建jlin用户并指定uid和gid
uid必须事先不存在,gid必须事先存在
useradd -r -M -s /sbinnologin httpd #创建一个系统用户
3.1.2 用户删除命令 userdel
// 语法:userdel [option] USERNAME
-r #删除用户的同时删除其家目录 (userdel默认不会删除其家目录)
#示例
userdel jlin #删除用户jlin
userdel -r jlin #删除用户jlin并删除家目录
3.1.3 查看用户账号信息命令 id
id #/查看用户的账号属性信息
-u #查看UID
-g #查看GID
-G #查看Groups
3.1.4 修改用户账号属性的命令
// usermod 修改用户属性
// 语法:usermod [options] USERNAME
-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 SHELL
// 示例
usermod -s /bin/bash httpd
usermod -u 2000 jlin #修改用户jlin的uid
3.1.5 切换用户命令 su
切换用户的方式 | 特点 |
---|---|
su USERNAME | 非登录式切换,即不会读取目标用户的配置文件 |
su -USERNAME | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码
// 语法:su [options] [-] [USER [arg]...]
-c 'COMMAND' #切换身份执行命令,命令执行结束后又回到原来的身份
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
3.2 密码管理
3.2.1 密码管理命令 passwd
语法:passwd [options] USERNAME
--sidin #从标准输入获取用户密码
#例:echo "redhat" /passwd --stdin user1
-l #锁定用户
-u #解锁用户
-d #删除用户密码
-n mindays #指定最短使用期限
-x maxdays #指定最长使用期限
-w warndays #提前多少天开始警告
-i inactivedays #非活动期限,密码过期后到禁用前的这段时间
3.2.2 改变用户密码过期信息命令 chage
// 语法:chage [options] USERNAME
-d #最近一次的修改时间
-E #过期时间
-I #非活动时间
-m #最短使用期限
-M #最长使用期限
-W #警告时间
3.2.3 密码生成工具 openssl
// 语法:openssl command [command_opts] [command_args]
command #包含标准命令、消息摘要命令、加密命令
version #查看程序版本号
dgst #提取特征码
passwd #生成密码
rand #生成伪随机数
// 提取特征码
[root@JLin ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= 152a0dd354486b0b80b07d6b28d9f7cc
// 生成密码 openssl passwd -1 -salt string #string一般为8位
[root@JLin ~]# openssl passwd -1 -salt hellotom
Password:
$1$hellotom$o9rUZ07NstylvbqW9RrdV/
// 生成随机数 openssl rand -bash64 NUM
#NUM表示随机数的长度
[root@JLin ~]# openssl rand -base64 20
+EZdn+ESycF1Ae7P4Dzf7UkbZgU=
3.2.5 破解密码
1.关机
2.开机
3.在内核上按e键
4.找到UTF8的行,在这一行中加上rd. break
5.ctrl+x
6.mount -o remount, rw /sysroot
7.chroot /sysroot
8.echo"密码"passwd --stdin root
9.touch /.autorelabel
10.exit
11.exit
3.3 组管理
3.3.1 创建组命令 groupadd
// 语法:groupadd [options] GROUP
-g GID #指定GID
-r #添加一个系统组
3.3.2 修改组信息命令 groupmod
// 语法:groupmod [options] GROUP
-g GID #修改指定组的GID
-n groupname #修改组名
3.3.3 删除组命令 groupdel
// 语法:groupdel [options] GROUP
// 删除组时只需要指定组名即可
3.3.4 给组设定密码命令 gpasswd
// 语法:gpasswd [option] GROUP
-a,--add USER #将用户添加至组
-d,--delete USER #将用户从组中删除
-r,--delete-password #删除组密码
3.3.5 切换组命令 newgrp
将当前用户临时切换至新的基本组,这里需要用到gpasswd设置的组密码,使用newgrp登录至新的基本组后可以使用exit退出,推出后其原本组不变
// 语法:nwegrp [-] [group]
[root@JLin ~]# groupadd jlin
[root@JLin ~]# gpasswd jlin
Changing the password for group jlin
New Password:
Re-enter new password:
[root@JLin ~]# useradd lin
[root@JLin ~]# su - lin
[root@JLin ~]$ id
uid=1001(lin) gid=1002(lin) groups=1002(lin)
[root@JLin ~]$ newgrp jlin
Password:
[root@JLin ~]$ id
uid=1001(lin) gid=1001(jlin) groups=1001(jlin),1002(lin)
[root@JLin ~]$ exit
exit
[root@JLin ~]$ id
uid=1001(lin) gid=1002(lin) groups=1002(lin)