前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三分钟学会 linux 的 selinux

三分钟学会 linux 的 selinux

作者头像
用户7557625
发布2020-07-15 11:31:28
5460
发布2020-07-15 11:31:28
举报

一、简介

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

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

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

二、SELinux 基本概念

2.1 主体(Subject)

可以完全等同于进程。

注:为了方便理解,如无特别说明,以下均把进程视为主体。

2.2 对象(Object)

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

注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。

2.3 政策和规则(Policy & Rule)

系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。

而哪些进程需要管制、要怎么管制是由政策决定的。

一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。

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

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

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

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

2.4 安全上下文(Security Context)

安全上下文是 SELinux 的核心。

安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。

一个「进程安全上下文」一般对应多个「文件安全上下文」。

只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。

需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

安全上下文的结构及含义

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

三、SELinux 基本操作

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

命令基本用法

ls -Z

用法举例

查询 /etc/hosts 的安全上下文。

ls -Z /etc/hosts

执行结果

-rw-r–r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

3.2 查询进程的安全上下文

命令基本用法

ps auxZ | grep -v grep | grep

用法举例

查询 Nginx 相关进程的安全上下文。

ps auxZ | grep -v grep | grep nginx

执行结果

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

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 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段–reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文(不加此选项则修改软链接对应文件)

用法举例

修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。

chcon -u aaa_u -r bbb_r -t ccc_t test

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

命令基本用法

restorecon [选项] […]

选项功能-v打印操作过程-R递归操作

用法举例

添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。

restorecon -R /usr/share/nginx/html/

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

命令基本用法

getsebool -a

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

用法举例

查询与 httpd 有关的布尔型规则。

getsebool -a | grep httpd

执行结果

httpd_anon_write --> off

httpd_builtin_scripting --> on

httpd_can_check_spam --> off

httpd_can_connect_ftp --> off

#以下省略

3.6 开关一个布尔型规则

命令基本用法

setsebool [选项]

选项功能-P重启依然生效

用法举例

开启 httpd_anon_write 规则。

setsebool -P httpd_anon_write on

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

命令基本用法

semanage fcontext -a -t “(/.*)?”

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

用法举例

为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。

semanage fcontext -a -t httpd_sys_content_t “/usr/share/nginx/html2(/.*)?”

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

命令基本用法

semanage port -a -t -p

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

用法举例

为 Nginx 需要使用 10080 的端口用于 HTTP 服务。

semanage port -a -t http_port_t -p tcp 10080

四、SELinux 错误分析和解决

4.1 认识 SELinux 日志

当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。

这时候我们就需要借助 SELinux 违规日志来分析解决。

SELinux 违规日志保存在 /var/log/audit/audit.log 中。

/var/log/audit/audit.log 的内容大概是这样的。

type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1

type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg=‘op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=“root” exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success’

该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。

4.2 使用sealert分析错误

命令基本用法

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

执行完命令之后,系统需要花一段时间去分析日志中的违规行为并给出分析报告。

五、selinux 开关

selinux策略模式

targeted:针对网路服务限制较多,针对本机限制较少,默认为这个策略。

strict:完整的SELinux 限制,限制方面较为严格。

selinux三种模式

enforcing:强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了。

permissive:宽容模式,代表SELinux运作中,不过仅会有警告讯息并不会实际限制domain/type的存取.这种模式可以运来作为SELinux的debug之用(看下什么原因导致无法访问)。

disabled:关闭模式

查询当前selinux模式

代码语言:javascript
复制
getenforce

临时关闭

代码语言:javascript
复制
setenforce 0
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、SELinux 基本概念
    • 2.1 主体(Subject)
      • 2.2 对象(Object)
        • 2.3 政策和规则(Policy & Rule)
          • 2.4 安全上下文(Security Context)
          • 三、SELinux 基本操作
            • 3.1 查询文件或目录的安全上下文
              • 3.2 查询进程的安全上下文
                • 3.3 手动修改文件或目录的安全上下文
                  • 3.4 把文件或目录的安全上下文恢复到默认值
                    • 3.5 查询系统中的布尔型规则及其状态
                      • 3.6 开关一个布尔型规则
                        • 3.7 添加目录的默认安全上下文
                          • 3.8 添加某类进程允许访问的端口
                          • 四、SELinux 错误分析和解决
                            • 4.1 认识 SELinux 日志
                              • 4.2 使用sealert分析错误
                              • 五、selinux 开关
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档