从原理到实践:深入探索Linux安全机制(一)

前言

本文将从用户和权限管理、文件系统权限、SELinux、防火墙、加密和安全传输、漏洞管理和更新等几个Linux安全机制中的重要方面,深入探索其工作原理和使用方法。在当今数字化时代,网络安全问题备受关注,Linux作为广泛应用的操作系统之一,其安全性至关重要。无论你是Linux系统的初学者还是资深管理员,本文都将为你提供宝贵的经验和启发,帮助你在保护网络安全的道路上行稳致远。

Linux

Linux 是一种开源的类Unix操作系统内核,由Linus Torvalds在1991年首次发布,其后又衍生出许多不同的发行版(如Ubuntu、Debian、CentOS等)。Linux操作系统则是由Linux内核与各种应用程序、工具和库组成的完整操作系统,在其众多的特性中,Linux以其稳定性和安全性而闻名,这首先得益于开源社区的广泛参与和持续改进,其次就是Linux优秀的安全机制,这些保证了其能够提供一个高度稳定和安全的运行环境,事实上在服务器领域、嵌入式系统、超级计算机等多个领域也得到了广泛应用,并拥有庞大的用户群体和开发者社区。

下面将通过两篇文章来,从用户和权限管理、文件系统权限、SELinux、防火墙、加密和安全传输、漏洞管理和更新等几个Linux安全机制中的重要方面,和大家分享一下其工作原理和使用方法:

《从原理到实践:深入探索Linux安全机制(一)-CSDN博客》

《从原理到实践:深入探索Linux安全机制(二)-CSDN博客》

用户和权限管理

Linux系统使用用户和组的概念来管理文件和系统资源的访问权限。其主要原理也很简单,可以从下面几个方面来理解:

  • 用户:

在 Linux 系统中,每个用户都有一个唯一的用户名和用户 ID(User ID),用于标识用户身份。用户可以属于一个或多个用户组,每个用户组也有一个唯一的组名和组 ID。

  • 权限

每个文件和目录都有属主(Owner)、所属组(Group)和其他用户(Others)的权限设置。权限通常包括读(r)、写(w)和执行(x)权限。这些权限分别表示对文件的读取、写入和执行操作的权限。另外,每个权限位也可以用一个数字来表示,分别对应读(4)、写(2)和执行(1)权限。

  • 权限位:

Linux 中使用权限位来表示文件或目录的权限。每个文件或目录有 9 个权限位,分为 3 个部分:属主权限、所属组权限和其他用户权限。每个部分包括读(r)、写(w)和执行(x)权限。

  • 权限控制:

当用户访问文件或目录时,系统会根据用户的身份(用户 ID)、文件的权限位和用户所属的组来确定是否允许特定操作。只有拥有相应权限的用户或组成员才能对文件进行读取、写入或执行操作。

  • 特殊权限:

除了基本的读写执行权限外,还有一些特殊权限,如 SetUID、SetGID 和粘着位(Sticky Bit)。这些特殊权限可以影响文件或目录的执行方式,例如在执行文件时临时提升用户权限或确保只有文件所有者才能删除文件。

文件系统权限

从我个人的理解来看,文件系统权限应该属于Linux用户和权限管理的一部分,但我更愿意把它单独拿出来理解,因为理解的角度不一样,侧重重点也不同。

在用户和权限管理中,更多侧重于用户和权限。在这里更多侧重于文件和权限。虽然角度不同,但是描述的是同一件事,这是确定的。

Linux 文件系统权限的工作原理主要涉及文件的所有者、所属组和其他用户对文件的访问控制,其基本工作原理也比较简单:

  • 文件属性:

每个文件和目录在 Linux 系统中都有一个唯一的所有者(Owner)和所属组(Group)。此外,还有其他用户(Others)对该文件的访问权限。这些属性由文件系统存储,并且与文件的元数据一起保存。

  • 权限位:

每个文件和目录都有 9 个权限位,分为 3 个部分:属主权限、所属组权限和其他用户权限。每个部分包括读(r)、写(w)和执行(x)权限。这些权限位决定了不同用户对文件的操作权限。另外,每个权限位也可以用一个数字来表示,分别对应读(4)、写(2)和执行(1)权限。

  • 访问控制:

当用户尝试访问某个文件时,系统会根据用户的身份(用户 ID)、文件的权限位和用户所属的组来判断是否允许特定操作。如果用户是文件的属主或具有适当的权限,系统将允许他们进行读取、写入或执行操作。

  • 特殊权限:

除了基本的读写执行权限外,还有一些特殊权限,如 SetUID、SetGID 和粘着位(Sticky Bit)。这些特殊权限可以影响文件或目录的执行方式,例如在执行文件时临时提升用户权限或确保只有文件所有者才能删除文件。

关于用户和权限管理有两个命令是必须得掌握的,这两个命令就是chmod和chown。

1、在 CentOS 7 中,chmod 命令用于修改文件或目录的权限。

使用方式:

chmod [选项] 权限模式 文件/目录

常用选项:

  • -R:递归地修改文件夹及其子文件夹的权限。
  • -v:显示每个修改后的文件/目录的权限。

权限模式:

可以使用数字或符号来指定权限模式。

  • 数字模式:数字模式使用三位数,每一位表示一个权限组(所有者、所属组、其他用户),其中每一位的值为 4(读权限)、2(写权限)和 1(执行权限)的组合。例如,755 表示所有者具有读、写和执行权限,所属组和其他用户具有读和执行权限。
  • 符号模式:符号模式使用类似于 u+rwx、g+rw、o-x 的格式来指定权限。u 代表所有者,g 代表所属组,o 代表其他用户,+ 表示添加权限,- 表示移除权限,r 表示读权限,w 表示写权限,x 表示执行权限。例如,chmod u+rwx file.txt 表示给文件 file.txt 的所有者添加读、写和执行权限。

示例:

将文件 file.txt 的所有者和所属组的权限设置为读写,其他用户无权限:

chmod 660 file.txt

将文件夹 dir 及其子文件夹的所有者、所属组和其他用户的权限设置为读写执行:

chmod -R 777 dir

给文件 script.sh 的所有用户添加执行权限:

chmod a+x script.sh

给文件 file.txt 的所有者和所属组添加读权限,其他用户移除所有权限:

chmod u+r,g+r,o-rwx file.txt

2、在 CentOS 7 中,chown 命令用于修改文件或目录的所有者。

使用方式:

chown [选项] 新所有者 文件/目录

常用选项:

  • -R:递归地修改文件夹及其子文件夹的所有者。
  • -v:显示每个修改后的文件/目录的所有者。

示例:

  • 将文件 file.txt 的所有者修改为 fanfu:
chown fanfu file.txt
  • 将目录 dir 及其子目录的所有者修改为 fanfu,同时显示修改过程:
chown -Rv fanfu dir
  • 将文件 file.txt 的所有者和所属组修改为 fanfu 和 yzxa:
chown fanfu:yzxa file.txt

chmod 和 chown 是两个在 CentOS(以及其他 Linux 发行版)中常用的命令,用于修改文件或目录的权限和所有者,功能上很相近,但是还是有区别的:

chmod 命令:

  • 作用:chmod 命令用于修改文件或目录的权限。
  • 使用方式:chmod 命令后面跟着权限模式和要修改权限的文件或目录路径。
  • 权限模式:可以使用数字(例如 755)或符号(例如 u+rwx)来指定权限模式。
  • 数字模式:数字模式使用三位数,每一位表示一个权限组(所有者、所属组、其他用户),其中每一位的值为 4(读权限)、2(写权限)和 1(执行权限)的组合。例如,755 表示所有者具有读、写和执行权限,所属组和其他用户具有读和执行权限。
  • 符号模式:符号模式使用类似于 u+rwx、g+rw、o-x 的格式来指定权限。u 代表所有者,g 代表所属组,o 代表其他用户,+ 表示添加权限,- 表示移除权限,r 表示读权限,w 表示写权限,x 表示执行权限。

chown 命令:

  • 作用:chown 命令用于修改文件或目录的所有者。
  • 使用方式:chown 命令后面跟着新的所有者和要修改所有者的文件或目录路径。
  • 所有者:可以使用用户名或用户 ID(UID)来指定新的所有者。

总的来看,chmod 用于修改文件或目录的权限,而 chown 用于修改文件或目录的所有者。它们是不同的命令,用途和参数也不同。在实际应用中,我们可以根据需要选择使用 chmod 或 chown 来对文件或目录进行相应的权限和所有者的修改操作。

SELinux

SELinux(Security-Enhanced Linux)和 AppArmor 都是用于强化 Linux 系统安全性的安全模块,它们提供了额外的安全层来限制程序和进程的权限,以减少系统受到恶意攻击的风险。

它是由美国国家安全局(NSA)开发的安全模块,旨在提供强大的访问控制机制,通过强制访问控制(MAC)实现对系统资源的细粒度控制。SELinux基于安全策略规则,可以限制程序、进程和用户对文件、网络资源以及其他系统资源的访问权限,从而减少潜在的安全漏洞。SELinux的灵活性很高,但配置和管理相对复杂,想要熟练掌握有一定难度。然而这并妨碍你来了解它,如果在使用Linux系统中,遇到一些棘手的问题,这个地方也是一个排查方向。

这里可以先从以下几个方面来理解一下SELinux的工作原理:

  • 安全策略:

SELinux 使用安全策略来定义系统资源和对象之间的访问规则。这些安全策略由 SELinux 策略库(Policy)管理,其中包括了对文件、进程、网络端口等各种资源的访问规则定义,以及用户角色和安全上下文等信息。

  • 安全上下文:

在 SELinux 中,每个对象(如文件、进程)都有一个安全上下文,用于描述该对象的安全属性。安全上下文由标签表示,包括了对象的类型(Type)、角色(Role)和用户(User)等信息。这些安全上下文决定了对象可以执行的操作和被允许的访问权限。

  • 强制访问控制:

SELinux 引入了强制访问控制(MAC),通过强制执行安全策略来限制系统资源的访问。即使用户具有足够的权限(如 root),也无法绕过 SELinux 对资源的访问控制。这种强制控制确保了系统的安全性,减少了恶意软件和攻击的影响范围。

  • 安全上下文转换:

当进程或程序尝试访问某个资源时,SELinux 会根据安全上下文进行访问权限的检查。如果需要访问的资源与进程的安全上下文不匹配,SELinux 可能会进行安全上下文的转换,以确保访问的合法性。

  • 日志和审计:

SELinux 提供了完善的日志和审计功能,可以记录系统中发生的安全事件和违反安全策略的行为。这些日志信息对于系统管理员来说是非常有价值的,可以帮助其监控系统的安全状况,并及时采取措施应对潜在的安全威胁。

以我个人经验来看,在日常工作来说,SELinux的安全策略管理是一个非常重要的地方,之前在搭建vsftp服务的时候,遇到的问题就是vsftp的配置正常,但是无法实现匿名用户的访问、文件上传,经过排查发现原因是SELinux的安全策略中,允许匿名用户写入的权限是关闭的,后来把这个权限打开,问题迎刃而解。因此,我觉得,如果能够掌握SELinux安全策略的基本管理,还是比较实用的。这里就给大家分享一下SELinux安全策略管理常用工具和命令的用法:

1、sestatus

sestatus命令可以查看当前 SELinux 的状态和基本信息,包括是否启用、当前模式等。

sestatus

sestatus输出信息的解读:

  • ELinux status: enabled

SELinux 状态为启用,这表示 SELinux 安全模块已经启用并正在系统中运行。

  • SELinuxfs mount: /sys/fs/selinux

SELinux 文件系统挂载点的路径为 /sys/fs/selinux,这是 SELinux 内核文件系统所在的路径。

  • SELinux root directory: /etc/selinux

SELinux 根目录的路径为 /etc/selinux,这是 SELinux 配置文件等相关文件存放的位置。

  • Loaded policy name: targeted

加载的策略名称为 targeted,这表示系统当前使用的是针对特定应用的 SELinux 策略。

  • Current mode: enforcing

当前 SELinux 模式为强制执行(enforcing),这意味着 SELinux 将强制执行安全策略,对违反规则的操作进行限制。

  • Mode from config file: enforcing

从配置文件中设置的 SELinux 模式也是强制执行(enforcing),这说明系统会在重启后继续以强制执行模式运行。

  • Policy MLS status: enabled

策略 MLS 状态为启用,这表示多级安全策略(MLS)功能在 SELinux 中是启用的。

  • Policy deny_unknown status: allowed

deny_unknown 策略状态为允许(allowed),这表示 SELinux 允许对未知进程进行访问控制。

  • Max kernel policy version: 31

最大内核策略版本号为 31,这是指内核支持的 SELinux 策略的最大版本号。

2、getenforce

getenforce命令可以查看 SELinux 的强制模式(Enforcing)、警告模式(Permissive)或禁用模式(Disabled)。

3、semanage

semanage命令可以查询和管理 SELinux 策略中的各种对象,如端口、用户、登录名等。比如查询ftp服务相关的布尔值是否处于打开状态,这里多解释一下,在 SELinux 安全策略中,布尔值(Boolean)是一种用于控制特定安全策略行为的开关变量。通过设置这些布尔值,可以启用或禁用特定的安全策略规则,从而调整系统的访问控制行为。

semanage boolean -l | grep ftp

如果semanage指令执行错误,可以是未安装SELinux管理工具包,执行下面的指令进行相关工具包安装,安装后再次执行上述命令:

sudo yum install policycoreutils

4、setsebool

setsebool 用于设置或修改 SELinux 的布尔值(Boolean)。布尔值通常以 on 或 off 的形式存在,用于表示某个特定的安全功能或行为是否启用。通过 setsebool,你可以启用或禁用特定的 SELinux 布尔值,从而调整系统的访问控制行为。

比如,允许vsftpd服务匿名用户写入

setsebool -P ftpd_anon_write on

其中,-P 参数表示永久性地修改该布尔值,而不仅仅是临时性地修改。

5、getsebool

用于查看 SELinux 布尔值的状态。比如,查询允许vsftpd服务匿名用户写入的布尔值:

getsebool ftpd_anon_write

写在最后

非常感谢你能耐心看完我的这篇文章,希望我的分享对你有所帮助。当然,如果你觉得这篇文章对你有所帮助,不妨点击点赞按钮,让更多的人看到这篇优质的技术分享。同时,别忘了将这篇文章收藏起来,也方便日后再次查阅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 --- 977. 有序数组的平方[力扣][Go]

今天这一题和昨天的知识点是一样的,就是双指针法。 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,1…

对话悠易科技蔡芳:品牌逐渐回归核心能力建设,布局和构建自己的流量阵地

关于SaaS模式在中国的发展,网上出现多种声音。Marteker近期采访了一些行业专家,围绕SaaS模式以及Martech在中国的发展提出独特观点。悠易科技副总裁蔡芳认为,中国目前存在SaaS的应用场景与客户需求,用户的应用能力也在提升&#x…

containerd源代码分析: 整体架构

本文从代码的大的整体组织上来熟悉containerd项目 containerd项目总的说是一个cs模式的原生控制台程序组。containerd作为服务端来接收处理client的各种请求,如常用的拉取推送镜像,创建查询停止容器,生成快照,发送消息等。client/…

XS2105S,IEEE 802.3af 兼容、用电设备接口控制器集成功率 MOSFET V0.5

XS2105S 为用电设备(PD)提供符合以太网供电(PoE)系统 IEEE802.3af 标准的完整接口。XS2105S 为 PD 提供检测信号、分级信号以及带有浪涌电流控制的 集成隔离功率开关。发生浪涌期间,XS2105S 将电流限 制在 180mA 以内,直到隔离功率 MOSFET 完全开启后切 …

【Linux命令】查看内存占用情况(mem, swap)

1. 方法1(top) # top2.方法2(free) # free -h3. 方法3(swapon) # swapon -s

GraalVM详细安装及打包springboot、java、javafx使用教程(打包springboot3篇)

前言 在当前多元化开发环境下,Java作为一种广泛应用的编程语言,其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱,而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

什么是虚拟继承

由于C支持多继承&#xff0c;除了public、protected和private三种继承方式外&#xff0c;还支持虚拟&#xff08;virtual&#xff09;继承&#xff0c;举个例子&#xff1a; #include <iostream> using namespace std;class A {}; class B : virtual public A {}; class…

Vue模块化开发步骤—遇到的问题—解决办法

目录 1.npm install webpack -g 2.npm install -g vue/cli-init 3.初始化vue项目 4.启动vue项目 Vscode初建Vue时几个需要注意的问题-CSDN博客 1.npm install webpack -g 全局安装webpack 直接命令提示符运行改指令会报错&#xff0c;operation not permitted 注意&#…

第一部分:岗位认知

一、谈谈你对大学教师岗位的认识。&#xff08;了解&#xff09; 我想用三种身份来概括我对大学老师的认识&#xff1a;知识的传授者、生命的塑造者、学问的探求者。 &#xff08;一&#xff09;知识的传授者 韩愈曾说&#xff1a;“师者&#xff0c;所以传道授业解惑也。”教师…

算法设计与分析-分支限界——沐雨先生

&#xff08;1&#xff09;抓奶牛问题描述&#xff1a; 农夫约翰被告知逃跑的奶牛的位置&#xff0c;并且要求立即去抓住它。约翰开始的位置在数轴上位置 N &#xff08; 0 ≤ N ≤ 100) &#xff0c;而奶牛的位置在同样一个数轴上的 K (0 ≤ K ≤ 100) 。约翰有两种移动方式&…

Windows下同时安装多个版本的JDK并配置环境变量

说明&#xff1a;这里安装的JDK版本为1.8和17 JDK下载 官方地址: https://www.oracle.com/java/ 我这里下载的是exe安装包 安装这里就不阐述了&#xff0c;安装方法都是一样的。 系统环境变量配置 1、首先新建JDK1.8和17的JAVA_HOME&#xff0c;他们的变量名区分开&#xff…

Disruptor概览

版本&#xff1a;3.4.2 使用案例 初始化 Disruptor<T> disruptor new Disruptor<>(T::new, RING_BUFFER_SIZE,(Runnable r) -> new Thread(r, "MY-DISRUPTOR-THREAD"),ProducerType.MULTI,new SleepingWaitStrategy(50, TimeUnit.MICROSECONDS.to…

只看到真人版《武庚纪》的顶级特效?那你亏大了!

“一不留神就看6集”&#xff0c;一看一个不吱声&#xff0c;相信看过《烈焰》&#xff08;原名&#xff1a;武庚纪&#xff09;的观众或多或少都有和笔者一样的感受。 与其他国产剧不同的是&#xff0c;《烈焰》改编自动画《武庚纪》&#xff0c;“漫改”让他的人物装造更贴近…

基于python+vue超市在线销售系统的设计与实现flask-django-php-nodejs

根据此问题&#xff0c;研发一套超市在线销售系统&#xff0c;既能够大大提高信息的检索、变更与维护的工作效率&#xff0c;也能够方便信息系统的管理运用&#xff0c;从而减少信息管理成本&#xff0c;提高效率。 该超市在线销售系统采用B/S架构、并采用python语言以及django…

【Python 滑块不同的操作】对滑块进行处理,列如切割、还原、去除、无脑识别距离等等

文章日期&#xff1a;2024.03.23 使用工具&#xff1a;Python 类型&#xff1a;图片滑块验证的处理&#xff08;不限于识别距离&#xff09; 使用场景&#xff1a;&#xff1f; 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&a…

Python计算机二级选择易错题(三)

选择题第02&#xff0c;03&#xff0c;04套 题目来源&#xff1a;python计算机二级真题&#xff08;选择题&#xff09; - 知乎 选择题第02套 选择题第03套 选择题第04套 time()获取当前时间&#xff0c;即计算机内部时间&#xff0c;浮点数&#xff1b;import time库&#x…

用户多部门切换部门,MySQL根据多个部门id递归获取所有上级(祖级)、获取部门的全路径(全结构名称)

背景 之前做过的项目&#xff0c;都是一个用户就一个部门的&#xff0c;现在碰到个一个用户在多个部门的需求&#xff0c;而且需要可以切换不同部门查看不同数据。 就比如说一个大公司下面有多个子公司&#xff0c;每个子公司有好多部门、子部门等等&#xff0c;然后有部分用…

【赠书第21期】游戏力:竞技游戏设计实战教程

文章目录 前言 1 竞技游戏设计的核心要素 1.1 游戏机制 1.2 角色与技能 1.3 地图与环境 2 竞技游戏设计的策略与方法 2.1 以玩家为中心 2.2 不断迭代与优化 2.3 营造竞技氛围与社区文化 3 实战案例分析 4 结语 5 推荐图书 6 粉丝福利 前言 在数字化时代的浪潮中&…

Rust之构建命令行程序(五):环境变量

开发环境 Windows 11Rust 1.77.0 VS Code 1.87.2 项目工程 这次创建了新的工程minigrep. 使用环境变量 我们将通过添加一个额外的功能来改进minigrep:一个不区分大小写的搜索选项&#xff0c;用户可以通过环境变量打开该选项。我们可以将此功能设置为命令行选项&#xff0c;…

uniapp(vue3) H5页面连接打印机并打印

一、找到对应厂商打印机的驱动并在windows上面安装。查看是否安装完成可以在&#xff1a;控制面板->查看设备和打印机&#xff0c;找到对应打印机驱动是否安装完成 二、打印机USB连接电脑 三、运行代码调用浏览器打印&#xff0c;主要使用的是window.print()功能。下面使用…