65 【网络安全一百问-93】Linux的Selinux是什么?如何设置Selinux?

请先 登录 后评论

8 个回答

我网神的

Selinux是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

SELinux有3种配置模式:enforcing 是强制启用安全策略模式,拦截服务的不合法请求。permissive 是遇到服务越权访问时,只发出警告而不强制拦截。disabled 对于越权的行为不警告也不拦截。配置文件是 /etc/selinux/config,在这个配置文件中,如果 SELINUX 不等于 enforcing,就将其修改为 enforcing,表示启用SELinux,保护系统更安全。

请先 登录 后评论
小黄鸭_23

SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux的实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。

openEuler默认使用SELinux提升系统安全性。SELinux分为三种模式:

permissive:SELinux仅打印告警而不强制执行。

enforcing:SELinux安全策略被强制执行。

disabled:不加载SELinux安全策略

请先 登录 后评论
Hacker001

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

SELinux开启的前提下,设置运行状态为enforcing模式:

# setenforce 1

# getenforce

Enforcing

SELinux开启的前提下,设置运行状态为permissive模式:

# setenforce 0

# getenforce

Permissive

SELinux开启的前提下,设置当前SELinux运行状态为disabled(关闭SELinux,需要重启系统)。

修改SELinux配置文件/etc/selinux/config,设置“SELINUX=disabled”。

# cat /etc/selinux/config | grep "SELINUX="

SELINUX=disabled

重启系统:

# reboot

状态切换成功:

# getenforce

Disabled


请先 登录 后评论
空城 - 安全小菜鸡
  1. 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
  2. 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
  3. 有三种工作模式,分别是:enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。disabled:关闭 SELinux。
  4. SELinux 工作模式可以在 /etc/selinux/config 中设定。如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
请先 登录 后评论
Bains

什么是SELinux

安全增强型 Linux(SELinux)是一种采用安全架构的 Linux® 系统,它能够让管理员更好地管控哪些人可以访问系统。它最初是作为 Linux 内核的一系列补丁,由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成。

如何设置SELinux

您可以通过多种方式来配置 SELinux,以保护您的系统。最常见的是目标策略或多级安全防护(MLS)。

目标策略为默认选项,它涵盖了多种流程、任务和服务。MLS 则极为复杂,通常只有政府机构才会使用。

您可以查看 /etc/sysconfig/selinux 文件,以判断系统所采用的配置方式。该文件中有一部分会显示 SELinux 是处于允许模式、强制模式还是处于禁用状态,以及要加载哪个策略。


请先 登录 后评论
景山

1、Linux的Selinux是什么?

SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)开发的一种强制访问控制机制。它主要整合在 Linux 内核当中,是针对特定的进程与指定的文件资源进行权限控制的系统。主要是增强传统 Linux 操作系统的安全性,并解决传统 Linux 系统中自主访问控制(DAC)系统中的各种权限问题(如 root 权限过高等)。


2、如何设置Selinux?

 参考命令:

一、开启/关闭selinux

attach-3ef6afcca8d7f86876c5bfd62e0f20fc426df4e2.png

getenforce:查看selinux运行状态

setenforce 0 :关闭selinux

setenforce 1 :开启selinux

系统启动时默认开启或关闭编辑文件/etc/selinux/config进行设置

attach-dd2fc94e5023d6f9af6341526be00c1bdab4d191.png


enforcing  开启

disabled   关闭

permissive 警告但不拦截

二、配置selinux

1、     标记目录的selinux权限

attach-48716632e9aed375f1abdb8c545c2bdb919cfc0d.png


格式:semanage fcontext –a –t  标签名 目录名

 标签名如 samba_share_t(允许samba读写) httpd_sys_content_t(允许http进程读写)等,都是固定的。这里的标签名也叫selinux安全上下文。

 目录名的书写格式 /common(/.*)?    代表/common下的所有文件

 -a 添加     -t 规则类型为selinux上下文    这两个参数都会带

2、刷新目录的selinux权限

attach-a3a83ca2aa7207c602073c3629360cbbc8cf5b11.png

格式:restorecon –Rv 目录名

参数R:递归,目录下的所有文件均执行

参数v:将结果显示在屏幕

3、ls –Z 查看结果

attach-49d7aebeb33e8de5604cd874540be13324428992.png

请先 登录 后评论
小迪迦

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

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

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

如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。

掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。

本文均在 CentOS 7.4.1708 系统中操作。

本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢!

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

2.1 SELinux 的作用

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

设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?

SELinux 就是来解决这个问题的。

2.2 DAC

在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。

只要访问这个资源的进程符合以上的条件就可以被访问。

而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。

这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

2.3 MAC

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

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

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

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

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

下文中的操作均为 MCS 模式。

2.4 DAC 和 MAC 的对比

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

三、SELinux 基本概念

3.1 主体(Subject)

可以完全等同于进程。

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

3.2 对象(Object)

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

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

3.3 政策和规则(Policy & Rule)

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

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

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

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

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

1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。

2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。

3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。

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

3.4 安全上下文(Security Context)

安全上下文是 SELinux 的核心。

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

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

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

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

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

安全上下文的结构及含义

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

3.5 SELinux 的工作模式

SELinux 有三种工作模式,分别是:

1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。

2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。

3. disabled:关闭 SELinux。

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

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

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

需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。

SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。

3.6 SELinux 工作流程

注:上面的安全文本指的就是安全上下文。

四、SELinux 基本操作

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

命令基本用法

ls -Z

用法举例

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

ls -Z /etc/hosts

执行结果

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

4.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

4.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

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

命令基本用法

restorecon [选项] [...]

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

用法举例

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

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

4.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

#以下省略

4.6 开关一个布尔型规则

命令基本用法

setsebool [选项]

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

用法举例

开启 httpd_anon_write 规则。

setsebool -P httpd_anon_write on

4.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(/.*)?"

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

命令基本用法

semanage port -a -t -p

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

用法举例

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

semanage port -a -t http_port_t -p tcp 10080

五、SELinux 错误分析和解决

5.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 软件包)。

5.2 使用sealert分析错误

命令基本用法

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

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


请先 登录 后评论
hqymaster

SELinux(Security-Enhanced Linux)是一个安全性增强的 Linux 内核安全模块,用于实现强制访问控制(MAC)机制。它通过强制规则来限制程序对系统资源(如文件、进程、网络端口等)的访问,从而提高系统的安全性。

设置 SELinux 可以通过以下步骤完成:

  1. 检查 SELinux 状态:首先,你需要确认 SELinux 的当前状态。可以使用以下命令来检查:

    bashCopy Code
    sestatus

    如果 SELinux 已经安装并启用,该命令将显示 SELinux 的当前状态以及其是否启用。

  2. 安装 SELinux(如果需要):在某些 Linux 发行版中,默认可能没有安装 SELinux。你可以使用发行版特定的包管理工具来安装 SELinux。

  3. 配置 SELinux 策略:SELinux 的配置文件位于 /etc/selinux/config。你可以编辑此文件来配置 SELinux 的模式和策略。主要有三种模式:

    • Enforcing:强制模式,所有规则将被强制执行。
    • Permissive:宽容模式,所有规则会被记录但不强制执行,用于调试。
    • Disabled:禁用 SELinux。

    若要设置 SELinux 为强制模式,可以编辑 /etc/selinux/config 文件,并将 SELINUX= 的值设置为 enforcing。

  4. 管理 SELinux 规则:SELinux 使用策略来定义规则。你可以使用工具如 semanage、setsebool、semanage 等来管理 SELinux 规则。例如,你可以使用 semanage 来管理 SELinux 的端口策略。

  5. 重启系统:完成设置后,建议重新启动系统以应用新的 SELinux 配置。

请先 登录 后评论

相似问题