Linux入门攻坚——18、SELinux、Bash脚本编程续

SELinux——Secure Enhanced Linux(安全加强的Linux),工作于Linux内核中。
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。采用委任式存取控制,是在进行程序、文件等细节权限设置依据的一个核心模块。SELinux开启时会为系统中开启的每一个程序和每一个文件加载一个标签,特定标签的程序只能读取或者操作特定标签的文件,如果标签不配套,该访问就会被禁止,这种在文件上的标签被称为 安全上下文,在程序上的标签为sebool值
常见的两种访问控制:
DAC:自主访问控制(Discretionary Access Control,DAC)是这样的一种控制方式,由客体的属主对自己的客体进行管理,由属主自己决定是否将自己的客体访问权或部分访问权授予其他主体,这种控制方式是自主的。
MAC:强制访问控制(Mandatory Access Control,MAC)指一种由操作系统约束的访问控制,目标是限制主体或发起者访问或对对象或目标执行某种操作的能力,每当主体尝试访问对象时,都会由操作系统内核强制施行授权规则——检查安全属性并决定是否可进行访问。任何主体对任何对象的任何操作都将根据一组授权规则(也称策略)进行测试,决定操作是否允许。SELinux采取这种方式。

linux中的权限控制,一个进程能够访问的资源是运行这个进程的用户的权限所决定的,如果想限定这个进程,不管是哪个用户,都只能访问有限的几个资源,则linux自身完成不了,这就需要selinux。

启动与关闭SELinux,在启动菜单(针对grub)的kernel命令行最后添加selinux=0或selinux=1即可。
也可在selinux配置文件中配置。

sandbox:沙箱
SELinux就类似sandbox机制,任何一个进程都启动在一个sandbox中,即使进程被劫持,其所能访问的资源也限定在沙箱中。

SELinux有两种工作级别:
    strict:每个进程都受到selinux的控制;
    targeted:仅有限个进程受到selinux控制;只监控容易被入侵的进程;

SELinux组成主要组成部分为Subject、Object、Policy和security context
Subject即是要管理的程序,Object即是要操作的文件系统,Policy为基本的存取安全性策略,分别为:
targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策;
minimum:由target修改而来,仅针对选择的程序来保护;
mls:完整的权限限制,限制方面较为严格;
Subject与Object的security context要一致才能顺序存取,其分为3个部分:
Identity:unconfined_u 表示文件来自不受限程序产生,system_u 表示文件由系统产生;
Role:object_r 表示文件,system_r 表示程序或一般使用者,unconfined_r 表示不受限角色;
Type:在Subject则称为domain,在Object中称为Type,两者需一致;

    可以用主谓宾的形式表达:subject  operation  object
    subject:进程
    object:进程,文件
        文件:open,read,write,close,chown,chmod
    subject:domain
    object:type

SELinux为每个文件提供了安全标签,也为进程提供了安全标签;
    user:role:type:

        user:SELinux的user
        role:角色
        type:类型

SELinux规则库:(为加快速度,被编译成二进制)
    规则:哪种域能访问哪种或哪些种类型内文件;getsebool -a
    一个进程中可能有多种功能,这些不同功能也会为进程引入风险,selinux也对这种情况进行控制,属于布尔型特性。使用getsebool -a可以获取:

配置SELinux:
    SELinux是否启用;
    给文件重新打标;
    设定某些布尔型特性;

SELinux的状态:
    enforcing:强制,每个受限的进程都必然受限;
    permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志;
    disabled:关闭;

selinux的配置文件: /etc/sysconfig/selinux 或/etc/selinux/config

状态含义
SELINUX=enforcingselinux开启,级别为强制
SELINUX=permissiveselinux开启,级别为警告
SELINUX=disableselinux关闭


相关命令:
    getenforce:获取selinux当前状态
    setenforce 0|1: 0位permissive,1为enforcing,此设置重启系统后无效
    配置文件:/etc/sysconfig/selinux,/etc/selinux/config
        SELINUX={disabled | enforcing | permissive}

给文件重新打标:
    chcon:
       chcon [OPTION]... CONTEXT FILE...
       chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
       chcon [OPTION]... --reference=RFILE FILE...
        -R:递归打标;

不同目录下,创建文件标签是不同的:

修改类型:

还原文件的默认标签:
    restorecon [-R] /path/to/somewhere

布尔型规则:
    getsebool:getsebool [-a] [boolean]
    setsebool:setsebool [ -P] boolean value | bool1=val1 bool2=val2 ...
       
-P将规则保存到规则库中

semanage:用于管理SELinux的策略

bash脚本编程:

顺序执行
选择执行
    条件测试
        运行命令或[[ EXPRESSION ]]
            执行状态返回值;
    if
    case
循环执行
    将某代码段重复运行多次;
    重复运行多少次?
        循环次数事先已知;
        循环次数事先未知;

        必须有进入条件和退出条件;
    for,while,until

函数:结构化编程及代码重用;   function

for循环语法:
    for NAME in LIST;do
        循环体
    done
列表生成方式:
    (1)整数列表:{start .. end}、$(seq start [[step] end])
    (2)glob  :  /etc/rc.d/rc3.d/K*
    (3)命令:

通过ping命令探测192.168.1.1-192.168.1.254,显示活跃的主机及活跃和不活跃主机数

#!/bin/bash
#
net='192.168.1'  #定义网络号
uphosts=0  #活动主机数
downhosts=0  #不活动主机数

for i in {1..254};do
    ping -c 1 -w 1 ${net}.${i} &> /dev/null
    if [ $? -eq 0 ]; then
	echo "${net}.${i} us up."
	let uphosts++
    fi
done
downhosts=$((254 - uphosts))
echo "Up hosts: $uphosts."
echo "Down host: $downhosts."

while循环:
    while CONDITION; do
        循环体
    done

CONDITION:循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断;
    条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环;

    因此:CONDITION一般应该有循环控制变量,而此变量的值会在循环体不断的被修改。
示例:求100以内所有正整数之和:

#!/bin/bash
#
declare -i sum=0
declare -i i=1

while [ $i -le 100 ]; do
    let sum+=$i
    let i++
done

echo "$i"
echo "sum:$sum"

示例:添加10个用户:

#!/bin/bash
#
declare -i i=1
declare -i users=0

while [ $i -le 10 ];do
    if ! id user$i &> /dev/null; then
	useradd user$i
	echo "new user:user$i added!"
	let users++
    fi
    let i++
done

echo "Add $users users."

ping探测,使用while语句:

#!/bin/bash
#
declare -i i=1
declare -i uphosts=0
declare -i downhosts=0
net='192.168.1'

while [ $i -le 50 ]; do
    if ping -c 1 -w 1 $net.$i &> /dev/null; then
	echo "$net.$i is up."
	let uphosts++
    else
	echo "$net.$i is down."
	let downhosts++
    fi
    let i++
done

echo "Up hosts: $uphosts"
echo "down hosts: $downhosts"

打印乘法表:

#!/bin/bash
#
for j in {1..9}; do
    for i in $(seq 1 $j); do
	echo -n  "${i}X${j}=$[$i*$j]  "  #内层循环不换行,使用-n选项
    done
    echo  #内层循环完毕,换行一次
done


有不对齐的问题,使用tab键:

#!/bin/bash
#
for j in {1..9}; do
    for i in $(seq 1 $j); do
	echo -e -n  "${i}X${j}=$[$i*$j]\t"  #内层循环不换行,使用-n选项,-e选项,允许对反斜线转义的字符进行解释.    
    done
    echo  #内层循环完毕,换行一次
done

使用while语句实现乘法表:

#!/bin/bash
#
declare -i i=1
declare -i j=1

while [ $j -le 9 ]; do
    while [ $i -le $j ]; do
	echo -e -n "${i}X${j}=$[$i*$j]\t"
	let i++
    done
    echo
    let i=1
    let j++
done



 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

EDM营销:常见的邮件模板制作方法

在EDM邮件营销中,邮件模板的制作是一个关键步骤,邮件模板的质量直接影响到邮件的打开率、阅读率和转化率。邮件内容可能是简单的文字,只需要进行基本的排版;而有些则涉及文字、图片以及超链接等多种元素,这就需要借助工…

spring02:DI(依赖注入)

spring02:DI(依赖注入) 文章目录 spring02:DI(依赖注入)前言:一、构造器注入二、set注入:1. Student类:2. Address类:3. beans.xml:4. MyTest&…

想拥有健康体魄?学会中医气血调理秘籍!

《素问调经论》所述,人的生理机能主要依赖于血与气。这两者构成了我们身体生命的基石,其他所有生理活动都是围绕这一核心进行的。因此,各种健康问题,其根源往往可以追溯到气血的失调。 气虚会表现为畏寒怕冷,头晕耳鸣、…

反射(Reflection) --Java学习笔记

反射 反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等) 反射学什么? 学习获取类的信息、操作它们 反射第一步:加载类,获取类的字节码:Class对象获取类的构造器:Constructor对象获取类的成员变量:Field对象获取类的成…

SpringBoot集成Skywalking日志收集

在实际项目中,为了方便线上排查问题,尤其是微服务之间调用链路比较复杂的系统中,通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段,比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式,在skywalkin…

语音情感识别调研

语音情感识别调研 1、情绪识别综述2、语音情感识别算法3、语音特征提取4、相关项目1、用 LSTM、CNN、SVM、MLP 进行语音情感识别2、DST:基于Transformer的可变形语音情感识别模型3、语音情感基座模型emotion2vec4、IEEE ICME 2023论文|基于交互式注意力的…

康姿百德床垫官网价格公道,为你带来健康与舒适的睡眠享受

我们一生中有很长一段时间在睡眠度过,睡眠之于我们来说十分重要。良好的睡眠质量不仅能够帮助我们更好地恢复体力和精神,还能提高我们的生活质量。因此选择一款优质的床垫变得尤为重要。作为床垫行业的领导品牌,康姿百德床垫一直以提升人们睡…

stm32 之SPI通信协议

本文为大家介绍 SPI 通信协议的基础知识。 文章目录 前言一、SPI协议的概念二、SPI总线架构三、SPI通讯时序1. 起始,停止 信号2.CPOL(时钟极性)/CPHA(时钟相位) 四, I2C 总线 和SPI 总线比较相同点&#xf…

二叉树的前序遍历、中序遍历、后序遍历

二叉树的前序遍历、中序遍历、后序遍历 一、递归算法的三个要素二、144. 二叉树的前序遍历三、94. 二叉树的中序遍历四、145. 二叉树的后序遍历 一、递归算法的三个要素 1、确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在…

【单片机】PMS5003,PM2.5传感器数据读取处理

文章目录 传感器介绍数据处理解析pm2.5的代码帮助、问询 传感器介绍 PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集 并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而 换算成为质量浓度,并以通用数字接口形式输出。本传感器可…

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂: 涉及到使用工具进行百科的检索(有现成的插件)有AgentExecutor来帮助我们执行后续由于上下文过大, 我们通过计算num_tokens,来控制我们的上下文 安装依赖 pip install --upgrade --qu…

SpringBoot整合RabbitMQ-应答模式

一、应答模式 RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。(一般交换机发送消息,RabbitMQ只有在接收到消费者的确认后才…

常见性能测试工具对比

在性能测试工作中,我们常常会遇到好几个工具,但是每一个工具都有自己的优势,一时间不知道怎么选择。 今天我们就将性能测试常用的工具进行对比,这样大家在选择工具的时候心里就有底啦! 阿里云PTS 性能测试PTS&#xff…

基于springboot实现常州地方旅游管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游管理系统演示 摘要 随着旅游业的迅速发展,传统的旅游信息查询方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,针对常州旅游,特开发了本基于Bootstrap的常州地方旅游管…

C++初阶:6.string类

string类 string不属于STL,早于STL出现 看文档 C非官网(建议用这个) C官网 文章目录 string类一.为什么学习string类?1.C语言中的字符串2. 两个面试题(暂不做讲解) 二.标准库中的string类1. string类(了解)2. string类的常用接口说明(注意下面我只讲解…

ONNX系列: ONNX模型修改

ONNX 模型修改 当我们熟悉了ONNX模型各个层级的结构后,我们便可以针对各个结构来对模型进行修改,从而使其更好的适配后端运行时或者特定硬件平台的编译器。对模型的修改通常可以概括为"增删改查"的操作。"增"是增加相应结构&#xf…

SAP 采购订单预制发票不让重复开立增强(包含:LMR1MF6S)<转载>

原文链接:https://blog.csdn.net/LH26988/article/details/136802631 之前博主有介绍过通过配置来控制不让采购发票重复开立,然是这个方式有点缺陷(跳转) 今天介绍,通过增强来彻底搞定这个问题的办法: 问题…

数组与链表:JavaScript中的数据结构选择

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

环境监测站升级选择ARM网关驱动精准数据采集

物联网技术的深入发展和环保需求的不断攀升,API调用网关在环境监测领域的应用正成为科技创新的重要推手。其中,集成了API调用功能的ARM工控机/网关,以其出色的计算性能、节能特性及高度稳定性,成功搭建起连接物理世界与数字世界的…