SELinux原理和使用

本文结构:SELinux介绍、安全上下文-->模式、策略设置和使用-->bool值作用、查询修改-->semanager工具安全上下文的使用



Security Enhanced Linux 安全强化linux

     是一个嵌到内核中的模块,用于针对进程对系统资源的访问加强安全防护,以网络服务来说,服务的主体是进程,SELinx便可以控制网络服务是否能访问系统资源


为什么需要SELinux

传统的访问文件系统的方式是自主访问控制(Discretionary Access Control,DAC)通过所有者和文件资源的rwx权限决定可否访问

缺点:进程所有者只要拥有rwx权限,就可以对文件资源进行随意修改(例:若是管理者不小心将对外的服务目录如/var/www/html 权限改为777,则任何人都可以进行随意访问和修改)

SELinux,委托访问控制(Mandatory Access Contral,MAC)控制主体变成进程而不是用户,利用策略安全上下文的匹配控制进程对文件资源的访问


策略(policy)

  • targeted:针对网络服务的限制较多,针对本机限制较少,是默认策略
  • strict:严格限制,完整的SELinux限制


安全上下文(security context)

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

     Identify:role:type

  1. 身份标识:root、system_u、user_u
  2. 角色:object_r、system_r
  3. 类型(type):

主体和目标安全上下文type字段一致才可访问

安全上下文是放置到文件inode内的 和rwx一样


进程和 SElinux type字段的关系:以httpd为例

  1. 首先运行程序 usr/sbin/httpdtype类型为 httpd_exec_t 
  2. 该类型会让文件触发的主体进程(subject)具有httpd这个域(domain)
  3. 这个域已被制定了许多规则,包括域可以读取的目标资源类型type
  4. httpd domain被设置为可以读取 httpd_sys_content_t这个类型的Object
  5. /var/www/html的type类型为 httpd_sys_content_t
  6. 所以网页放到/var/www/html下就能被httpd进程读取了
  7. 最后再根据rwx的权限


SELinux使用


查看模式

  • getenforce

Enforcing    // 强制模式  
permissive:宽容模式(只提醒不禁止)  

disabled 关闭SELinux


改变模式

  • setenforce 0 / 1

查看策略

  • sestatus 列出当前策略和状态 [-v 列出/etc/sestatus.conf下的安全上下文内容] [-b 以布尔值的方式列出策略规则]


配置文件可修改模式和策略

  • /etc/selinux/config
  • [[email protected] ~]# cat /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #     targeted - Targeted processes are protected,
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted    // 还有strict


启动与关闭

  • 查看内核有无关闭 SElinux
  • [[email protected] ~]# cat /boot/grub/menu.lst 
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
         root (hd0,0)
         kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=7f7fc25f-c295-4b8a-8d2c-48ae97b01d41 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet                                                                         
         initrd /initramfs-2.6.32-431.el6.x86_64.img
  • 若内核参数加上selinux=0则表示关闭功能
  • selinux是写到内核中的所以:改变模式或改变策略都要重启系统


修改安全上下文

  • chcon [-t 类型] [-R 递归] 目录/文件

[[email protected] ~]# chcon -R -t httpd_sys_content_t /var/www/html  

  • restorecon [-R 递归] [-v 显示过程] 目录/文件

// 通过默认安全上下文还原类型

[[email protected] ~]# restorecon -Rv /var/www/html                                



SElinux日志记录

  • setroubleshoot:错误信息写入 /var/log/messages
  • auditd:详细日志信息包括错误信息写入/var/log/audit/audit.log 


策略规则

查询状态规则(setools-console 使用seinfo的rpm包)

  •  seinfo [-b 列出所有的(booleans)规则] [-u user] [-r role] [-t type] 列出当前状态下的统计状态 

[[email protected] ~]# seinfo      // 当前策略下的统计状态

Statistics for policy file: /etc/selinux/targeted/policy/policy.24

Policy Version & Type: v.24 (binary, mls)

Classes:            81    Permissions:       235

Sensitivities:       1    Categories:       1024

Types:            3637    Attributes:        280

Users:               9    Roles:              12

Booleans:          217    Cond. Expr.:       257  // 针对网络的规则boolens217条

Allow:          291033    Neverallow:          0

Auditallow:        123    Dontaudit:      226650

Type_trans:      33142    Type_change:        38

Type_member:        48    Role allow:         19

Role_trans:        308    Range_trans:      4521

Constraints:        90    Validatetrans:       0

Initial SIDs:       27    Fs_use:             23

Genfscon:           83    Portcon:           446

Netifcon:            0    Nodecon:             0

Permissives:        75    Polcap:              2

[[email protected] ~]# seinfo -b | grep httpd    // httpd的bool值

httpd_manage_ipa

httpd_run_stickshift

httpd_use_fusefs

httpd_use_openstack

allow_httpd_mod_auth_pam

httpd_setrlimit

httpd_enable_ftp_server

httpd_use_nfs

布尔值查询修改(sesearch查看详细信息)

[[email protected] ~]# getsebool -a  //查询

abrt_anon_write --> off

abrt_handle_event --> off

allow_console_login --> on

allow_cvs_read_shadow --> off

[[email protected] ~]# getsebool allow_console_login    // 查询某一个

allow_console_login --> on

[[email protected] ~]# setsebool -P allow_console_login=1     //(1表示on, 0表示off),-P写入配置文件


文件默认安全上下文设置

  • [[email protected] ~]# semanage fcontext [-l 查询] [-a 增加] [-m 修改] [-d 删除]   // fcontext用于安全上下文
  • 例:

[[email protected] ~]# ls -Zd /srv/samba
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0   /srv/samba
[[email protected] ~]# semanage fcontext -l | grep /srv/
/srv/([^/]*/)?ftp(/.*)?                            all files          system_u:object_r:public_content_t:s0
/srv/([^/]*/)?rsync(/.*)?                          all files          system_u:object_r:public_content_t:s0
/srv/([^/]*/)?www(/.*)?                            all files          system_u:object_r:httpd_sys_content_t:s0
/srv/.*                                            all files          system_u:object_r:var_t:s0
/srv/gallery2(/.*)?                                all files          system_u:object_r:httpd_sys_content_t:s0
/srv/git(/.*)?                                     all files          system_u:object_r:git_sys_content_t:s0 
[[email protected] ~]# semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
[[email protected] ~]# semanage fcontext -l | grep /srv/samba

/srv/samba(/.*)?                                   all files          system_u:object_r:public_content_t:s0
[[email protected] ~]# restorecon -Rv /srv/samba
restorecon reset /srv/samba context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:public_content_t:s0
[[email protected] ~]# ls -dZ /srv/samba/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /srv/samba/

时间: 2024-08-28 09:06:49

SELinux原理和使用的相关文章

Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShell创建自定义镜像的VMSS集群. 1 创建VM,对其进行个性化配置,比如安装httpd,增加Date Disk等,并把此VM捕获成Image 2 以这个Image创建VMSS集群 一 创建并捕获Image 这个操作在前面的文章中也介绍过: http://www.cnblogs.com/hengwei

【网络安全】Linux网络安全课程

http://edu.51cto.com/course/course_id-2199.html 课程目标 从"安全"的角度出发,介绍Red Hat Enterprise Linux服务器系统常见的安全优化措施.SELinux原理和应用,端口和漏洞扫描.Iptables防火墙等网络安全应用知识. 适用人群 Linux运维工程师.网络管理员 课程简介 [Linux网络安全应用视频课程] 课程目标: 本课程从"安全"的角度出发,介绍Red Hat Enterprise L

centos7的selinux的原理及相关配置

centos7的selinux的原理及相关配置 SELinux的全称是Security Enhanced Linux, 就是安全加强的Linux.在SELinux之前,root账号能够任意的访问所有文档和服务:如果某个文件设为777,那么任何用户都可以访问甚至删除:这种方式称为DAC(主动访问机制),很不安全. DAC 自主访问控制: 用户根据自己的文件权限来决定对文件的操作,也就是依据文件的own,group,other/r,w,x权限进行限制.Root有最高权限无法限制.r,w,x权限划分太

DNS原理及其配置

DNS----Domain Name System域名系统 工作原理: 作用: 1)将域名, 主机名解析成对应的IP地址 正向解析 2)将IP地址解析成对应的主机名,域名        反向解析 DNS解析方式: 递归 客户端只需要向DNS服务器发送一次请求 迭代 客户端需要发送多次DNS请求 区域zone 正向区域xxx.com 反向区域X.X.X.in-addr.arpa 记录Record A记录主机记录 www.uplooking.comA192.168.1.1 NS记录标识DNS服务器自

kickstart安装系统原理详解

前言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的办法有什么? 光盘安装系统===>一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数.用USB外置光驱,插来插去也醉了. U盘安装系统===>还是同样的问题,要一台一台服务器插U盘. 网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以装系统了

VSFTP通讯原理与搭建详解

VSFTP介绍 ftp是一种古老的明文传输协议,因为其明文传输的特性,也出现过很多重大的危机,进而逐渐演变为支持加密传输的VSFTP(very security FTP),而CentOS默认自带的FTP就为VSFTP.本文主要介绍下VFSTP的传输原理与搭建.为了避免干扰,实验前请关闭Selinux和IPtables. FTP传输机制 FTP通过21端口与Client端进行指令传输,通过20端口进行数据传输,根据工作模式的不同VSFTP分为主动模式和被动模式2种,大多是情况VSFTP是工作在被动

selinux 安全上下文

一:安全上下文原理 安全上下文是一个简单的.一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,即都是安全上下文中的"TYPE". 1 :DAC与MAC的关键区别(root用户) 安 全增强型Linux(SELinux)开始是由NSA(国家安全局)启动并加入到Linux系统中的一套核心组件及用户工具,可以让应用程序运行在其所需 的

Android7.0 Ninja编译原理

############################################# 本文为极度寒冰原创,转载请注明出处 ############################################# 引言 使在Android N的系统上,初次使用了Ninja的编译系统.对于Ninja,最初的印象是用在了Chromium open source code的编译中,在chromium的编译环境中,使用ninja -C out/Default chrome命令,就可以利用源码编译出

SELinux入门基础

如果你是一个运维人员,那么你一定听说过SELinux,即使你不会使用它,对于SELinux的看法,见仁见智. 有的朋友认为它大大的提升了系统的安全性,极度推崇它,有的朋友则认为它不是必须的,不熟悉的情况 下轻易使用会造成很多错误,弊大于利,于是直接关闭它,还有些朋友能把它当做阴谋论去讨论.我们无 法评判孰是孰非,只能说,如果有使用它的需求,对它有一定的了解即可,现在,我们来初步了解一下它. SELinux的什么? 通俗的讲:SELinux是一个Linux模块,主要用于提高Linux的安全性. 这