shell,Linux,security

SELinux基础

  SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现, 是Linux历史上最杰出的新安全子系统; 对于目前可用的 Linux安全模块来说, SELinux 是功能最全面, 而且测试最充分的, 它是在20年的MAC研究基础上建立的; SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略, 并采用了基于角色的访问控制概念

SELinux机制

  • DAC(Discretionary Access Control, 自主访问控制): 依据程序运行时的身份决定权限,是大部分操作系统的权限存取控制方式,即依据文件的own、 group、 other, r、w、x权限进行控制; 系统中UID为0的用户(默认为root用户),拥有最高权限,对其所有的限制都不是限制; rwx权限划分太粗糙,无法针对不同 的进程实现较为有效的控制
  • MAC(Mandatory Access Control, 强制访问控制): 依据条件决定是否有访问权限,可以规范个别细致的项目进行访问控制,提供完整的彻底化规范限制; 可以对文件, 目录, 网络, 套接字等进行规范, 所有动作必须先得到DAC授权, 然后得到MAC授权才可以访问

SELinux中主体和客体的定义

  • 在MAC的安全上下文中有两个重要概念,主体和客体。MAC(或非自由访问控制)框架允许你规定所有进程(称为主体)与系统其它部分如文件、设备、套接字、端口以及其它进程(称为客体)进行交互的权限。它通过对所有进程和对象定义安全策略来实现。这些进程和对象都由内核控制,安全的决定基于所有可用的信息,而不仅仅是用户的身份。在此模型中,一个进程可被授予的权限只是它需要且能发挥作用的权限。这遵循了最小权限原则,不同于DAC完全权限的概念

SELinux安全策略:严格和定向

  • SELinux遵循最小特权模式。默认情况下,所有的行为都遭到拒绝,然后我们会针对系统的每个单元(服务、程序、用户、进程)单独增加策略以允许它们执行特定的功能。如果一个服务,程序或用户试图访问或修改一个不是它们所必须的的文件或资源,访问就会被拒绝且系统会将其记录到日志中。因为SELinux在内核中运行,每个应用程序并不需要针对它进行特别的修改。如果SELinux阻止了某个操作,应用程序只是会收到一个普通的“拒绝访问”的报错
  • 策略是SELinux最重要的概念之一。最小特权模式就很能说明“严格”策略。SELinux可以允许很多不同的策略,在CentOS5和RHEL中默认的策略是“定向”,它主要针对的范围是关键的系统进程。在RHEL中,有超过200个这样的客体存在(包括httpd,named,dhcpd,mysqld)。除此之外,系统中其它的进程都在一个非限制域中运行,不受SELinux影响。定向策略的目标是让每一个启动时就默认安装和运行的进程都在限制域中运行。“定向”策略目的是在不严重影响终端用户体验的情况下尽可能保护最多的重要进程,大多数用户甚至完全感觉不到SELinux在运行
  • Linux Security Modules:

<center>
</center>

SELinux基本操作与配置

  • SELinux操作模式

    • 如果是RHEL系操作系统,默认已将SELinux模块编译进核心,SELinux有三种状态,分别是enforcing,permissive,disabled,操作系统安装完成后为Enforcing状态,强制执行
  • 获取当前SELinux的工作模式有两种较为简单的方式

    • getenforcing,仅获取到当前SElinux的模式
    • sestatus,可查看更多的信息
  • 临时切换SELinux模式

    • setenforce命令在permissive⇐⇒enforcing之间切换当前模式,但是系统重新启动后,模式将返回默认值
    • setenforcing 1
    • setenforcing 0
  • 若要持久化,需改配置文件

    • 永久关闭SELinux
    sed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
  • 如果将SELinux工作模式从disabled更改为enforcing/permissive,则需要使用SELinux上下文重新标记文件系统,因为当某些文件或目录在disabled模式下创建时,它们没有标记SELinux上下文

SELinux策略类型

  • 如果SELinux处于Enforcing/Permissive模式,则可以选择Policy Type如果需要,可以为自己的环境修改所选策略,可以在/etc/selinux/config文件或/etc/sysconfig/selinux文件中设置策略类型,CentOS 7默认策略是targeted策略
  • 然而,如果更改策略类型,则需要安装策略文件.对于CentOS 7 Minimal Install,默认情况下仅安装targeted策略,如果在未安装策略文件的情况下更改为与之对应的策略,则系统将无法启动,谨慎操作
  • 将策略更改为minimum策略
    首先需要装策略文件,策略文件安装在/etc/selinux/minimum目录下
yum -y install selinux-policy-minimum
sed -i 's@SELINUXTYPE=targeted@SELINUXTYPE=minimum@' /etc/selinux/config

重启并应用
systemctl reboot

SELinux三种策略

  • Targeted:此策略将访问控制应用于它们通常是容易遭受攻击的进程,默认即为此
  • Minimum:此策略的包含设置文件与Targeted策略相同,但访问控制的最小进程数比Targeted策略更多
  • MLS:多级安全策略,它实现了Bell-LaPadula(BLP)模型,可以应用更复杂的控件

SELinux 上下文(Context)

  • 访问控制文件或目录由附加信息控制,称为SELinux Context,具有以下语法:

    [SELinux User]:[Role]:[Type]:[Level]

    • SELinux User: SELinux用户属性,而非操作系统user

      • 每个Linux用户都通过SELinux Policy映射到SELinux用户
    • Role: RBAC(基于角色的访问控制)属性

      • 定义了SELinux用户的角色
      • 控制定义角色可以通过SELinux策略访问域的访问
    • Type: TE(类型实施)属性

      • 为进程定义域,还定义文件类型
    • Level: MLS(多级安全性)和MCS(多类别安全性)属性

      • 级别具有[sensitivity]:[category]

SELinux配置

SELinux布尔值设定

  • 显示所有布尔值及当前设定
getsebool -a
  • 查看布尔值描述
semanage boolean -l
  • 例如,配置HTTP允许cgi的设置,httpd_enable_cgi默认设置为off,表示SELinux的访问控制已启用
setsebool -P httpd_enable_cgi 1
  • 关闭selinux关于samba的进程守护的保护
setsebool -P smbd_disable_trans 1
systemctl restart smb

SELinux上下文设定

  • semanage命令是用来查询与修改SELinux默认目录的安全上下文,系统默认没用安装,该命令由policycoreutils-python包提供,安装此包即可使用
  • 命令使用语法
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
  • 选项
-l: 查询
fcontext:主要用在安全上下文方面
-a: 增加,你可以增加一些目录的默认安全上下文类型设置
-m: 修改
-d: 删除
  • 示例

    • 查看/var/www/html的默认安全性本文的设置,修改/var/www/html/cgi-enabled/index.php文件的安全上下文
    semanage fcontext -l /var/www/html
    ls -dZ /var/www/html
    semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled/index.php
微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

支付宝扫一扫,向我赞赏

回复

This is just a placeholder img.