网络安全等级保护之SELINUX介绍连载之四(策略设置)

作者:Sender Su  来源:原创内容  发布日期:2022-03-10  最后修改日期:2022-03-10

  SELinux的策略设置主要是通过布尔开关控制。开关的方式使得修改SELinux设置的过程还是很简单的。但首先我们要按在《基础知识篇》中所描述的,安装好所有相关的包,否则没有命令可以操作。

article banner

笔者:国际认证信息系统审计师、软考系统分析师

  运行semanage命令可以查看到有什么可以修改的布尔开关:

semanage boolean -l | less

 

  输出内容包括了开关名称、当前状态、默认值和用途简介:

SELinux boolean                State  Default Description

privoxy_connect_any            (on   ,   on)  Allow privoxy to connect any
smartmon_3ware                 (off  ,  off)  Allow smartmon to 3ware
mpd_enable_homedirs            (off  ,  off)  Allow mpd to enable homedirs
xdm_sysadm_login               (off  ,  off)  Allow xdm to sysadm login
xen_use_nfs                    (off  ,  off)  Allow xen to use nfs
mozilla_read_content           (off  ,  off)  Allow mozilla to read content
ssh_chroot_rw_homedirs         (off  ,  off)  Allow ssh to chroot rw homedirs
mount_anyfile                  (on   ,   on)  Allow mount to anyfile
cron_userdomain_transition     (on   ,   on)  Allow cron to userdomain transition
xdm_write_home                 (off  ,  off)  Allow xdm to write home
openvpn_can_network_connect    (on   ,   on)  Allow openvpn to can network connect
xserver_execmem                (off  ,  off)  Allow xserver to execmem

 

  比如其中xen_use_nfs,用途是“是否允许XEN服务使用NFS网络共享”。在当前是处于关闭状态,即禁止这种访问行为,默认值也是关闭的。

 

  要修改设置,可以通过 setsebool 命令。例如一个(存在一定危险性的)设置叫“ftpd_anon_write”,是否允许匿名FTP用户写入文件,我们先查看其当前状态:

getsebool ftpd_anon_write
ftpd_anon_write --> off 

 

  因为实际生产需要,经慎重考虑和进行了其它防范措施后,我们打开这个设置:

setsebool ftpd_anon_write on

 

  随后再查看一次:

getsebool ftpd_anon_write
ftpd_anon_write --> on

 

  注意:修改后的布尔开关并不是永久的,系统重启后就会恢复原来的值。如果要把设置固化,需要在设置的同时带上-P参数。例如:

setsebool -P ftpd_anon_write on

 

  下面给出一些笔者在实际生产环境中碰到需要开启的设置,逐一介绍如下:

  允许反病毒软件扫描检查系统。设置如下:

setsebool -P antivirus_can_scan_system on

这是因为等级保护测评时都要求要安装杀毒软件。Linux发行版一般都带有clamav杀毒软件,安装后会设置cronjob定期扫描系统。但如果不开启这个布尔开关,clamscan程序就无法扫描读取所有文件,然后报错。有些发行版会把这个设置名称改为 clamscan_can_scan_system ,需要注意。

  注:clamav的误报是实在厉害,只能用来检查,绝对不能设置自动清除。本号会另外介绍CLAMAV在生产实际中的部署。

  允许反病毒软件clamav使用jit引擎进行查杀:

setsebool -P clamd_use_jit on

因为clamscan使用jit引擎时会占用CPU资源,有可能被恶意利用。所以这个设置可以控制clamscan的行为。

  允许logwatch服务通过网络发送邮件:

setsebool -P logwatch_can_network_connect_mail on

logwatch定时运行,扫描各种日志并产生摘要邮件发给root用户(或指定用户)。这个设置用于允许logwatch对本服务器之外的邮件地址发送邮件。这个做法存在一定风险性,比如错误地把信息发给了不相关的人。

  允许httpd服务发送邮件:

setsebool -P httpd_can_sendmail on

httpd即apache,允许发送邮件有可能由于邮件堵塞之类问题而导致httpd的服务效能下降,也有可能错误发送邮件导致信息外泄。

  允许httpd服务连接网络、连接数据库。

setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_connect_db on

如果不开启,会导致PHP程序出现类似这样的错误:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Permission denied'

所以只要用了PHP就必须开了。

  设置SAMBA服务的共享是可读写

setsebool -P samba_export_all_rw on

设置SAMBA服务的共享是只读

setsebool -P samba_export_all_ro on

以上两个一般同时开,也就是具体的共享目录究竟是读写还是只读,交回给SAMBA自己根据配置文件去判断和控制。

  以下四个设置都有一定风险,所以一般不开,仅作为说明。第一个是设置SAMBA服务默认共享用户的主目录(仿照WINDOWS的做法)

setsebool -P samba_enable_home_dirs on

设置SAMBA服务可以为用户创建主目录,如果发起访问的用户名的主目录未创建时:

setsebool -P samba_create_home_dirs=1

设置Linux可以使用远端的SAMBA共享目录作为本机用户的主目录:

setsebool -P use_samba_home_dirs=1

设置SAMBA可以把NFS共享目录作为SAMBA的共享目录:

setsebool -P samba_share_nfs=1

  设置系统可以运行NIS服务:

setsebool -P nis_enabled on

NIS服务即Network Information Service,用于在网络上的系统之间共享重要信息,而这些重要信息在服务器内通常是平直的纯文本。这个选项一般在服务器运行了监控程序时需要启用。

  运行httpd服务使用nfs方式访问文件:

setsebool -P httpd_use_nfs on

和允许SAMBA使用NFS共享目录同样道理,这个设置有一定风险,要严格控制,笔者仅用于实现内网YUM仓库的httpd服务。

  设置GIT可以使用NFS

setsebool -P git_system_use_nfs on

基本上对NFS共享的限制的道理都是一样的,不再赘述。

  最后要介绍一下如何排查服务或程序出错,是否被SELinux拦截所导致。排查方法是检查审计日志/var/log/audit/audit.log。注意审计日志本身是二进制编码而不可直读的,需要通过audit2why命令转换为可读内容,比如:

audit2why < /var/log/audit/audit.log

如果没有任何输出,那就是没有异常情况。

  但如果有输出,则需要仔细观察。例如下面的输出内容(为方便阅读,做了换行):

type=AVC msg=audit(1556285271.219:351): avc:  denied  { getattr } for  pid=15790 comm="httpd" 
path="/var/www/mirrors/centos/7/centosplus/x86_64/repodata/4cb48cde2c2bbe00ffa303766009f7b41706409d75dda8673e03afdd06ea7a4d-filelists.sqlite.bz2" 
dev="0:42"
ino=844424930310159
scontext=system_u:system_r:httpd_t:s0
tcontext=system_u:object_r:nfs_t:s0
tclass=file permissive=0
        Was caused by:
        One of the following booleans was set incorrectly.
        Description:
        Allow httpd to use nfs


        Allow access by executing:
        # setsebool -P httpd_use_nfs 1
        Description:
        Allow git to system use nfs


        Allow access by executing:
        # setsebool -P git_system_use_nfs 1这个例子,就是httpd想访问笔者设置在网络NFS共享上的YUM仓库,但被SELinux规则拦截的实际情况。

可以发现是没有允许httpd服务、git服务使用nfs共享。我们从审计日志也可以了解到,需要开启什么设置才能实现允许访问。一般地,按提示修改布尔开关就可以了。

  但最关键的是,在打开开关前,要想清楚是否必须打开,打开了会有什么连带产生的不安全因素,如何防止或避免这些不安全因素。

本栏目相关
  •  2024-07-06 解读即将实施的 GB/T 43698-2024 《网络安全技术 软件供应链安全要求》(上篇)
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-03-11 安装RHEL/CentOS时如何选择配置安全策略?
  •  2022-08-28 网络攻防中的色彩象征
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  •  2022-03-17 详细了解微软安全合规工具包(SCT)
  •  2022-03-28 如何应用CIS互联网安全中心发布的《CIS关键安全控制措施集》之一:总览
  •  2023-01-06 MSSQL数据库自动备份和自动复制转移备份
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码: