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中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修