SELinux知识点

ops/2024/11/23 21:49:41/

在这里插入图片描述

SELinux

软件安全性

《关于UNIX的安全》中Dennis Ritchie提到:“首先要面对的事实是,UNIX的开发者并没有考虑安全问题,单这一点就单会引发大量的漏洞”。主要是因为防火墙通常不具备查杀病毒的能力,只能对数据包过滤,不会拆解数据包,无法确认数据安全

安全防护机制

  • 访问控制防护:涉及用户对网络资源的访问,包括用户身份认证、口令加密、更新和鉴别。
  • 网络隔离防护:通过软件或硬件对网络实施隔离,如局域网、防火墙、隔离卡等。

Linux访问控制模型

  • 进程的身份验证是如何影响SELinux机制的?

  • 进程的身份验证通过EUID 和RUID来实现,其中RUID表示实际运行进程的用户身份,而EUID则是启动该进程的用户身份。当进程执行具有SUID权限的命令时,其EUID会发生变化,变为命令所有者的身份,从而影响了进程作为主体时的行为和权限。

  • 进程是以哪个用户产生的,则进程的权限就是该用户的权限 例如,Apache的工作进程若以apache用户运行,那么apache用户对/etc/passwd文件的访问权限就决定了该进程能否访问此文件。若Apache工作进程被劫持,对方也将拥有apache用户的权限,进而可能访问/etc/passwd文件。

DAC和MAC

  • ==客体(object):被访问的对象。==一般指文件或设备,但在某些情况下,进程也可以作为客体 例如 而apache其工作进程则是被控制的对象,即客体

  • ==主体(subject):发起访问的实体。==通常是运行中的进程,特别是具有有效用户身份的进程 例如 apache的守护进程作为主体

  • 动作(Action):主体对客体执行的操作。

  • 规则库

    • 自主访问控制(DAC):由属主自主决定是否将自己客体的访问权或部分访问权授予其他主体
    • ==强制访问控制(MAC):对所有主体及其所控制的客体通过规则库实施强制访问控制,SELinux即为此类行为控制。主体为进程,客体包括进程、文件、设备等。==

SELinux简介

  • SELinux = NSA(MAC)+ Linux:SELinux是Linux的扩展强制访问控制安全模块。
  • 特性:提高Linux系统内部安全等级,赋予进程和用户最小权限,防止权限升级,即使受攻击权限被夺,也不会严重影响整个系统。

安全上下文

在SELinux中,访问控制属性叫做安全上下文。

安全上下文格式:用户:角色:类型

  • == ls -lZ file -ldZ dir #-Z 查看指定文件安全上下文信息 ==
  • == ps -auxZ #查看进程的安全上下文 例如==
  • /etc/httpd/conf/httpd.conf的类型为httpd_config_t。
  • /home/install.log的类型为admin_home_t。
  • /tmp/a.txt的类型为user_tmp_t。

SELinux原理

当一个主体试图访问一个客体时,内核中的策略执行会检查规则库中的规则,如果主体的安全上下文类型和客体的安全上下文类型与规则匹配,则允许操作;否则,拒绝该操作。所以可以通过修改客体的安全上下文,使其符合规则要求,从而实现对资源的正常访问和管理。例如,使用命令修改file的安全上下文,将其还原回旧的安全设置,以解决由于安全上下文不符合规则导致的访问受阻问题。

  • **注意 **当主体(进程)访问客体时,主体和客体的安全上下文[类型]必须符合规则库中的要求才能访问成功

SELinux的类型

  • 级别
    • 完全开启enforcing。
    • 警告模式permissive。
    • 禁用模式disabled。
  • 类型
    • 严格类型:strict(mls)。
    • 目标类型:targeted(针对大多数服务)。
    • 部分控制:minimum(基本不使用)。
  • 操作命令
    • 临时关闭/开启:setenforce 0/1。
    • 获取状态:getenforce / sestatus -v。

修改文件类型

实验:SELinux开启状态下修改httpd的网页路径。

  • 解决思路
    1. 获取httpd默认网页目录的type。
    2. 修改自定义网页目录的类型 = 默认目录类型(-R递归)。
  • 注意事项:一般先创建目录,再修改目录type,修改后在此目录下创建的文件自动继承目录type,无需单独修改或递归(已存在的需递归,新建立的自动继承)。
  • 相关命令
    • 查看:ls -ldZ /var/www/html。
    • 修改chcon [-R] [-t type] 文件,-R连同该目录下次目录同时修改,-t接安全性本文的类型字段,-u修改用户,-r修改角色(chcon不仅能修改type,还可修改角色、身份等安全上下文中的三个组成单元)。
    • 还原restorecon [-Rv]档案或目录,-R连同次目录一起修改,-v将过程显示到屏幕上。
yum -y install httpdmkdir /wwwecho "xxxx" > /www/index.htmlsystemctl start httpdvim /etc/httpd/conf/httpd.conf #把默认网页目录documentroot改成/www
systemctl restart httpd
setenforce 0
getenforce ls -dlZ /var/www/html#修改安全上下文的类型 -t就是指类型type -R就是递归创建  -u:修改用户  -r:修改角色chcon -t httpd_sys_content_t -R  /wwwls -dlZ /www
systemctl restart httpd
setenforce 1
getenforce 
#发现网页能正常访问
restorecon -R /www  #还原回去的命令

实验1:Samba新增共享区间

  1. yum -y install samba Samba创建/share并创建文件1.txt。
  2. 添加系统用户声明成samba用户:pdbedit -a username。
  3. 开启服务:systemctl start smb 。
#开启selinux 搭建samba服务yum -y install sambamkdir /sharecd /etc/samba/cp -a smb.conf.example smb.confvim smb.conf[www]comment = www filespath = /sharewritable = yesbrowseable = yesuseradd wwwpdbedit -a wwwsystemctl enable --now smbchown -R www.www /share/

登录共享区间:smbclient –U zhangsan //192.168.216.12/www,发现无法登陆,

  1. 解决方案 在服务器上修改安全上下文 chcon -t samba_share_t /share。
  2. 在这里插入图片描述
#在Linux服务器上的测试
getsebool -a| grep samba | grep home   #输入这个查看上下文是否打开
setsebool -P samba_enable_home_dirs=1 #开启家目录访问功能

Managing Boole(管理SElinux布尔值)

SELinux的布尔值类似开关,精确控制SElinux对某个服务某个选项的保护。例如samba服务,使用samba的用户模式登录自己家目录测试权限,或使用vsftpd的本地用户登录自己家目录(CentOS 7之后vsftpd相关布尔值被删除),发现无权限查看家目录下文件。

  • 相关命令
    • 查看getsebool -a | grep samba_enable_home_dirs、ftp_home_dir(CentOS 6中生效)。
    • 修改setsebool –P samba_enable_home_dirs = 1(1或者on),开启家目录访问功能。

实验2:修改httpd的默认监听端口为10086

问题:修改后无法正常使用。
前提:yum -y install policycoreutils-python。

查看:semanage port -l | egrep -w “(http_port_t|http_cache_port_t)”

添加:semanage port -a -t http_port_t -p tcp 端口

#开启selinux
vim /etc/selinux/config 
reboot
yum -y install httpd
yum -y install policycoreutils-python
#添加网页文件内容
vim /var/www/html/index.html
#修改http的监听端口
vim /etc/httpd/conf/httpd.conf
listen 10086systemctl restart httpd
#重新启动发现报错 要修改安全上下文 
journalctl -xe

在这里插入图片描述

#查看http的安全上下文 发现没有10086
semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
#添加http的安全上下文 端口是10086 
semanage port  -a -t http_port_t -p tcp 10086
#重新启动后就没有报错了
systemctl restart httpd

http://www.ppmy.cn/ops/136146.html

相关文章

矩阵论在图像算法中的应用

摘要: 本文详细阐述了矩阵论在图像算法中的广泛应用。首先介绍了图像在计算机中的矩阵表示形式,然后从图像压缩、图像变换、图像特征提取与识别、图像恢复与重建等多个方面深入分析了矩阵论相关技术的作用原理和优势。通过对这些应用的探讨,展…

第十章总结blog

10.1JavaScript概述 10.1.1JavaScript简介 JavaScript 是一种基于对象(0bject)和事件驱动(Event Driven)并具有安全性能的脚本语言,能够与HTML(超文本标记语言)、Java语言一起在Web页面中与Web客…

Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)

Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三) py2neo 删除 1、连接数据库 from py2neo import Graph graph Graph("bolt://xx.xx.xx.xx:7687", auth(user, pwd), nameneo4j)2、删除节点 # 删除单个节点 node graph.node…

django基于Django的二手电子设备交易平台设计与开发

摘 要 科学技术日新月异,人们的生活都发生了翻天覆地的变化,二手电子设备交易平台管理当然也不例外。过去的信息管理都使用传统的方式实行,既花费了时间,又浪费了精力。在信息如此发达的今天,我们可以通过网络这个媒介…

观察者模式和订阅模式

观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…

【设计模式】【创建型模式(Creational Patterns)】之抽象工厂模式(Abstract Factory Pattern)

1. 设计模式原理说明 工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。这种模式的核心思想是将对象的创建过程封装起来,使得代码更加灵活和易于扩展。 优点: 符合开闭原则(对扩展开放,…

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 贵在坚持! 数据样例项目地址: * 相关项目 1)数据集可视化项…

对AVEC2014视频进行Dlib或MTCNN人脸裁剪

预处理:人脸裁剪对齐保存的操作 Dlib dlib windows包在资源里 其他代码可查看注释帮助理解 import os import random import cv2 import dlib from imutils.face_utils import FaceAligner, rect_to_bb from tqdm import tqdm # 引入tqdm库# 配置路径 dataset_p…