【AWSL】之Linux系统安全及应用(su、PAM、sudo、GRUB、JR、NMAP)

序言

这里我主要介绍Linux系统安全与应用

一 .账号安全控制

1.账号安全基本措施

①系统账号清理

将非登录用户的Shell设为/bin/nologin
锁定长期不使用的账号
删除无用的账号
锁定账号文件passwd、shadow

账号相关
注:chattr +i /etc/passwd /etc/shadow #锁定文件并查看状态
chattr -i /etc/passwd /etc/shadow #解锁文件并查看状态
lsattr /etc/passwd /etc/shadow #查看状态

②密码安全控制

设置密码有效期
要求用户下次登录时修改密码

密码相关
注:vim /etc/login.defs #适用于新建用户,改密码有效期
chage -M 30 lisi #适用于已有用户
chage -d 0 zhangsan #强制在下次登录时更改密码

③命令历史限制

减少记录的命令条数
注销时自动清空命令历史
①[~]vim /etc/profile #在history前改10再加export,执行减少记录命令条数,按q退出
source /etc/profile #刷新配置
②[~]vim .bash_history #按q退出
echo ‘’ > ~/.bash_history
③[~]vim .bashrc #按q退出
echo ‘’ > ~/.bashrc #自动清空记录

注:history -c #清除历史记录(临时清除,重启后还有)

④终端自动注销

闲置600秒后自动注销
①[~]vim /etc/profile
export TIMEOUT=600 #按q退出
source /etc/profile #刷新配置

二 .系统引导和登录控制

1.使用su命令切换用户

■用途及用法
用途:切换用户
格式:su - 目标用户 #带‘-’选项表示将使用目标用户的登录Shell环境
■密码验证
root ➔ 任意用户,不验证密码
普通用户 ➔ 其他用户,验证目标用户密码

①限制使用su命令的用户

将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块

[zhangsan]gpasswd -a zhangsan wheel #将zhangsan加入到wheel组中
grep wheel /etc/passwd #查看zhangsan是否添加到wheel组中
vim /etc/pam.d/su #将里面的auth wheel注释去掉

②查看su操作记录

安全日志文件:/var/log/secure

2.Linux中的PAM认证

■su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
为了加强su命令的使用控制,可借助PAM认证模块,只允许极个别用户使用su命令进行切换
■PAM可插拔式认证模块
是一种高效且灵活便利的用户级别的认证方式
也是当前Linux服务器普遍使用的认证方式

PAM认证原理:
1.PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;
2. PAM认证首先要确定哪一项应用 服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/

3.PAM安全认证流程

■控制类型也称作Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不在验证,只显示信息(通常用于session类型)

PAM实例:

                               用户1       用户2      用户3       用户4
auth      required    模块1     pass        fail       pass        pass
auth      sufficient  模块2     pass        pass       fail        pass
auth      required    模块3     pass        pass       pass        fail
                      结果      pass        fail       pass        pass

第一列代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password: 使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开

控制标记的补充说明:
required:表示该行以及所涉及模块的成功是用户通过鉴别的[必要条件]。换句话说,只有当对应于应用程序的所有带requi red标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带requi red标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完毕后才将错误消息返回调用他的程序。
反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop-样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite:与 required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败 就不再执
行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光
明正大一些。
sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的[充分条件]。也就是说只要标记为sufficient的模块
一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一 样。当标记为sufficient的模块失败时,sufficient模块会当做optional对待。因此拥有sufficient标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制
位的使用务必慎重。
optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。

①通过PAM防止暴力破解ssh

[root@zzc ~]#vim /etc/pam.d sshd
在第一行下面添加一行:
auth required pam_tally.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
说明:尝试登录失败超过三次,普通用户600秒解锁,root用户1200秒解锁
手动解除锁定:
查看某一用户错误登录次数:
pam tally --user work
清空某一用户错误登录次数:
pam_tally --user --reset
例如:清空work用户的错误登录次数:
pam_tally --user work --reset

4.使用sudo机制提升权限

■su命令的缺点
■sudo命令的用途及用法
用途:以其他用户身份(如root)执行的命令
用法:sudo 授权命令
■配置sudo授权
visudo或者vi /etc/sudoers
记录格式:用户 主机名列表=命令程序列表

[root@zzc ~]visudo
......
%wheel   ALL=NOPASSWD:ALL
xxxx     xxxx=xxxx

■查看sudo操作记录
需启用Defaults logfile 配置
默认日志文件:/var/log/sudo
■查看授权的sudo操作
sudo -l

5.开关机安全机制

■调整BIOS引导设置
将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setuo,并设置管理员密码
■GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub,d/00_header文件中,添加密码记录
生成新的grub.cfg配置文件

6.终端登录安全控制

■限制root只在安全终端登录
安全终端配置:/etc/securetty
注:pts是远程登录终端ctrl+ALT F1-F6 tty1图形界面 2和6字符界面

■禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常

三.弱口令检查

JR
一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度

■安装JR工具
安装方法 make clean 系统类型
主程序文件为john
■检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
■密码文件的暴力破解
准备号密码文件字典,默认为passwd.txt
执行john程序,结合--wordlist=字典文件

四.端口扫描

NMAP
一款强大的网络扫描、安全检测工具
官方网站:http://nmap。org/
CentOS 7.7光盘中安装包nmap–el7.x86_64.rpm

■NMAP的扫描
nmap [扫描类型] [选项] <扫描目标>

■常用的扫描类型
-sS、-sT、-sF、-sU、-sP、-P0

■例:分别查看本机开放的TCP端口、UDP端口

■例:检测192.168.4.0/24网段有哪些主机提供FTP服务

■例:检测192.168.4.0/24网段有哪些存活主机

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YJ Thoreau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值