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

news2024/11/24 16:56:23

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



 

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

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

相关文章

蓝桥杯2023A-05-互质数(Java)

5.互质数 题目描述 给定 a, b&#xff0c;求 1 ≤ x < a^b 中有多少个 x 与 a^b 互质。由于答案可能很大&#xff0c;你只需要输出答案对 998244353 取模的结果。 输入格式 输入一行包含两个整数分别表示 a, b&#xff0c;用一个空格分隔。 输出格式 输出一行包含一个…

【MPI并行程序】完美解决Attempting to use an MPI routine before initializing MPI

文章目录 错误原因解决方案 最近在写并行程序&#xff0c;犯了一个小错误&#xff0c;记录一下&#xff0c;以防止以后再犯。 Attempting to use an MPI routine before initializing MPI&#xff08;在初始化 MPI 之前尝试使用 MPI 例程&#xff09; 错误原因 这个错误通常是因…

编写Markdown时如何爽爽地渲染树?

在使用VitePress/Dumi等静态网站生成时&#xff0c;一般均支持直接在Markdown中渲染显示Vue/React组件&#xff0c;这给个网站非常丰富极致的表现力&#xff0c;我们在创建静态网站时开心的使用各种Vue/React组件&#xff0c;但是在输出树结构时&#xff0c;实际场景中存在几个…

Git的简单入门使用

文章目录 拷贝项目的步骤创建项目的步骤提交项目或项目文件的步骤恢复项目文件的步骤推送项目文件的步骤 拷贝项目的步骤 找到需要用来存放项目的文件夹&#xff1b;在文件夹页面空白处右键点击&#xff0c;然后再菜单中选择“Open Git Bash here”。在Github上找到需要进行拷…

【Java核心能力】美团优选后端一面:网络 操作系统

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

Vue2 —— 学习(五)

一、生命周期 &#xff08;一&#xff09;引入案例 我们想让一行文字按一定频率逐渐变得透明 1. Vue 实例外写法 函数写在 Vue 实例外面也能实现但是不推荐 <body><div id"root"><h2 :style"{opacity}">欢迎学习Vue</h2><…

服务器开发 Socket 相关基础

Socket 三要素 1.通信的目的地址&#xff1b; 2.使用的端口号&#xff1b; 3.使用的传输层协议&#xff08;如 TCP、UDP&#xff09; Socket 通信模型 服务端实现 #include <iostream> #include <unistd.h> #include <stdio.h> #include <sys/types.h&…

【QT】pro文件里添加又删除LIBS不影响运行的原因

我发现个问题啊&#xff0c;如果运行项目&#xff0c;发现报错&#xff0c;缺少某dll&#xff0c;接着你在pro文件里加上win32:LIBS -lOpengl32&#xff08;举个例子&#xff09;&#xff0c;接着可以运行了&#xff0c;接着把这行删掉&#xff0c;再运行&#xff0c;仍然可以…

hive 数据库表常用操作及相关函数讲解

创建数据库并指定hdfs存储位置 create database myhive2 location ‘/myhive2’; 使用location关键字&#xff0c;可以指定数据库在HDFS的存储路径。 Hive的库在HDFS上就是一个以.db结尾的目录 默认存储在&#xff1a; /user/hive/warehouse内 当你为Hive表指定一个LOCATION时…

数据库(mysql)-连接嵌套查询-2

子查询 MySQL中的子查询&#xff08;Subquery&#xff09;是嵌套在其他SQL查询中的查询。子查询可以出现在SELECT、FROM或WHERE子句中&#xff0c;并用于返回将被用于外部查询的数据。子查询的结果可以是一个单一的值、一行、一列或多行多列的数据集。 单行单列查询 实例 #查…

如何提高旋转花键运行稳定性?

现代化精密仪器设备中&#xff0c;精密仪器的稳定工作性能对于生产效率和产品质量至关重要&#xff0c;运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分&#xff0c;其稳定性也是直接影响到机械装配的质量和使用寿命&#xff0c;那么我们应该如何提升旋转…

【汇编语言实战】已知10个整数求最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{11,33,23,54,12,51,2,4,34,45};int maxa[0];for(int i1;i<9;i){if(a[i]>max){maxa[i];}}printf("%d",max); }汇编语言&#xff1a; include irvine32.inc .data arr dword 11…

STM32G030F6P6 HSE时钟不能使用无源晶振,只能使用有源晶振!

STM32G030F6P6 HSE时钟不能使用无源晶振&#xff0c;只能使用有源晶振。 参见STM32CubeMX配置 使能RCC中 BYPASS CLOCK SOURCE后只有一个 PC14引脚。 查手册中 5.2.1 HSE clock章节 部分引脚少的封装&#xff0c;HSE时钟只有 OSC-IN&#xff0c;因此只能使用有源晶振 查Data…

经典机器学习模型(八)梯度提升树GBDT详解

经典机器学习模型(八)梯度提升树GBDT详解 Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。 Boosting是一族可将弱学习器提升为强学习器的算法&#xff0c;不同于Bagging、Stacking方法&#xff0c;Boosting训练过程为串联方式&#xff0c;弱学习器…

2024中国航空航天暨无人机展览会8月在重庆举办

2024中国航空航天暨无人机展览会8月在重庆举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会背景&#xff1a; 为更好的培养航空航天产业人才&#xff0c;汇聚航空教育产业创新科技&#xff0c;…

IO流的基础详解

文件【1】File类&#xff1a; 封装文件/目录的各种信息&#xff0c;对目录/文件进行操作&#xff0c;但是我们不可以获取到文件/目录中的内容。 【2】引入&#xff1a;IO流&#xff1a; I/O &#xff1a; Input/Output的缩写&#xff0c;用于处理设备之间的数据的传输。 【3】…

Terraform 扩展

Terraform 扩展 Terraform Meta-Arguments 元参数 count 创建相似的资源for_each 创建相似的资源depends_on 定义资源或者模块的依赖provider 定义provider选项lifecycle 资源的生命周期行为 参数使用范围备注countresource module适用于创建多个相似的资源&#xff0c;使用…

Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&#xf…

读书笔记之人生算法(7)

孤独、爆仓与迷信 跨越出身和运气&#xff0c;实现富足与自由&#xff0c;用概率思维做好决策 13 孤独 孤独&#xff1a;获得好姻缘的算法 姻缘是奇妙的东西&#xff0c;体现了世界的随机性&#xff1a;即使是最理性的人&#xff0c;也可能需要靠运气寻找另一半。 中国有句古话…

Hot100【十一】:最大子数组和

// 定义dp&#xff1a;以i结尾的最大子数组和 dp[i] max(dp[i-1] nums[i],nums[i]) class Solution {public int maxSubArray(int[] nums) {// 1. 不需要特殊处理// 2. 定义dpint[] dp new int[nums.length];dp[0] nums[0];int maxResult nums[0];// 3. dp递推for (int i …