SELINUX配置进阶

SELinux是美国国家安全局NSA(the National Security Agency)和SCC(Secure Computing Corporation)开发的linux的一个强制访问控制的安全模块。2000年以GNU GPL发布,linux内核2.6版本后集成在内核中。模型有两种:

DAC:Discretionary Access Control自由访问控制

MAC:Mandatory Access Control 强制访问控制

工作类型有四种:strict:centos5,每个进程都收到sellinux的控制;

targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务。

minimum:centos7,修改过的targeted,只对选择的网络服务;

mls:提供MLS(多级安全)机制的安全性

后两者稳定性不足,未加以应用。

4、传统Linux一切皆文件,由用户,组,权限控制访问在SElinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。所有文件和端口资源和进程都具备安全标签:安全上下文(security context)。安全上下文有五个元素组成:

user:role:type:sensitivity:category

user_u:object_r:tmp_t:s0:c0

实际上下文:存放在文件系统中,ls -Z可以查看文件的元素;ps -Z查看进程的。

期望上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中

semanage fcontext -l查看所有期望上下文

五个安全元素:User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程;

Role:定义文件、进程和用户的用途:文件:object_r,进程和用户:system_r

Type:指定数据类型,规则中定义何种进程类型访问何种文件;

Target策略基于type实现,多服务公用:public_content_t

sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret,一个对象有且只有一个sensitivity,分0-15级,s0最低,Target策略默认使用s0。

Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret,一个对象可以有多个category,c0-c1023共1024个分类,Target策略不是用category。

5、SElinux策略:对象:所有可以读取的对象,包括文件、目录和进程、端口等

主体,进程称为主体

SELinux中对所有的文件都赋予一个type的文件类型便签,对于多有的进程也赋予各自的一个domain的标签。Domain标签能够执行的操作由安全策略里定义。

当一个subject试图访问一个object,kernel中的策略执行服务器将建成AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问。

安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是的,并且定义了哪种行为是允许或拒绝。

6、SELinux帮助:yum -y install selinux-policy-devel

centos6中使用makewhatis同步数据库;在centos7中使用mandb同步数据库。

 

二、命令详解和事例

1、SELinux的状态:enforcing:强制,每个受限的进程都必然受限;

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

disabled:禁用。

2、getenforce 获取sellinux当前状态

sestatus 查看selinux状态

setenforce 0|1 设置为permissive或enforcing

[root@centos68 usb]# getenforce 

Enforcing

[root@centos68 usb]# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /selinux

Current mode:                   enforcing

Mode from config file:          enforcing

Policy version:                 24

Policy from config file:        targeted

[root@centos68 usb]# setenforce 0

[root@centos68 usb]# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /selinux

Current mode:                   permissive

Mode from config file:          enforcing

Policy version:                 24

Policy from config file:        targeted

[root@centos68 usb]# getenforce 

Permissive

配置文件:

/boot/grub/grub.conf使用selinux=0禁用selinux

/etc/sysconfig/selinux

/etc/selinux/config

所有的修改都无法直接生效,都必须重启之后生效。

3、给文件重新打安全标签:chcon [opt] [-u USER] [-r ROLE] [-t TYPE] FILE

-R递归设置

–reference=FILE 与此文件相同设置

[root@centos68 tmp]# ll -Z

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f3

[root@centos68 tmp]# chcon -u unconfined_u -r object_r -t default_t f1

[root@centos68 tmp]# ll -Z

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 f1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f3

[root@centos68 tmp]# chcon --reference=f2 f1

[root@centos68 tmp]# ll -Z 

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f3

恢复目录或文件默认的安全上下文:restorecon /PATH/FILE

查看默认的安全上下文,若没有默认安全上下文则无法设置:semanage fcontext -l

semanage来自policycoreutils-python包

添加安全上下文:semanage scontext -a -t httpd_sys_content_t ‘/testdir(/.*)?’

restorecon -Rv /testdir

删除安全上下文:semanage fcontext -d -t httpd_sys_content_t  ‘/testdir(/.*)?’

[root@centos68 tmp]# semanage fcontext -a -t default_t '/tmp(/.*)?'

[root@centos68 tmp]# ll -Z

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 f1

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f2

-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 f3

[root@centos68 tmp]# semanage fcontext -l | grep "/tmp(/.*)?"

/tmp(/.*)?     all files          system_u:object_r:default_t:s0 

[root@centos68 tmp]# restorecon -Rv /tmp

restorecon reset /tmp/f3 context unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:default_t:s0

restorecon reset /tmp/.ICE-unix context system_u:object_r:xdm_tmp_t:s0->system_u:object_r:default_t:s0

restorecon reset /tmp/f2 context unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:default_t:s0

[root@centos68 tmp]# ll -Z

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 f1

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 f2

-rw-r--r--. root root unconfined_u:object_r:default_t:s0 f3

[root@centos68 tmp]# semanage fcontext -d -t default_t '/tmp(/.*)?'

[root@centos68 tmp]# semanage fcontext -l | grep "/tmp(/.*)?"

对文件进行移动不改变安全标签;复制文件则改变便签。

4、端口便签:查看端口标签:semanage port -l

添加端口:semanage port -a -t port_label -p tcp|udp PORT

删除端口:semanage port -d -t port_label -p tcp|udp PORT

[root@centos68 tmp]# semanage port -a -t tftp_port_t -p udp  9527

[root@centos68 tmp]# semanage port -l | grep "tftp_port_t"

tftp_port_t                    udp      9527, 69

[root@centos68 tmp]# semanage port -d -t tftp_port_t -p udp 9527

[root@centos68 tmp]# semanage port -l | grep "tftp_port_t"

tftp_port_t                    udp      69

修改端口:semanage port -m -t port_label -p tcp|udp PORT

5、SElinux的布尔值:

查看bool值:getsebool -a

查看bool值,包括说明semanage boolean -l

查看修改过的布尔值:semanage boolean -l -C

设置bool值的命令:

setsebool BOOLEAN VALUE

0为开启,1为关闭;选项-P永久生效

[root@centos68 ~]# semanage boolean -l | grep virt_use_samba

virt_use_samba                 (关    ,    关)  Allow virt to manage cifs files

[root@centos68 ~]# setsebool virt_use_samba 1

[root@centos68 ~]# semanage boolean -l | grep virt_use_samba

virt_use_samba                 (开    ,    关)  Allow virt to manage cifs files

6、SELinux日志管理:yum install setroublesshoot*(重启生效)

将错误的信息写入/var/log/message

[root@centos68 ~]# grep setroubleshoot /var/log/messages

Sep 11 03:50:45 centos68 yum[4947]: Installed: setroubleshoot-server-3.0.47-11.el6.x86_64

Sep 11 03:50:47 centos68 yum[4947]: Installed: setroubleshoot-plugins-3.0.40-2.el6.noarch

Sep 11 03:50:48 centos68 yum[4947]: Installed: setroubleshoot-3.0.47-11.el6.x86_64

查看安全日志说明:

[root@centos68 ~]# sealert -l 0

Error

query_alerts error (1003): id (0) not found

扫描并分析日志:sealert -a /var/log/audit/audit.log

[root@centos68 ~]# sealert -a /var/log/audit/audit.log 

100% donefound 0 alerts in /var/log/audit/audit.log

 

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS