CentOS上的安全防护软件Selinux详解

时间:23-11-17 14:44:58

作者:

分类:Linux教程

  selinux简介

  SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,是Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux默认安装在Fedora和Red Hat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到,2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中

  DAC:Discretionary Access Control自由访问控制

  MAC:Mandatory Access Control强制访问控制

  DAC环境下进程是无束缚的

  MAC环境下策略的规则决定控制的严格程度

  MAC环境下进程可以被限制的

  策略被用来定义被限制的进程能够使用那些资源(文件和端口)

  默认情况下,没有被明确允许的行为将被拒绝

  selinux的工作类型

  selinux一共有四种工作类型

  strict:每个进程都受到selinux的控制

  targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,系统当中默认设置类型

  minimum:这个模式在centos7上,是targeted的修改版,只对选择的网络服务,仅对选中的进程生效

  mls:提供mls机制的安全性,国防级别的

  selinux安全上下文

  传统的linux,一切皆文件,由用户、组、权限来进行访问控制,这当中有很多的缺陷

  在selinux中,一切皆对象(进程),有存放在inode的扩展属性域的安全元素所控制其访问

  所有文件和端口资源和进程都具备安全标签,这就是安全上下文

  安全上下文有五个元素组成

  system_u:object_r:admin_home_t:s0

  user:role:type:sensitivity:category

  user:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由进程

  role:定义文件,进程和用户的用途,文件:object_r,进程和用户:system_r

  type:指定数据类型,规则重定义何种进程类型访问何种文件,target策略基于type实现,多服务功用,public_content_t

  sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,一个对象有且只有一个sensitivity,分0-15个级别,s0最低,target策略默认使用是s0

  category:对于特定组织划分不分层的分类,如FBI secret,NSA secret,一个对象可以有多个category,c0-c1023共1024个分类,target策略不适用category

  查看安全上下文

  ls –Z ; ps -Z

  期望(默认)上下文:存放在二进制的selinux策略库中

  semanage fcontext –l查看系统中的默认安全上下文

  @font-face {

  font-family: “宋体”;

  }@font-face {

  font-family: “Cambria Math”;

  }@font-face {

  font-family: “Calibri”;

  }@font-face {

  font-family: “@宋体”;

  }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; text-align: justify; font-size: 10.5pt; font-family: “Calibri”,”sans-serif”; }.MsoChpDefault { font-family: “Calibri”,”sans-serif”; }div.WordSection1 { }

  CentOS上的安全防护软件Selinux详解插图

  selinux策略

  对象(object):所有可以读取的对象,包括文件、目录和进程,端口等

  主体:进程称为主题(subject)

  selinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain标签。domain标签能够执行的操作由安全策略里定义

  当一个subject视图访问一个object,kernel中的粗略执行服务器将检查AVC,在AVC中,subject和object的权限被缓存,查找应用+文件的安全环境,然后根据查询结果允许或拒绝访问

  安全策略:定义主体读取对象的规则数据库,规则中记录了那个类型的主体使用了那个方法读取哪一个对象是允许还是拒绝的,并且定义了那种行为是允许或拒绝

  设置selinux

  配置selinux

  selinux是否启用

  给文件重新打安全标签

  给端口设置安全标签

  设定某些操作的布尔型开关

  selinux的日志管理

  selinux的状态

  enforcing:强制,每个受限的进程都必然受限

  permissive:允许;每个受限的进程违规操作不会被禁止,但会被记录与审计日志

  disabled:禁用,允许任何操作

  getenforce:获取selinux当前状态

  sestatus:查看selinux状态

  setenforce 0|1

   0:设置为permissive

   1:设置为enforcing

  配置文件

  /etc/sysconfig/selinux链接文件链接到/etc/selinux/config

  /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 – SELinux is fully disabled.

  SELINUX=enforcing

  # SELINUXTYPE= type of policy in use. Possible values are:

  # targeted – Only targeted network daemons are protected.

  # strict – Full SELinux protection.

  SELINUXTYPE=targeted

  SELINUX=enforcing设置selinux的状态

  SELINUXTYPE=targeted设置selinux的工作类型

  设置selinux也可以在开机的时候设定,在/boot/grub/grub.conf文件内核那一行后面设定selinux的状态selinux=0|1,只要配置文件或内核设定为禁用,最后selinux的状态为禁用

  注意:在从disabled状态切换至enforcing或permissive状态需要重启系统,这时候系统会对每一个文件一一重打标签,需要花费一定的时间。

  修改selinux的安全标签

  给文件重新打安全标签

  chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE..

  chcon [OPTION]… –reference=RFILE FILE..

   -R:递归打标,对目录而言

  例如我想给自己定义的web文档根目录自定义为/htdocs

  chcon -R httpd_sys_content_t /htdocs

  恢复目录或文件默认的安全上下文

  resotrecon [-R] /path/to/somewhere

  例如:我又将web的文档根目录改为原来的目录,这时候自定义的目录的标签需要还原

  restorecon -R /htdocs

  恢复是根据策略库当中的策略进行还原

  默认安全上下文查询与修改

  semanage来自policycoreutils-python包,有些系统默认没有安装,安装次包即可使用semanage命令

  查看默认的安全上下文

  semanage fcontext –l

  CentOS上的安全防护软件Selinux详解插图1

  添加安全上下文

  semanage fcontext -a –t httpd_sys_content_t ‘/home/hadoop(/.*)?’

  restorecon –Rv /home/hadoop此步骤一定不能忘记,它从策略库进行还原安全上下文,执行此命令才会生效

  删除安全上下文

  semanage fcontext –d –t httpd_sys_content_t ‘/home/hadoop(/.*)?’

  selinux端口标签

  查看端口标签

  semanage port -l

  CentOS上的安全防护软件Selinux详解插图2

  添加端口

  semanage port -a -t port_label –p tcp|udp port

  semanage port –a -t htt_port_t -p tcp 8080

  删除端口

  semanage port -d -t port_label -p tcp|udp port

  semanage port -d -t htt_port_t -p tcp 8080

  修改现有(已存在)端口为新标签

  semanage port -m –t port_label –p tcp|udp port

  semanage port –m –t ssh_port_t –p tcp 8080将ssh服务的端口改为8080

  selinux布尔值

  查看布尔值命令

  getsebool [-a] [boolean]

  semanage boolean –l -C查看修改过的布尔值

  设置bool值命令

  setsebool [-P] boolean value(on|off|1|0)

  setsebool httpd_enable_homedirs on|1开启httpd家目录访问,但不会写入策略库中

  setsebool -P httpd_enable_homedirs on|1

  修改bool值时后面的值可以对布尔值类型后跟=加值的设置方法

  setsebool httpd_enable_homedirs=on

  selinux的日志管理

  需要安装settroublesshoot*安装此包需要重启系统才能生效,它会将错误日志记录到/var/log/message

  grep setroubleshoot /var/log/message

  sealer -l UUID

  查看安全事件日志说明

  sealert -a /var/log/audit/audit.log

  CentOS上的安全防护软件Selinux详解插图3

  扫描并分析日志

  yum -y install selinux-policy-devel(centos7)

  yum –y install selinux-policy-doc(centos6)

  mandb | makewhatis需要更新man帮助的数据才能查询

  man -k _selinux

  例如man httpd_selinux

  CentOS上的安全防护软件Selinux详解插图4

  总结:selinux在安全防护上确实起到了一定的作用,它是在内核层面来工作,往往有许多的漏洞,一旦黑客利用漏洞入侵系统后果不堪设想,还有其 操作的繁琐和稳定性的欠缺的导致很多企业不愿意用到selinux ,一般都会使用硬件的安全防护设备,所以我们只需要作为了解,知道有这么个东西,如何开关闭及一些简单的操作即可。