系统安全保护
SElinux安全机制
SElinux概述
- Security-Enhanced Linux
- 美国你家安全局主导开发,增强linux安全的强制访问控制体系
- linux内核2.6及以上运行
- RHEL7基于SELinux体系针对用户/进程/目录/文件
- 提供预设的保护策略
- 以及管理工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOuvgBF0-1592181271487)(5129D8591F404BDC96357EAA30095594)]
SElinux运行模式的切换
1. SELinux的运行模式
- enforcing 强制
- permissive /pəˈmɪsɪv/宽松
- 将丧失约80%的策略
- disabled 彻底禁用
任何默认 变成 disabled (彻底禁用)模式, 都要经历重启系统
2. 切换运行模式
- 临时切换 setenforce 1|0
- 0修改
- 固定配置 /etc/selinux/config 文件
- 每次开机均读取此文件
- vim更改为permissive ,
- getenforce查看, 当前不生效
- setenforce 0 修改当前SELinux运行模式
//修改为permissive
[root@svr7 ~]# vim /etc/selinux/config
[root@svr7 ~]# getenforce
Enforcing
[root@svr7 ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@svr7 ~]# setenforce 0
[root@svr7 ~]# getenforce
Permissive
[root@svr7 ~]#
- 默认配置为强制模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIADX3Ko-1592181271494)(DAAD70395495485785731563B502CC77)]
- 更改为SELINUX=permissive
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QddAjxMv-1592181271499)(247DB1909364415F862F3440FDE60C2C)]
案例:启用SELinux保护
- 为虚拟机A和B 配置SELinux
- 确保SELinux处于强制启动模式
- 每次重新开机后, 此设置必须仍有效
返回
重设root用户密码
前提: 必须是服务器的管理者, 涉及重启服务器
遗忘root用户密码
故障现象
- 无法执行需要root权限的管理操作
- 若没有其他可用账号, 将无法登陆系统
解决思路
- 开机linux行尾添加, rd.break console=tty0 ,若切换不成功,将此段中ro开头改为rw
- 以可写方式重新挂载/ 或/sysroot 下, 并切换到此环境
- chroot /sysroot #切换环境, 切换到硬盘操作系统的环境
- mount -o remount,rw /(或/sysroot)
- 重新设置root密码
- echo a | passwd --stdin root
- 若SELinux是强制模式, 才需要重新设置SELinux策略(其他模式不需要做此操作)
- 可vim /etc/selinux/config # 查看SELinux开机的运行模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVobpknR-1592181271503)(36A0467BDED8435688CF4621BD5D7B14)] - touch /.autorelabel
exit
reboot
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oFwkSPU-1592181271507)(F0E42368FE5547F4AAE0E1EA194B1149)]
返回
构建基本的Web服务
- Web服务: 提供页面内容
- Web服务器: 提供页面内容的机器
- http协议: 超文本传输协议
- https协议: 安全超文本传输协议(加密传输,更安全)
1. 安装可以提供Web服务功能的软件
- httpd
- 应用构建最简单
- Nginx engine x
- 支持并发访问量最好
- 并发能力强,占用内存少
- Tomcat
- 与Java语言较兼容
httpd软件构建Web服务
- yum -y install httpd
- rpm -q httpd
- httpd-2.4.6-80.el7.centos.x86_64
[root@svr7 ~]# yum -y install httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
//.....省略一万行
Dependency Installed:
apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7
httpd-tools.x86_64 0:2.4.6-80.el7.centos mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@svr7 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.x86_64
[root@svr7 ~]#
2. 安装运行
- ls /usr/sbin/httpd
- 启动 → 先找DNS服务器(读取/etc/resolv.conf) → 查找域名解析地址 —当找不到时, 运行较慢
- 故一般先将/etc/resolv.conf 内容清空
- /usr/sbin/httpd 输入确定运行
[root@svr7 ~]# /usr/sbin/httpd
[root@svr7 ~]# pgrep -l httpd
3350 httpd
3354 httpd
3355 httpd
3356 httpd
3357 httpd
3358 httpd
[root@svr7 ~]#
//默认启动6个httpd进程等待, 方便提供服务
- killall httpd 停止httpd所有运行进程
返回
3. 本机测试()
- vim /var/www/html/index.html
- curl http://192.168.4.7
- 本机ip 192.168.4.7
[root@svr7 ~]# vim /var/www/html/index.html //默认存放网页文件的路径
[root@svr7 ~]# curl http://192.168.4.7 //curl为非图形的浏览器
ni hao nihao
[root@svr7 ~]#
服务管理
systemd 上帝进程
- systemd --启动–> 服务
Linux系统和服务管理器
- 是内核引导之后加载的第一个初始化进程(PID=1)
- 负责掌控整个Linux的运行/服务资源组合
传统的 init 程序风格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lp3PmCrv-1592181271509)(C3952E621B004ED3905927D3298745D6)]
systemd 服务管理
- systemctl命令(以服务名httpd为例)
- systemctl start httpd 启动服务
- systemctl status httpd 查看服务状态
- systemctl stop httpd 停止服务
- systemctl restart httpd 重启服务
- ???临时添加服务相关后重启激活
- systemctl enable httpd 开机自启动
- systemctl is-enable httpd 查看开机自启动状态
- systemctl disabled httpd 关闭开机自启动
// start → status → stop → status → restart → status
[root@svr7 ~]# systemctl start httpd //开启httpd服务
[root@svr7 ~]# systemctl status httpd //查看httpd服务状态
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2020-06-13 09:24:25 CST; 26s ago
//.....省略一万行
Jun 13 09:24:25 svr7.tedu.cn systemd[1]: Started The Apache HTTP Server.
[root@svr7 ~]# systemctl stop httpd
[root@svr7 ~]# systemctl status httpd //关闭httpd服务
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
//......省略
Jun 13 09:25:42 svr7.tedu.cn systemd[1]: Stopped The Apache HTTP Server.
[root@svr7 ~]# systemctl restart httpd //重启httpd服务
[root@svr7 ~]# systemctl status httpd //查看
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2020-06-13 09:26:24 CST; 13s ago
//.....省略
Jun 13 09:26:24 svr7.tedu.cn systemd[1]: Started The Apache HTTP Server.
[root@svr7 ~]#
# systemctl enable 服务名 第一次会出现一些运行信息,,下一次不会出现
[root@svr7 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@svr7 ~]# systemctl is-enable httpd //查看自启动状态
Unknown operation 'is-enable'.
[root@svr7 ~]# systemctl disable httpd //关闭自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
管理运行级别
RHEL6 运行级别 300
- 0 关机
- 1 单用户模式
- 2 多用户模式 (不支持网络)80个服务
- 3 多用户字符界面(支持网络)服务器默认的运行级别 100个服务
- 4 未定义 0个服务
- 5 图形界面 300个服务
- 6 重启 0个服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xfmt08QK-1592181271511)(86FCA23FF17842CA853D7A09C97D5280)]
RHEL7 运行模式(运行级别)
- 字符模式:multi-user.target
- 图形模式:graphical.target
- 命令
- systemctl isolate multi-user.target 相当于原来的init3
- systemctl isolate graphical.target 相当于原来的init5
- systemctl get-default 每次开机默认进入模式
- systemctl set-default multi-user.target 设置永久策略,每次开机自动进入multi-user.target
- systemctl get-default graphical.target
防火墙策略管理
基本概念—Linux防火墙体系
- 作用: 隔离
- 示例:虚拟机A连接虚拟机B,提示错误,No route to host
[root@svr7 ~]# ping -c 2 192.168.4.207
PING 192.168.4.207 (192.168.4.207) 56(84) bytes of data.
64 bytes from 192.168.4.207: icmp_seq=1 ttl=64 time=0.304 ms
64 bytes from 192.168.4.207: icmp_seq=2 ttl=64 time=0.468 ms
--- 192.168.4.207 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.304/0.386/0.468/0.082 ms
-
- 本例:网络间可以通讯,但无法进行http服务连接
[root@svr7 ~]# curl http://192.168.4.207
curl: (7) Failed connect to 192.168.4.207:80; No route to host
[root@svr7 ~]#
- 硬件防火墙: 保护一个网络中所有的机器
- 华为/思科
- 软件防火墙: 保护主机本身
- 火绒/360/卡巴斯基
- 管理工具:
- firewall-cmd(命令)
- 实现自动分发
- firewall-config(图形)
返回
- firewall-cmd(命令)
防火墙预设安全区域
根据所在网络场所区域—预设保护规则集
- public 仅允许访问本机的ssh/dhcp/ping等服务, 其他都拒绝
- trusted 允许任何访问
- block 拒绝任何来访请求, 会回应客户端
- drop 丢弃任何来访的数据包, 不会回应客户端
- 不同客户端,重新访问时间不同
防火墙判断进入区域的原则
- 查看客户端请求中源IP地址, 然后查看所有区域中的规则, 哪个区域有该源IP的规则, 则进入该区域
- 进入默认区域(默认情况下为public)返回
配置规则的位置
- runtime 运行时
- permanent 永久 /'pɜːm(ə)nənt/
查看防火墙规则列表
列表查看操作
- firewall-cmd --list-all [–zone=区域名]
- firewall-cmd --list-all-zones 列出所有区域信息
- firewall-cmd --get-zones 列出所有区域名称
- firewall-cmd --get-services
- firewall-cmd --get-default-zone 查看默认区域
- firewall-cmd --zone=区域名 --add-service=服务名
- 指定区域添加服务名
- firewall-cmd --zone=区域名 --add-source=IP地址
- 指定区域添加ip地址
- –remove-service=服务名
- –remove-source=ip
- firewall-cmd --permanent --zone=public --add-service=http
- 指定区域添加永久http服务
- firewall-cmd --reload
- 查看默认区域并设置为都可访问\
- firewall-cmd --get-default-zone
- firewall-cmd --set-default-zone=trusted
//1. 虚拟机A----查看防火墙进程信息
[root@svr7 ~]# pstree | grep firewalld
|-firewalld---{firewalld}
[root@svr7 ~]# /usr/sbin/firewalld //绝对路径运行
[root@svr7 ~]# firewall-cmd --get-default-zone //查看默认区域
public
[root@svr7 ~]# curl http://192.168.4.7
ni hao nihao
//虚拟机B---curl虚拟机B,连接失败
[root@pc207 ~]# curl http://192.168.4.7 //访问失败
curl: (7) Failed connect to 192.168.4.7:80; No route to host
//2. 虚拟机A----修改默认规则区域为trusted
[root@svr7 ~]# firewall-cmd --set-default-zone=trusted //更改为trusted
success
[root@svr7 ~]# firewall-cmd --get-default-zone //查看更改
trusted
//3. 虚拟机B---curl连接虚拟机A,连接成功
[root@pc207 ~]# curl http://192.168.4.7
ni hao nihao
[root@pc207 ~]#
- 设置默认区域为public,并添加服务httpd
- firewall-cmd --set-default-zone=public
- firewall-cmd --zone=public --add-service=http
返回
// 虚拟机A
[root@svr7 ~]# pstree | grep firewalld //开启两个firewalld时, 不能设置默认区域
|-2*[firewalld---{firewalld}]
[root@svr7 ~]# firewall-cmd --set-default-zone=public
Error: COMMAND_FAILED
[root@svr7 ~]# killall firewalld //关闭防火墙服务
[root@svr7 ~]# firewall-cmd --set-default-zone=public
FirewallD is not running
[root@svr7 ~]# /usr/sbin/firewalld //开启防火墙服务
[root@svr7 ~]# firewall-cmd --set-default-zone=public //设置为public
Warning: ZONE_ALREADY_SET: public
success
//虚拟机B访问失败
[root@pc207 ~]# curl http://192.168.4.7
curl: (7) Failed connect to 192.168.4.7:80; No route to host
//虚拟机A---public 默认区域添加 http
[root@svr7 ~]# firewall-cmd --zone=public --add-service=http
success
[root@svr7 ~]# firewall-cmd --get-default-zone
public
//虚拟机B 连接成功
[root@pc207 ~]# curl http://192.168.4.7
ni hao nihao
- 实现永久规则
- 命令永久选项 (–permanent)
- firewall-cmd --permanent --zone=public --add-service=http
[root@svr7 ~]# firewall-cmd --zone=public --list-all
public (active)
...
services: ssh dhcpv6-client http
...
[root@svr7 ~]# firewall-cmd --zone=public --remove-service=http //删除
success
[root@svr7 ~]# firewall-cmd --zone=public --list-all
public (active)
...
services: ssh dhcpv6-client
...
// 添加永久规则
[root@svr7 ~]# firewall-cmd --permanent --zone=public --add-service=http //添加永久规则
success
[root@svr7 ~]# firewall-cmd --zone=public --list-all
public (active)
...
services: ssh dhcpv6-client
...
//重新加载所有永久规则,实现当前生效
[root@svr7 ~]# firewall-cmd --reload
success
[root@svr7 ~]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http //http已生效
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@svr7 ~]#
返回
4. 单独拒绝某个用户ip(了解)
- 防火墙单独拒绝虚拟机B所有访问,其他机器可以访问
- ]# firewall-cmd --zone=block --add-source=192.168.4.207
- ]# firewall-cmd --zone=block --list-all
练习:
案例1:设置SELinux保护
为虚拟机A、虚拟机B 配置SELinux
- 确保 SELinux 处于宽松模式(permissive)
- 在每次重新开机后,此设置必须仍然有效
案例2:实现虚拟机A 的Web服务
- 利用httpd软件搭建Web服务,页面显示内容为 小蝌蚪找妈妈
案例3:实现虚拟机A 的防火墙配置
- 修改虚拟机A防火墙配置,明确拒绝所有客户端访问(默认区域修改为block)
- 在虚拟机B上,测试能否访问虚拟机A 的Web服务
- 在虚拟机B上,测试能否 ping通 虚拟机A
案例4:实现虚拟机A 的防火墙配置
- 修改虚拟机A防火墙配置,将默认区域修改为public
- 在虚拟机B上,测试能否访问虚拟机A 的Web服务
- 在虚拟机B上,测试能否 ping通虚拟机A
案例5:实现虚拟机A的防火墙配置
- 修改虚拟机A防火墙配置,将默认区域修改为public
- 修改虚拟机A永久的防火墙配置,在public区域中添加http协议
- 在虚拟机B上,测试能否访问虚拟机A的Web服务