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

相关文章

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题