SELinux知识点

devtools/2024/11/24 10:45:32/

在这里插入图片描述

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/devtools/136530.html

相关文章

Mac设置java环境变量

Mac电脑中存在多个jdk版本,如何配置java环境变量为指定版本jdk? 一、查看所有已安装的 JDK 版本 /usr/libexec/java_home -V二、临时设置 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)三、永久设置 如果需要永久使用指定版

计算机网络的初步认识

文章目录 一、初识计算机网络1.1、基本概念和特点1.1.1、基本概念1.1.2、特点1.2、分类1.3、性能指标1.4、体系结构1.4.1、体系结构的基本认识1.4.2、TCP/IP的深入认识二、初始互联网2.1、互联网概念和特点2.1.1、概念2.1.2、特点2.2、互联网组成2.2.1、边缘部分2.2.2、核心部分…

微网能量管理研究

微网能量管理研究的重点 微网系统的建模 建立分布式能源单元模型以及微网系统的整体运行、协调控制和优化配置等方面的模型 分布式电源控制策略 微网内分布式电源及储能系统运行依赖于电力电子接口技术,需要相应的充放电控制策略 再生能源发电预测 准确预测太阳能…

Redis分布式锁的原理与Redisson实现

Redis分布式锁的原理与Redisson实现 目录 引言Redis分布式锁的基本原理Redisson实现Redis分布式锁Redisson分布式锁的使用示例小结 引言 在分布式系统中,多个服务实例同时访问共享资源时,可能会导致数据不一致或竞争条件。为了解决这些问题&#xff…

CANDENCE: 原理图中如何批量修改元件封装

原理图中如何批量修改元件封装 一、选中一部分元件更换封装 更换下图中的几个电阻的封装 选中这几个电阻,点击 “edit properties” 弹出以下对话框 点击“pivot”, 找到封装一栏 可以单个修改 也可以多个一起修改 修改完成 二、选中一页原理图中的元件更换封装…

从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发

从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发 在深度学习开发中,尤其是使用 PyTorch 时,我们常常需要编写大量样板代码来管理训练循环、验证流程和模型保存等任务。PyTorch Lightning 作为 PyTorch 的高级封装库,帮助…

[开源] SafeLine 好用的Web 应用防火墙(WAF)

SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式,QListView::IconMode和QListView::ListMode,通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构,也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…