关于内核:SELinux入门学习总结

34次阅读

共计 13203 个字符,预计需要花费 34 分钟才能阅读完成。

前言

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

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

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

如果能够熟练掌握 SELinux 并正确使用,我感觉整个零碎基本上能够达到“坚不可摧”的境地了(请永远记住没有相对的平安)。

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

一、基本概念

1、TE 模型的平安上下文

所有的操作系统访问控制都基于主体、客体,以及与他们相干的访问控制属性。

在 selinux 中,访问控制属性叫做平安上下文。所有对象 (文件、过程间通信通道、套接字、网络主机等) 和主体 (过程) 都有一个与之关联的平安上下文。

一个平安上下文蕴含三个元素:用户(user)、角色(role)和类型标识符(type identifiers)

平安上下文的模式如下:user:role:type

对过程来说:别离示意用户、角色、类型标识符也被称为域

对客体来说:前两项根本没有理论用处,role 通常为 object\_r,user 通常位创立这个对象的过程的 user,对访问控制没有影响

总结:

SELinux 是通过 MAC(Mandatory Access Control)形式来控管过程,它管制的主体是过程,而指标则是该过程是否读取的”文件资源”。

主体

SELinux 次要是想管理控制过程。

注 *:为了不便了解,如无特地阐明,以下均把过程视为主体。

指标

主体过程是否拜访的”指标资源”个别是文件系统。

对象

被主体拜访的资源。能够是文件、目录、端口、设施等。

注 *:为了不便了解,如无特地阐明,以下均把文件或者目录视为对象。

策略

因为过程和文件的数量宏大,因而 SELiunx 会依据某些服务来制订根本的拜访安全性策略。

这些策略外部还有具体的规定来指定不同的服务凋谢某些资源的拜访与否。

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

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

一套政策外面有多个规定。局部规定能够依照需要启用或禁用(以下把该类型的规定称为布尔型规定)。

规定是模块化、可扩大的。在装置新的应用程序时,应用程序可通过增加新的模块来增加规定。用户也能够手动地增减规定。

SELINUX 参数值:

enforcing: 强制执行 SELinux 性能;

permissive: 只显示正告信息;

disabled: 停用 SELinux 性能。

SELINUXTYPE 参数值:

targeted: 针对网络服务限度较多,针对本机限度较少,是默认的策略;

strict: 残缺的爱护性能,包含网络服务、个别指令、应用程序,限度方面较为严格。

平安上下文

平安上下文是 SELinux 的外围。

平安上下文我本人把它分为「过程平安上下文」和「文件平安上下文」。

一个「过程平安上下文」个别对应多个「文件平安上下文」。

只有两者的平安上下文对应上了,过程能力拜访文件。它们的对应关系由政策中的规定决定。

文件平安上下文由文件创建的地位和创立文件的过程所决定。而且零碎有一套默认值,用户也能够对默认值进行设定。

须要留神的是,单纯的挪动文件操作并不会扭转文件的平安上下文。

平安上下文的构造及含意

平安上下文有四个字段,别离用冒号隔开。形如:system\_u:object\_r:admin\_home\_t:s0。

SELinux 的工作模式

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

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

permissive:宽容模式。违反 SELinux 规定的行为只会记录到日志中。个别为调试用。

disabled:敞开 SELinux。

SELinux 工作模式能够在 /etc/selinux/config 中设定。

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

enforcing 和 permissive 模式能够通过 setenforce 1|0 命令疾速切换。

须要留神的是,如果零碎曾经在敞开 SELinux 的状态下运行了一段时间,在关上 SELinux 之后的第一次重启速度可能会比较慢。因为零碎必须为磁盘中的文件创建平安上下文。

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

SELinux 工作流程

显示平安上下文

加上 - Z 能显示主体、客体的上下文

ls - Z 能显示文件系统的平安上下文

ps - Z 能显示过程的平安上下文

id - Z 能显示 shell 的平安上下文:joe:usr\_r:usr\_t

2、TE 访问控制

在 SELinux 中,默认时没有容许规定的,也没有超级用户。被容许的拜访必须由规定给出。

一条规定如下:

allow Source type(s) Target type(s): Object class(es) Permission(s)

比方这样的拜访规定:

allow user\_t bin\_t : file {read execute getattr};

示意容许域为 user\_t 的过程对 type 为 bin\_t 的文件具备读、执行、失去属性的操作

3、角色的作用

SELinux 也提供基于角色的访问控制

通过以下语句指定 role 的 type:

role user\_r type passwd\_t;

如果没有以上这条语句,则:

平安上下文 joe:user\_r:passwd\_t 则不能被创立

exec 调用则失败,即使策略容许

二、架构

1、内核架构

基于 LSM(linux security module),为所有的内核的资源提供强制访问控制

注 *:LSM(linux security module)一种轻量级的平安访问控制框架,次要利用 Hook 函数对权限进行访问控制,并在局部对象中内置了通明的平安属性。

LSM 提供了一系列的钩子函数

如果拜访被 DAC 回绝,则会影响审计后果

SELinux 的架构如下所示:

策略决定蕴含在平安服务器中,与具体架构无关,便于移植

对象管理者时各对象的管理者,在 LSM 架构中,是一系列的 LSM 钩子,遍布在内核的子系统中。

注 *:Linux 平安模块(LSM)提供的接口就是钩子,其初始化时所指向的虚构函数实现了缺省的传统 UNIX 超级用户机制,模块编写者必须从新实现这些钩子函数来满足本人的安全策略。

2、用户空间的对象管理器

SELinux 反对将对象管理器放到用户态,应用内核的对象治理策略服务器来治理用户态的对象

然而,反对用户空间的对象管理器有一些弱点:

对于 TE 模型,还须要定义 class

对于对象管理器的管理策略不再内核之中

策略服务架构如下:

AVC 示意各种缓存

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

1 SELinux 的作用

SELinux 次要作用就是最大限度地减小零碎中服务过程可拜访的资源(最小权限准则)。

构想一下,如果一个以 root 身份运行的网络服务存在 0day 破绽,黑客就能够利用这个破绽,以 root 的身份在您的服务器上随心所欲了。是不是很可怕?

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

2 DAC

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

只有拜访这个资源的过程合乎以上的条件就能够被拜访。

而最致命问题是,root 用户不受任何管制,零碎上任何资源都能够无限度地拜访。

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

3 MAC

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

这样一来,即便过程是以 root 身份运行的,也须要判断这个过程的类型以及容许拜访的资源类型能力决定是否容许拜访某个资源。过程的流动空间也能够被压缩到最小。

即便是以 root 身份运行的服务过程,个别也只能拜访到它所须要的资源。即便程序出了破绽,影响范畴也只有在其容许拜访的资源范畴内。安全性大大增加。

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

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

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

4 DAC 和 MAC 的比照

这里援用一张图片来阐明。

能够看到,在 DAC 模式下,只有相应目录有相应用户的权限,就能够被拜访。而在 MAC 模式下,还要受过程容许拜访目录范畴的限度。

四、SELinux 基本操作

1 查问文件或目录的平安上下文

命令根本用法

ls - Z 能显示文件系统的平安上下文

ps - Z 能显示过程的平安上下文

id - Z 能显示 shell 的平安上下文:joe:usr\_r:usr\_t

用法举例

查问 /etc/hosts 的平安上下文。

ls -Z /etc/hosts

执行后果

[root@localhost ~]# ls -Z /etc/hosts
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/hosts
[root@localhost ~]# 

2 查问过程的平安上下文

命令根本用法

ps auxZ | grep -v grep | grep < 过程名 >

用法举例

查问 Nginx 相干过程的平安上下文。

ps auxZ | grep -v grep | grep sshd

执行后果

[root@localhost ~]# 
[root@localhost ~]# ps auxZ | grep -v grep | grep sshd
system_u:system_r:sshd_t:s0-s0:c0.c1023 root 1454 0.0  0.0 112940 4324 ?        Ss   Sep03   0:00 /usr/sbin/sshd -D
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 11664 0.0  0.0 158944 5596 ? Ss 10:34   0:00 sshd: root@pts/0
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 11668 0.0  0.0 156812 5444 ? Ss 10:34   0:00 sshd: root@notty
[root@localhost ~]#

3 手动批改文件或目录的平安上下文

命令根本用法

chcon < 选项 > < 文件或目录 1> [< 文件或目录 2>…]

用法举例

批改 test 的平安上下文为 system\_u:object\_r:httpd\_sys\_content\_t:s0。

chcon -u system_u -r object_r -t httpd_sys_content_t html2/*



[root@localhost nginx]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0   html2
[root@localhost nginx]# ls -Z html2
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   404.html
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   50x.html
-rwxr-xr-x. root root unconfined_u:object_r:usr_t:s0   index.html
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   nginx-logo.png
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   poweredby.png

[root@localhost nginx]# chcon -u system_u -r object_r -t httpd_sys_content_t html2/*
[root@localhost nginx]# ls -Z html2
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 404.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 50x.html
-rwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 index.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 nginx-logo.png
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 poweredby.png
[root@localhost nginx]# 

4 把文件或目录的平安上下文复原到默认值

命令根本用法

restorecon [选项] < 文件或目录 1> [< 文件或目录 2>…]

用法举例

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

[root@localhost ~]# 
[root@localhost ~]# restorecon -R /root/test/
[root@localhost ~]# 
[root@localhost ~]# ls -Z 
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 test
[root@localhost ~]# 

5 查问零碎中的布尔型规定及其状态

命令根本用法

getsebool -a

因为该命令要么查问所有规定,要么只查问一个规定,所以个别都是先查问所有规定而后用 grep 筛选。

用法举例

查问与 httpd 无关的布尔型规定。

getsebool -a | grep ssh

执行后果

[root@localhost ~]# 
[root@localhost ~]# getsebool -a | grep ssh
fenced_can_ssh --> off
selinuxuser_use_ssh_chroot --> off
ssh_chroot_rw_homedirs --> off
ssh_keysign --> off
ssh_sysadm_login --> off
[root@localhost ~]#

6 开关一个布尔型规定

命令根本用法

setsebool [选项] < 规定名称 > <on|off>

用法举例

开启 httpd\_anon\_write 规定。

setsebool -P httpd\_anon\_write on

执行后果

[root@localhost ~]#  getsebool -a | grep ssh
fenced_can_ssh --> off
selinuxuser_use_ssh_chroot --> off
ssh_chroot_rw_homedirs --> off
ssh_keysign --> off
ssh_sysadm_login --> off
[root@localhost ~]# 
[root@localhost ~]# 

批改布尔型规定

[root@localhost ~]# setsebool -P ssh_sysadm_login on

[root@localhost ~]# 
[root@localhost ~]#  getsebool -a | grep ssh
fenced_can_ssh --> off
selinuxuser_use_ssh_chroot --> off
ssh_chroot_rw_homedirs --> off
ssh_keysign --> off
ssh_sysadm_login --> on
[root@localhost ~]# 
[root@localhost ~]# setsebool -P ssh_sysadm_login off
[root@localhost ~]# 
[root@localhost ~]#  getsebool -a | grep ssh
fenced_can_ssh --> off
selinuxuser_use_ssh_chroot --> off
ssh_chroot_rw_homedirs --> off
ssh_keysign --> off
ssh_sysadm_login --> off
[root@localhost ~]# 

配置文件目录即文件内容

[root@localhost booleans]# pwd
/sys/fs/selinux/booleans
[root@localhost booleans]# cat mpd_use_cifs
0 0

7 增加目录的默认平安上下文

命令根本用法

(如果提醒找不到命令的话请装置 policycoreutils-python 软件包,下同。)

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

8 增加某类过程容许拜访的端口

命令根本用法

semanage port -a -t < 服务类型 > -p < 协定 > < 端口号 >

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

用法举例

为 Nginx 须要应用 10080 的端口用于 HTTP 服务。

semanage port -a -t http\_port\_t -p tcp 10080

9 参考其它进行批改

命令根本用法

chcon –reference=< 源文件 >  < 要批改的文件 >

批改 1.txt 文件

[root@localhost html]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0   1.txt
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 404.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 50x.html
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 en-US -> ../../doc/HTML/en-US
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 img -> ../../doc/HTML/img
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 index.html -> ../../doc/HTML/index.h
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 nginx-logo.png
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 poweredby.png -> nginx-logo.png

执行后果

[root@localhost html]# chcon --reference=404.html 1.txt 
[root@localhost html]# 
[root@localhost html]# 
[root@localhost html]# ll -Z
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 1.txt
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 404.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 50x.html
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 en-US -> ../../doc/HTML/en-US
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 img -> ../../doc/HTML/img
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 index.html -> ../../doc/HTML/index.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 nginx-logo.png
lrwxrwxrwx. root root system_u:object_r:httpd_sys_content_t:s0 poweredby.png -> nginx-logo.png

10 批改后的权限,复原到原始的

命令根本用法

restorecon -v < 文件 >

[root@localhost files]# ls -Z /etc/yum.conf 
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/yum.conf
[root@localhost files]# 
[root@localhost files]# 
[root@localhost files]# chcon -t httpd_config_t /etc/yum.conf
[root@localhost files]# 
[root@localhost files]# ls -Z /etc/yum.conf 
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 /etc/yum.conf
[root@localhost files]# 

执行后果

[root@localhost files]# restorecon -v /etc/yum.conf 
restorecon reset /etc/yum.conf context system_u:object_r:httpd_config_t:s0->system_u:object_r:etc_t:s0
[root@localhost files]# ls -Z /etc/yum.conf 
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/yum.conf
[root@localhost files]# 

11 查看身份角色相似

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



[root@localhost ~]# seinfo [选项]
选项:-u:列出 SELinux 中所有的身份(user);-r:列出 SELinux 中所有的角色(role);-t:列出 SELinux 中所有的类型(type);-b:列出所有的布尔值(也就是策略中的具体规定名称);-x:显示更多的信息;

五、SELinux 谬误剖析和解决

1 意识 SELinux 日志

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

这时候咱们就须要借助 SELinux 违规日志来剖析解决。

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

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

...

[root@localhost ~]# tailf /var/log/audit/audit.log
type=GRP_MGMT msg=audit(1630901844.207:878): pid=11979 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:groupadd_t:s0-s0:c0.c1023 msg='op=add-shadow-group id=994 exe="/usr/sbin/groupadd"hostname=? addr=? terminal=? res=success'
type=ADD_USER msg=audit(1630901844.247:879): pid=11984 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:useradd_t:s0-s0:c0.c1023 msg='op=add-user id=997 exe="/usr/sbin/useradd"hostname=? addr=? terminal=? res=success'
type=USER_MGMT msg=audit(1630901844.288:880): pid=11989 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:useradd_t:s0-s0:c0.c1023 msg='op=pam_tally2 reset=0 id=997 exe="/usr/sbin/pam_tally2"hostname=? addr=? terminal=? res=success'
type=SOFTWARE_UPDATE msg=audit(1630901844.314:881): pid=11968 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='sw="nginx-filesystem-1:1.20.1-2.el7.noarch"sw_type=rpm key_enforce=0 gpg_res=1 root_dir="/"comm="yum"exe="/usr/bin/python2.7"hostname=localhost.localdomain addr=? terminal=pts/0 res=success'
type=SOFTWARE_UPDATE msg=audit(1630901844.581:882): pid=11968 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='sw="nginx-1:1.20.1-2.el7.x86_64"sw_type=rpm key_enforce=0 gpg_res=1 root_dir="/"comm="yum"exe="/usr/bin/python2.7"hostname=localhost.localdomain addr=? terminal=pts/0 res=success'
type=USER_AVC msg=audit(1630904068.840:883): pid=1053 uid=81 auid=4294967295 ses=4294967295 subj=system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 msg='avc:  received policyload notice (seqno=7)  exe="/usr/bin/dbus-daemon"sauid=81 hostname=? addr=? terminal=?'
type=MAC_POLICY_LOAD msg=audit(1630904065.495:884): policy loaded auid=0 ses=76
type=SYSCALL msg=audit(1630904065.495:884): arch=c000003e syscall=1 success=yes exit=3881672 a0=4 a1=7f3cf9ca2000 a2=3b3ac8 a3=7ffd6fe646a0 items=0 ppid=12014 pid=12019 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=76 comm="load_policy" exe="/usr/sbin/load_policy" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=PROCTITLE msg=audit(1630904065.495:884): proctitle="/sbin/load_policy"
type=USER_MAC_CONFIG_CHANGE msg=audit(1630904068.901:885): pid=12014 uid=0 auid=0 ses=76 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='resrc=port op=add lport=10080 proto=6 tcontext=system_u:object_r:http_port_t:s0 comm="semanage"exe="/usr/bin/python2.7"hostname=? addr=? terminal=? res=success'

该文件的内容很多,而且混有很多与 SELinux 谬误无关的零碎审计日志。咱们要借助 sealert 这个实用工具来帮忙剖析(如果提醒找不到命令的话请装置 setroubleshoot 软件包)。

2 应用 sealert 剖析谬误

命令根本用法

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

执行完命令之后,零碎须要花一段时间去剖析日志中的违规行为并给出剖析报告。剖析报告的构造解说请看下图:

[root@localhost ~]# yum install setroubleshoot-server python3-pydbus

3  SELinux 谬误的思路

当发现一个服务呈现谬误的时候,请先检查一下 sealert 的剖析报告外面是否有该服务过程名称的关键字。如果没有,阐明不是 SELinux 造成的谬误,请往其余方面排查。

文件目录默认的权限在这个文件下,具体文件是 file\_contexts

/etc/selinux/targeted/contexts/files/

接下来就是浏览 sealert 的剖析报告了。

首先须要理解的就是违规起因。如果违规起因外面呈现了该服务不该拜访的文件或资源,那就要小心了。有可能是服务的配置有问题或者服务自身存在破绽,请优先排查服务的配置文件。

在剖析报告中,对于一个违规行为,通常会有 2~3 个解决方案。请优先选择批改布尔值、设置默认平安上下文之类操作简略、容易了解的解决方案。

如果没有这种操作简略、容易了解的解决方案,请先去搜索引擎搜寻一下有没有其余更好的解决方案。

须要留神的是,可信度只是一个参考值,并不代表应用可信度最高的解决方案就肯定能够解决问题。我个人感觉应用可信度越高的解决方案对系统的改变就越小。

不过请记住,在执行解决方案之前,肯定要先搞清楚解决方案中的命令是干什么的!

最初,请审慎应用 audit2allow 这个命令。这个命令的作用非常简单粗犷,就是强制容许所遇到的谬误而后封装成一个 SELinux 模块,接着让 SELinux 加载这个模块来达到打消谬误的目标。不是万不得已倡议不要轻易应用 audit2allow。

正文完
 0