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

2024-04-10 12:28

本文主要是介绍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};doping -c 1 -w 1 ${net}.${i} &> /dev/nullif [ $? -eq 0 ]; thenecho "${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=1while [ $i -le 100 ]; dolet sum+=$ilet i++
doneecho "$i"
echo "sum:$sum"

示例:添加10个用户:

#!/bin/bash
#
declare -i i=1
declare -i users=0while [ $i -le 10 ];doif ! id user$i &> /dev/null; thenuseradd user$iecho "new user:user$i added!"let users++filet i++
doneecho "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 ]; doif ping -c 1 -w 1 $net.$i &> /dev/null; thenecho "$net.$i is up."let uphosts++elseecho "$net.$i is down."let downhosts++filet i++
doneecho "Up hosts: $uphosts"
echo "down hosts: $downhosts"

打印乘法表:

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


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

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

使用while语句实现乘法表:

#!/bin/bash
#
declare -i i=1
declare -i j=1while [ $j -le 9 ]; dowhile [ $i -le $j ]; doecho -e -n "${i}X${j}=$[$i*$j]\t"let i++doneecholet i=1let j++
done



 

这篇关于Linux入门攻坚——18、SELinux、Bash脚本编程续的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891058

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5