Linux selinux 基础

一、SELinux简介

SELinux(Secure Enhanced Linux)安全增强的Linux是由美国国家安全局NSA针对计算机基础结构安全开发的一个全新的Linux安全策略机制。SELinux可以允许系统管理员更加灵活的来定义安全策略。SELinux是一个安全体系结构,它通过LSM(LinuxSecurity Modules)框架被集成到Linux Kernel 2.6.x中。因为SELinux是内核级别的,所以我们对于其配置文件的修改都是需要重新启动操作系统才能生效的。

二、SELinux基本概念

   我们知道,操作系统的安全机制其实就是对两样东西做出限制:进程和系统资源(文件、网络套接字、系统调用等)。  在之前学过的知识当中,Linux操作系统是通过用户和组的概念来对我们的系统资源进行限制,我们知道每个进程都需要一个用户才能执行。在SELinux当中针对这两样东西定义了两个基本概念:域(domin)和上下文(context)。SELinux提供了一种灵活的强制访问制(MAC)系统,且内嵌于Linux Kernel中。SELinux定义了系统中每个用户、进程、应用和文件的访问和转变的权限,然后它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查。ll 文件/目录后出现 ”.”,说明该文件/目录与SELinux有关。只通过权限访问的叫DAC,限+SELinux,叫MAC强制访问方式。SELinux 会给每个文件分配一个标签,当标签不匹配时,即使有权限,也不能访问。标签学名叫做SELinux上下文.selinux可以让应用程序运行在其所需的最低权限上。未经修改过的Linux系统是使用自主访问控制的,用户可以自己请求更高的权限,由此恶意软件几乎可以访问任何它想访问的文件,而如果你授予其root权限,那它就无所不能了。 在SELinux中没有root这个概念,安全策略是由管理员来定义的,任何软件都无法取代它。这意味着那些潜在的恶意软件所能造成的损害可以被控制在最小。一般情况下只有非常注重数据安全的企业级用户才会使用SELinux。

操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC)。标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC。

所有DAC机制都有一个共同的弱点,就是它们不能识别自然人与计算机程序之间最基本的区别。简单点说就是,如果一个用户被授权允许访问,意味着程序也被授权访问,如果程序被授权访问,那么恶意程序也将有同样的访问权。 DAC最根本的弱点是主体容易受到多种多样的恶意软件的攻击,MAC就是避免这些攻击的出路,大多数MAC特性组成了多层安全模型。

[[email protected] ~]# ll /root
total 56
-rw-r--r--. 1 root root   238 Apr 29 11:31 ]
-rw-------. 1 root root  1442 Apr 5 21:56 anaconda-ks.cfg
-rw-r--r--. 1 root root 34353 Apr  5 21:55 install.log
       #在权限得最后面有一个点             
[[email protected] ~]# ls -Z
-rw-r--r--. root rootsystem_u:object_r:admin_home_t:s0 ]
-rw-------. root rootsystem_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root rootsystem_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0install.log.syslog
-rw-r--r--. root rootsystem_u:object_r:admin_home_t:s0 oldboy
[[email protected] ~]# ps -Z
LABEL                             PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c10232003 pts/0 00:00:00 su
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c10232009 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c10232030 pts/0 00:00:00 ps
[[email protected] ~]# id –Z    #显示shell的安全上下文
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

三、selinux简单的策略

1、selinux 的配置文件

在/etc/sysconfig/selinux 和文件/etc/selinux/conf中都可以修改,是/etc/sysconfig/selinux是一个符号链接,真正的配置文件为:/etc/selinux/config

它包含3个选项:

1》打开或者关闭selinux

2》设置系统执行哪一个策略(policy)

3》设置如何执行策略

disabled:关闭SELinux

permissive:警告,不满足上下文的要求,依然可以访问

enforcing:强制,不满足上下文,拒绝setenforce 0|1

2、一些简单的命令

getsebool -a   #查看所有服务的开关
setsebool -P   #需要修改的SELiux服务布尔开关  on|off
chcon -R --reference=/var/blog/     /var/blog/index.html    
#将index.html的context修改为与/var/blog一致
chcon -R -t SELinux上下文  文件/目录           
#-R 递归到子目录                 
#-t 上下文的类型 
restorecon -R  文件/目录   #继承当前目录的上下文

3、selinux 安全策略

SELINUXTYPE=targeted|strict — 指定SELinux执行哪一个策略

3.1 targeted 

只有目标网络daemons保护。每个daemon是否执行策略,可通过system-config-selinux进行配置。保护常见的网络服务,为SELinux默认值。可使用如下工具设置每个daemon的布尔值:

1》getsebool -a:列出SELinux的所有布尔值

2》setsebool:置SELinux布尔值,如:setsebool-P dhcpd_disable_trans=0,-P表示即使用reboot之后,仍然有效。

3.2strict

对SELinux执行完全的保护。为所有的subjects和objects定义安全环境,且每一个Action由策略执行服务器处理。提供符合Role-based-Access Control(RBAC)之policy,具备完整的保护功能,保护网络服务、一般指令及应用程序。

[[email protected] ~]#  /usr/sbin/sestatus -v   #显示系统的详细状态
SELinux status:        enabled
SELinuxfs mount:      /selinux
Current mode:        enforcing
Mode from config file:   enforcing
Policy version:       24
Policy from config file:  targeted
Process contexts:
Current context:       unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context:        system_u:system_r:init_t:s0
/sbin/mingetty        system_u:system_r:getty_t:s0
/usr/sbin/sshd        system_u:system_r:sshd_t:s0-s0:c0.c1023
File contexts:
Controlling term:          unconfined_u:object_r:user_devpts_t:s0
/etc/passwd          system_u:object_r:etc_t:s0
/etc/shadow          system_u:object_r:shadow_t:s0
/bin/bash           system_u:object_r:shell_exec_t:s0
/bin/login          system_u:object_r:login_exec_t:s0
/bin/sh            system_u:object_r:bin_t:s0-> system_u:object_r:shell_exec_t:s0
/sbin/agetty         system_u:object_r:getty_exec_t:s0
/sbin/init          system_u:object_r:init_exec_t:s0
/sbin/mingetty        system_u:object_r:getty_exec_t:s0
/usr/sbin/sshd        system_u:object_r:sshd_exec_t:s0

4、selinux上下文

Selinux 的上下文格式 :USER:ROLE:TYPE[LEVEL[:CATEGORY]]

4.1 USER

1》user identity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分
  2》三种常见的 user:

user_u :普通用户登录系统后的预设;
    system_u :开机过程中系统进程的预设;
    root :root 登录后的预设;

3》在 targeted policy 中 users 不是很重要;
   4》在strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。

4.2 ROLE

1》文件、目录和设备的role:通常是 object_r;
  2》程序的role:通常是 system_r;
  3》用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;

4》使用基于RBAC(Roles Based Access Control) 的strict和mls策略中,用来存储角色信息

4.3 TYPE

1》type:用来将主体(subject)和客体(object)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;

2》当一个类型与执行中的进程相关联时,其type也称为domain;
  3》type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;

LEVEL和CATEGORY:定义层次和分类,只用于mls策略中
    LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高
    CATEGORY:代表分类,目前已经定义的分类为c0-c1023

举个例子:system_u:object_r:admin_home_t:s0

这条语句通过:划分成了四段,第一段 system_u 代表的是用户,第二段 object_r 表示的是角色,第三段是SELinux中最重要的信息,admin_home 表示的是类型,最后一段 s0 是跟MLS、MCS相关的东西,暂时不需要管。

5、Apache实例

当我们在Apache的站点目录建立一个index文件.在本地的host文件中添加本地解析,输入你的网址就可以得到下面的图片内容。虚拟主机配置在:http://13132323.blog.51cto.com/13122323/1953402

[[email protected] ~]# getenforce 
Enforcing
[[email protected] ~]#/application/apache/bin/apachectl start
[[email protected] ~]# netstat -lnt |grep 80
tcp       0      0 0.0.0.0:38051               0.0.0.0:*                   LISTEN      
tcp       0      0 :::80                    :::*  
                      LISTEN

这时如果我们删除站点目录的index文件,在/home/目录下建立一个index文件,将其移动到Apache的站点目录下时,按F5刷新浏览器页面,则会发现出现了Apache的默认界面并没有显示index文件的内容而是默认的Apache测试页面。这时我们修改让index的类型和他的目录保持一致,这时我们会看到又会出现上边的图片。

[[email protected] ~]# cd /var/blog 
[[email protected] blog]# ls
index.html
[[email protected] blog]# rm   -rf  index.html
[[email protected] blog]# cp /home/index.html  .
[[email protected] blog]# ls -Z
-rw-r--r--. root rootunconfined_u:object_r:home_root_t:s0 index.html
[[email protected] blog]# ls -dZ  /var/blog
drwxr-xr-x. ett ettsystem_u:object_r:var_t:s0      /var/blog
[[email protected] blog]# chcon  -R --reference=/var/blog /var/blog/index.html 
[[email protected] blog]# ls -Z   
-rw-r--r--. root root system_u:object_r:var_t:s0       index.html
##或者这个命令:restorecon -R -v /var/blog/index.html 

出现的原因:我们发现我们的 /var/blog 这个目录的上下文类型是var_t, 而我们刚才移动过来的 index.html 的类型却是 home_root_t,因为我们此时的SELinux的工作模式是 enforcing,所以对于违反策略的行动是被禁止的,所以我们刷新页面并不会出现我们的index.html里面的信息。

时间: 2024-10-20 18:26:20

Linux selinux 基础的相关文章

linux的基础知识

1.描述计算机的组成及其功能 计算机分为软件和硬件 软件:例如我们的系统.QQ.360等等 计算机硬件由五大部分组成:运算器.控制器.存储器.输入设备.输出设备,也就是我们生活中常见 CPU .主板.内存.硬盘.键盘.鼠标.显示器等.它们的各个具体功能如下: (1)CPU:是英语“Central Processing Unit中央处理器”的缩写,是一台计算机的运算核心和控制核心.它的功能主要 是解释计算机指令以及处理计算机软件中的数据.如今主流分AMD和Intel. (拓展IntelCPU的优点

Linux操作系统基础解析之(四)——Linux基本命令剖析(1)

Linux操作系统自从出现以来,就备受关注.但是人们往往会有这样的一个印象:Linux比Windows难.为什么好多人都会有这样的想法呢?很简单,因为Windows是在更早的时候,甚至是大多数国人都没有认识到计算机的时候就已经被安装到X86架构的计算机上了.Microsoft公司寻求Intel公司的技术支持,并且建立合作之后,PC的市场就几乎被这两家公司垄断了.所以,很多人刚刚开始接触并逐渐学会使用计算机,Intel的X86架构的主机,而且这个主机上一般安装的都是Windows操作系统.因此,大

linux系统基础优化

1.Linux系统基础优化 一.关闭SELinux功能 Selinux是什么? 安全工具,控制太严格,生产环境不用它,使用其他安全手段. 简介: SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制. Security-Enhanced Linux (SELinux)由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SELinux是一个安全体系结构,它通过LSM(Linux Security

linux系统基础调优

linux系统基础调优 1.   关闭selinux,清空iptables sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config grep SELINUX=disabled /etc/selinux/config setenforce 0 iptables -F iptables -X iptables -Z iptables -L /etc/init.d/iptables save 2.    添加普通用户并进行s

Linux系统基础入门

1.描述计算机的组成及其功能 计算机有五大组成部分:运算器,控制器,存储器,输入设备和输出设备. 运算器是负责进行数据加工和数据运算的:一般在集成在cpu内 控制器是负责进行计算机各设备的控制:一般集成在cpu内 存储器是负责记录存储数据用的:例如硬盘,内存等 输入设备是负责计算机接受用户来自于其他设备指令的:例如键盘,鼠标等 输出设备是负责输出计算机处理结果的设备:例如显示器等 2.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. Linux有三大发行版 slackware其中

Linux 系统基础优化和常用命令

目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux中文显示设置(防止中文乱码) df 命令 tree命令 设置主机名 DNS 查看Linux的dns, 唯一配置文件 本地强制dns解析文件 /etc/hosts nslookup命令 计划任务crond服务 软件包管理 windows程序 macos程序 RPM软件包管理器 实例 rpm安装软件 r

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

linux入门基础——linux软件管理RPM

因为linux入门基础是基于CentOS讲解的,讲的是CentOS上的软件包管理.ubuntu的软件包管理有这些:ubuntu软件包管理,包管理指南,ubuntu软件包管理. linux软件管理:RPM软件包管理 源代码形式 绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成tar.gz的归档压缩文件 程序源代码需要手动编译成二进制形式之后才能够运行使用 源代码基本编译流程: 1 ./configure   检查编译环境.相关库文件以及配置参数并生成makefile 2 make  

linux入门基础——linux用户基础

linux用户基础 用户,组 当我们使用linux时,需要以一个用户的身份登入,一个进程也需要以一个用户的身份运行,用户限制使用者或者进程可以使用,不可以使用哪些资源. 用户的实质就是用来限制的. 组用来方便管理组织管理用户. 每个用户都拥有一个UserID,操作系统实际使用的是用户ID,而非用户名 每个用户属于一个主组,属于一个或者多个附属组 每个组拥有一个GroupID 每个进程以一个用户身份运行,并受该用户可访问的资源限制 每个可登陆用户拥有一个指定的shell. 用户 用户ID为32位,