当前位置: 首页 > news >正文

零基础开始的网工之路第十六天------Linux安全管理

一、SELinux安全上下文

1、SELinux 简介

  1. 是什么? SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全子系统,提供更细粒度的权限控制,防止进程或用户越权操作。

  2. 核心思想

    • 最小权限原则:进程/用户只能访问其明确需要的资源。

    • 基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security Context)。

  3. 工作模式

    模式描述
    Enforcing强制执行策略,拒绝非法操作并记录日志。
    Permissive仅记录违规操作,不阻止(用于调试)。
    Disabled完全关闭SELinux(需重启生效)。

2、基础操作命令

1. 查看SELinux状态
getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)
2. 切换工作模式
setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式

注意:setenforce仅临时生效,永久修改需编辑 /etc/selinux/config 文件,而且而且控制端口号一旦设置标签,只会运行默认端口(80)


[root@bogon ~]# setenforce 0
[root@bogon ~]# getenforce
Permissive

3、安全上下文(Security Context)

1. 查看上下文
ls -Z /var/www/html # 查看文件/目录的上下文
ps -Z -C httpd# 查看进程的上下文

例:

ls -z

root@bogon ~]# ls -Z
unconfined_u:object_r:admin_home_t:s0  公共
unconfined_u:object_r:admin_home_t:s0  模板
unconfined_u:object_r:admin_home_t:s0  视频
unconfined_u:object_r:admin_home_t:s0  图片

ps -z

[root@bogon ~]# ps -Z
LABEL                               PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 104091 pts/0 00:00:00 
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 168173 pts/0 00:00:00 

2. 修改上下文
chcon命令
选项说明示例消息
-t, --type TYPE设置安全上下文的类型部分已将 file.txt 的类型更改为 httpd_sys_content_t
-u, --user USER设置安全上下文的用户部分已将 file.txt 的用户更改为 system_u
-r, --role ROLE设置安全上下文的角色部分已将 file.txt 的角色更改为 object_r
--reference=FILE使用指定文件的安全上下文已从 ref_file 复制上下文到 target_file
-R, --recursive递归处理文件和目录已递归更改 dir/ 及其内容的上下文
-h, --help显示帮助信息显示帮助菜单
-v, --verbose显示操作详情正在更改 file.txt 的安全上下文
--version显示版本信息chcon (GNU coreutils) 8.32

选项使用案例

  1. 设置文件类型 将 /var/www/html/index.html 的上下文类型设为 httpd_sys_content_t:

    sudo chcon -t httpd_sys_content_t /var/www/html/index.html
  2. 设置用户部分 将 /etc/nginx/nginx.conf 的用户部分设为 system_u:

    sudo chcon -u system_u /etc/nginx/nginx.conf
  3. 设置角色部分 将 /home/user/file.txt 的角色部分设为 object_r:

    sudo chcon -r object_r /home/user/file.txt
  4. 参照文件上下文 将 file2 的上下文设置为与 file1 一致:

    sudo chcon --reference=file1 file2
  5. 递归操作目录 递归修改 /var/www/html/ 目录下所有文件的上下文类型:

    sudo chcon -R -t httpd_sys_content_t /var/www/html/
  6. 显示帮助信息

    chcon --help
  7. 显示版本信息

    chcon --version
  8. 详细模式操作 启用详细输出,修改 ~/.ssh/config 的上下文类型:

    sudo chcon -v -t ssh_home_t ~/.ssh/config

说明

  • 实际执行时,若未添加 -v 参数,chcon 默认不输出成功信息,仅在出错时显示错误。

  • 使用 -v 参数可查看操作详情(如上述表格中的“示例消息”)。

chcon -t httpd_sys_content_t /var/www/html/index.html # 临时修改文件类型
restorecon -v /var/www/html/index.html # 恢复默认上下文

semanage 命令
子命令/选项用途说明常用选项示例消息/操作
semanage login管理SELinux用户与Linux账户的映射关系-a (添加)、-d (删除)、-m (修改)将用户 user1 映射到 SELinux 用户 staff_u
semanage user管理SELinux用户及其角色和权限-a、-d、-R (角色)、-L (限制)创建新SELinux用户 web_user 并分配角色 httpd_role
semanage port管理网络端口与SELinux类型的绑定关系-a、-d、-t (类型)、-p (协议)将TCP端口 8080 绑定到 http_port_t 类型
semanage interface管理网络接口与SELinux类型的绑定关系-a、-d、-t将接口 eth1 绑定到 netif_t 类型
semanage module管理SELinux策略模块(启用/禁用)-a、-d、-e (启用)、-D (禁用)启用策略模块 my_custom_module
semanage fcontext管理文件/目录的默认SELinux上下文规则-a、-d、-t、-s (范围)添加规则:/webapps(/.*)? 的上下文类型为 httpd_sys_content_t
semanage boolean管理SELinux布尔值(开关策略功能)-1 (查看)、--on、--off启用布尔值 httpd_can_network_connect
semanage dontaudit管理dontaudit规则(是否记录特定访问拒绝事件)--on、--off关闭对 sshd 的 dontaudit 规则
-h / --help显示帮助信息-显示子命令的帮助菜单
-v / --verbose显示详细操作信息-显示添加端口 8080 的详细过程
-n / --noheading输出时隐藏列标题-仅显示端口列表数据,无标题行

选项使用案例

  1. 管理端口绑定

将TCP端口 8080 标记为HTTP服务端口:

sudo semanage port -a -t http_port_t -p tcp 8080

说明:允许Apache等HTTP服务使用8080端口。


  1. 管理文件上下文规则

为自定义Web目录 /opt/webapps 设置默认上下文:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapps(/.*)?"
sudo restorecon -Rv /opt/webapps

说明:添加规则后需运行 restorecon 立即生效。


  1. 管理SELinux用户映射

将Linux用户 dev_user 映射到SELinux用户 user_u:

sudo semanage login -a -s user_u dev_user

说明:限制用户 dev_user 的SELinux权限。


  1. 启用布尔值

允许HTTP服务访问网络:

sudo semanage boolean --on httpd_can_network_connect

说明:无需重启服务,立即生效。


  1. 管理策略模块

禁用自定义策略模块 mymodule:

sudo semanage module -D mymodule

说明:禁用后相关规则不再生效。


  1. 查看当前端口绑定

列出所有HTTP相关端口:

semanage port -l | grep http_port_t

输出示例

http_port_t    tcp    80, 443, 8080

  1. 删除文件上下文规则

移除对 /tmp/custom_dir 的上下文规则:

sudo semanage fcontext -d "/tmp/custom_dir(/.*)?"

注意事项

  • 权限要求:大多数操作需 sudo 或 root 权限。

  • 持久化存储:semanage 修改的规则会保存到策略库(默认路径 /etc/selinux/targeted),重启后仍有效。

  • 结合工具使用:修改文件上下文后,需运行 restorecon 或重启服务使更改生效。

4、SELinux布尔值(Booleans)

SELinux策略通过布尔值动态调整权限控制(例如允许Apache访问用户家目录)。

getsebool -a | grep httpd# 查看所有与Apache相关的布尔值
setsebool -P httpd_enable_homedirs=on # 启用布尔值(-P永久生效)

5、日志分析与故障排除

1. 查看SELinux日志
tail -f /var/log/audit/audit.log # 直接查看原始日志
ausearch -m AVC -ts recent# 使用工具过滤日志
2. 生成解决方案建议
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp# 编译并加载自定义策略

6、常见问题与解决方案

场景1:Web服务器无法访问文件
  • 现象:Apache返回403错误,但文件权限正常。

  • 解决

    1. 检查文件上下文:ls -Z /var/www/html

    2. 修复上下文:restorecon -Rv /var/www/html

场景2:服务无法绑定非标准端口
  • 现象:Nginx无法监听8080端口。

  • 解决

    semanage port -a -t http_port_t -p tcp 8080# 添加端口到SELinux策略

7、注意事项

  1. 不要随意禁用SELinux:优先使用Permissive模式调试。

  2. 谨慎使用chcon:错误修改上下文可能导致系统不稳定。

  3. 备份策略:修改策略前备份 /etc/selinux 目录。

二、Linux防火墙-Firewalld

1、 概述

按表现形式划分:

软件防火墙: 集成在系统内部,Linux系统: iptables、firewalld、ufw; windows系统下: windows defender

硬件防火墙: 华为防火墙、思科防火墙、奇安信防火墙、深信服防火墙等

按技术划分:

包过滤防火墙: 检查数据包的源IP、目的IP、源端口、目的端口、TCP的syn控制位

七层防火墙:除了上述检查外,还会检查数据内容

防火墙的作用:

阻止来自网络外部的攻击、进行流量控制

2、 Linux防火墙

防火墙结构

用户态:

iptables: 使用iptables命令对防火墙规则进行管理,必须深度理解网络技术和四表五链,对于初学者或者网络技术不达标的人员不友好

firewalld:使用firewall-cmd命令对防火墙进行管理,采用的是区域划分的形式。不需要连接底层的四表五链,对于初学者比较友好

ufw: 使用ufw命令对防火墙进行管理,命令简单易懂。

内核态:

四表: 从内核->用户的顺序: raw -> mangle -> nat -> filter

五链: input、output、forward、prerouting、postrouting

firewalld防火墙
区域分类

九大区域: block、dmz、drop、external、home、internal、public、trusted、work

区域功能

public:公共区域,默认区域

相关文章:

  • HTML实战:爱心图的实现
  • 如何用命令行将 PDF 表格转换为 HTML 表格
  • wsl2 docker重启后没了
  • 国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
  • 前端开源JavaScrip库
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现自定义遥测?
  • 如何使用.Net Reactor 批量加密 DLL
  • Axure RP11安装、激活、汉化
  • springcloud openfeign 请求报错 java.net.UnknownHostException:
  • Axure项目实战:驾驶舱(数据一张图)制作教程
  • 同为.net/C#的跨平台运行时的mono和.net Core有什么区别?
  • 2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版
  • 深入了解 C# 异步编程库 AsyncEx
  • CppCon 2014 学习第2天:Using Web Services in C++
  • 【Java Web】速通JavaScript
  • Flutte ListView 列表组件
  • OpenCV CUDA模块结构分析与形状描述符------计算指定阶数的矩(Moments)所需的总数量函数:numMoments
  • 小程序 - 视图与逻辑
  • React从基础入门到高级实战:React 生态与工具 - React Query:异步状态管理
  • 飞牛NAS+Docker技术搭建个人博客站:公网远程部署实战指南
  • ae模板精品站/如何创建一个app平台
  • 淘宝基地网站怎么做/登封网站建设公司
  • 网站开发用户登录前 登录后/百度词条
  • 两个相同的网站对做优化有帮助/网站排名费用
  • 网站 建设标准/今日军事新闻最新消息
  • 网站制造/独立站seo怎么做