• Linux系统——SElinux


    目录

    前言

    一、SELinux 的作用及权限管理机制 

    1.SELinux 的作用

    1.1DAC

    1.2MAC

    1.3DAC 和 MAC 的对比

    2.SELinux 基本概念

    2.1主体(Subject)

    2.2对象(Object)

    2.3政策和规则(Policy & Rule) 

    2.4安全上下文(Security Context)

    2.4.1安全上下文的结构及含义

    2.5SELinux 的工作模式

    3.SELinux 基本操作

    3.1查询文件或目录的安全上下文

    3.2 查询进程的安全上下文

    3.3手动修改文件或目录的安全上下文

    3.4把文件或目录的安全上下文恢复到默认值

    3.5查询系统中的布尔型规则及其状态

    3.7开关一个布尔型规则

    3.8添加目录的默认安全上下文

    3.9添加某类进程允许访问的端口

    4.SElinux权限管理

    SElinux配置文件


    前言

    安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

    SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。

    SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

    禁用Administrator与Guest用户

    1. sudo usermod -L /sbin/nologin Administrator(root)
    2. sudo usermod -L /sbin/nologin guest
    3. passwd -l Administrator(root)
    4. passwd -l guest

    设置密码最小长度为8位,密码必须符包含大小写字符与数字的策略

    1. vim /etc/pam.d/system-auth
    2. password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 enforce_for_root
    3. 参数说明
    4. 负数:代表最少出现次数,正数:代表最多出现次数
    5. minlen = 8,密码长度至少8位;
    6. lcredit=-1,至少包含一个小写字母;
    7. ucredit=-1,至少包含一个大写字母;
    8. dcredit=-1,至少包含要给数字;
    9. ocredit=-1,至少包含一个特殊字符;
    10. difok=5,新密码最多与旧密码重复5个字符;
    11. enforce_for_root,对root强制执行密码复杂度策略。

    输入三次无效用户锁定,锁定时间为10分钟

    1. yum install pam pam_tally2
    2. /etc/pam.d/system-auth文件并找到以下行:
    3. auth required pam_env.so
    4. 在行的下方添加以下内容:
    5. auth required pam_tally2.so deny=3 onerr=fail unlock_time=600 even_deny_root root_unlock_time=600
    6. pam_tally2.so:指定使用pam_tally2模块。
    7. deny=3:定义了密码错误达到3次后用户被拒绝登录。
    8. onerr=fail:如果模块遇到错误,将导致认证失败。
    9. unlock_time=300:定义用户被锁定的时间(以秒为单位)
    10. ###需要重启 对图形界面无效

    一、SELinux 的作用及权限管理机制 

    1.SELinux 的作用

    SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

    1.1DAC

    在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。只要访问这个资源的进程符合以上的条件就可以被访问。而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

    1.2MAC

    在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。

    这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。

    即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。

    这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。

    而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。

    1.3DAC 和 MAC 的对比

    在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。 

    2.SELinux 基本概念

    2.1主体(Subject)

    可以完全等同于进程。

    2.2对象(Object)

    被主体访问的资源。可以是文件、目录、端口、设备等。

    2.3政策和规则(Policy & Rule) 

    系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。而哪些进程需要管制、要怎么管制是由政策决定的。一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。

    规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。

    在 CentOS 7 系统中,有三套政策,分别是:

    • targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
    • minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
    • mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。

    政策可以在 /etc/selinux/config 中设定。

    2.4安全上下文(Security Context)

    安全上下文是 SELinux 的核心。安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

    文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

    2.4.1安全上下文的结构及含义

    安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。

    2.5SELinux 的工作模式

    • enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
    • permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
    • disabled:关闭 SELinux。

    SELinux 工作模式可以在 /etc/selinux/config 中设定。

    如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。

    enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。

    3.SELinux 基本操作

    3.1查询文件或目录的安全上下文

    1. ls -Z /etc/hosts
    2. #查询 /etc/hosts 的安全上下文
    3. -rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

    3.2 查询进程的安全上下文

    1. ps auxZ | grep -v grep | grep nginx 
    2. 查询 Nginx 相关进程的安全上下文
    3. system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx
    4. system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process

    3.3手动修改文件或目录的安全上下文

    chcon [...]

    选项含义
    -u修改安全上下文的用户字段
    修改安全上下文的用户字段修改安全上下文的角色字段
    -t修改安全上下文的类型字段
    -l修改安全上下文的级别字段
    --reference修改与指定文件或目录相一致的安全上下文
    -R-R
    -h修改软链接的安全上下文(不加此选项则修改软链接对应文件)
    1. chcon -u aaa_u -r bbb_r -t ccc_t test
    2. #修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0

    3.4把文件或目录的安全上下文恢复到默认值

    restorecon [选项] [...]

    1. restorecon -R /usr/share/nginx/html/
    2. #添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文

    3.5查询系统中的布尔型规则及其状态

    getsebool -a

    由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。

    1. getsebool -a | grep httpd
    2. #查询与 httpd 有关的布尔型规则
    3. httpd_anon_write --> off
    4. httpd_builtin_scripting --> on
    5. httpd_can_check_spam --> off
    6. httpd_can_connect_ftp --> off

    3.7开关一个布尔型规则

    setsebool [选项]   -P重启依然生效

    1. setsebool -P httpd_anon_write on
    2. #开启 httpd_anon_write 规则

    3.8添加目录的默认安全上下文

    semanage fcontext -a -t "(/.*)?"

    注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看

    1. semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
    2. #为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文

    3.9添加某类进程允许访问的端口

    semanage port -a -t -p

    注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看

    1. semanage port -a -t http_port_t -p tcp 10080
    2. #为 Nginx 需要使用 10080 的端口用于 HTTP 服务

    4.SElinux权限管理

    SELinux的状态:

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

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

    • disabled:禁用

    相关命令:

    • getenforce: 获取selinux当前状态

    • sestatus :查看selinux状态

    • setenforce 0|1

      • 0: 设置为permissive  宽容

      • 1: 设置为enforcing   强制

    1. [root@localhost html]#getenforce
    2. Enforcing
    3. 如果没有开启可以使用以下命令开启
    4. [root@localhost html]#setenforce 1
    5. 永久开启需要修改 此处文件 /etc/selinux/config
    6. vim /etc/selinux/config
    7. # This file controls the state of SELinux on the system.
    8. # SELINUX= can take one of these three values:
    9. # enforcing - SELinux security policy is enforced.
    10. # permissive - SELinux prints warnings instead of enforcing.
    11. # disabled - No SELinux policy is loaded.
    12. SELINUX=enforcing

    1. [root@localhost ~]#yum provides seinfo
    2. #查询seinfo来源于哪个安装包

    [root@localhost ~]#yum install setools-console.x86_64 -y
    

    如果修改文件系统类型

    如果开启SElinux  setenforce 为1的话就无法访问index.html;如果关闭SElinux setenforce为0的话就可以访问index.html

    1. [root@localhost html]#seinfo -t
    2. #可以看到所有的安全上下文类型
    3. [root@localhost html]# chcon -t var_t /var/www/html/index2.html
    4. #把 index2文件类型修改 为 var_t
    5. [root@localhost html]#ls -Z
    6. -rw-r--r--. root root unconfined_u:object_r:var_t:s0 index2.html
    7. -rw-r--r--. root root unconfined_u:object_r:httpd_sys_rw_content_t:s0 index.html

    需要打开软件端口绑定,如果端口不让绑定,一定是防护有问题;输入该命令后就可以重启httpd服务了

    SElinux配置文件

  • 相关阅读:
    行业追踪,2023-10-20
    【知识分享】Java获取当前周的开始时间结束时间
    【函数式编程实战】(六) Stream高并发实战
    PHP智慧社区小区物业管理系统小程序源码
    CentOS 8 通过YUM方式升级最新内核
    数据建模中利用3σ剔除异常值进行数据清洗
    中枢神经系统的网状结构,网状神经系统的特征
    电脑入门:电脑硬件入门到精通
    YOLO目标检测——无人机检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
    强制类型转换有哪几种?
  • 原文地址:https://blog.csdn.net/G_D0120/article/details/136510020