SELinux知识点

server/2024/11/23 12:17:20/

在这里插入图片描述

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/server/144253.html

相关文章

Bufferevent and SSL

bufferevent可以使用OpenSSL库实现SSL/TLS安全传输层。因为很多应用不需要或者不想链接OpenSSL,这部分功能在单独的libevent_openssl库中实现。未来版本的libevent可能会添加其他SSL/TLS库,如NSS或者GnuTLS,但是当前只有OpenSSL。 OpenSSL功能…

Android 浅谈Gson解析逻辑(初学者学习笔记)

学习笔记 Gson 解析数据的逻辑是基于 JSON 数据和 Java 对象之间的映射。Gson 库能够将 JSON 数据转换为 Java 对象,或者将 Java 对象转换为 JSON 字符串。它使用反射机制,自动将 JSON 字符串的字段映射到 Java 对象的属性,反之亦然。 1. 基…

Leetcode打卡:统计不是特殊数字的数字数量

执行结果:通过 题目:3233 统计不是特殊数字的数字数量 给你两个 正整数 l 和 r。对于任何数字 x,x 的所有正因数(除了 x 本身)被称为 x 的 真因数。 如果一个数字恰好仅有两个 真因数,则称该数字为 特殊数…

Admin.NET框架前端由于keep-alive设置缓存导致的onUnmount未触发问题

bug版本:next分支,基于.NET6版本; 问题描述: 1、添加keep-alive后,在其下运行的组件会出现onActived(被关注时)和onDeactived(取消关注时)生命周期,而组件原有生命周期为onMounted(被创造时)和onUnmounted(…

VSCode 间距太小

setting->font family 使用:Consolas, Courier New, monospace 字体

HTML·第八章 利用CSS制作导航栏菜单

8.1 水平顶部导航栏 水平顶部导航栏(Horizontal Top Navigation Bar)是网页设计中常用的一种导航栏布局,通常位于页面的顶部,以水平的方式排列导航选项。这种布局便于用户快速访问网站的主要部分。常见的设计元素包括菜单项、图标…

110. UE5 GAS RPG 实现玩家角色数据存档

在这篇,我们实现将玩家数据保存到存档内。 增加保存玩家属性 玩家属性默认的等级,经验值,可分配的技能点和属性点。还有一些角色基础属性也需要保存,回忆一下,我们是如何实现玩家的属性的,我们是通过多个…

金融量化框架选择

文章目录 1. **QuantConnect**2. **Zipline**3. **Backtrader**4. **QuantLib**5. **Alpaca**6. **PyAlgoTrade**7. **PyQuantLib**8. **QSTrader**如何选择开源量化交易框架?总结 在金融领域,很多开源量化交易框架和工具被广泛使用,允许研究…