首页 > 代码库 > Selinux介绍

Selinux介绍

一、SElinux(Secure Enhanced Linux):安全增强的Linux

       SElinux是一个在内核中实践的强制访问控制(MAC)安全性机制,由美国国家安全局NSA(The National Security Agency)和SCC(Secure

Computing Corporation的)开发的针对计算机基础结构安全开发的一个全新的Linux安全策略机制。SELinux可以允许系统管理员更加灵活的来定义安全策略。

       SELinux是一个内核级别的安全机制,从Linux2.6内核之后就将SELinux集成在了内核当中,因为SELinux是内核级别的,所以我们对于其配置文件的修改都是需要重新启动操作系统才能生效的。

       现在主流发现的Linux版本里面都集成了SELinux机制,CentOS/RHEL都会默认开启SELinux机制。

二、DAC和MAC的区别  

DAC(Discretionary Access Control):自主访问控制

       DAC环境下的进程是无束缚的

MAC(Mandatory Access Control):强制访问控制

       MAC环境下的策略的规则决定控制的严格程度

       MAC环境下的进程是可以被限制的

       策略用来定义被限制的进程能够使用哪些资源(文件和端口)

       默认情况下,没有被明确允许的行为将被拒绝

三、SElinux模式

       Enforcing: 这个缺省模式会在系统上启用并实施 SELinux 的安全性政策,拒绝访问        及记录行动

       Permissive 在 Permissive 模式下,SELinux 会被启用但不会实施安全性政策,而        只会发出警告及记录行动。Permissive 模式在排除 SELinux 的问题时很有用

       Disabled SELinux 已被停用

       如何查看及设定当前系统上SElinux的工作模式:

              查看:getenforce     

              设定:setenforce [0|1];0表示设置为Permissive模式,1表示设置为Enforcing模式。此设定方式当前有效,重启系统后失效。

       技术分享

       SElinux配置文件:

       /etc/sysconfig/selinux。修改此文件后,需要重启系统才生效。

技术分享

四、Selinux策略

       在SELinux中,我们是通过定义策略来控制哪些域可以访问哪些上下文。SElinux策略分类:

       minimumCentOS7,修改过的targeted,只对选择的网络服务。

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

       minimum 和mls 稳定性不足,未加以应用

       strict每个进程都受到selinux的控制

       targeted目标型策略,仅有限个进程受到selinux的控制,只监控容易被入侵的进程。依赖保护常见的网络服务。CentOS/RHEL中采用的默认策略。

       使用sestatus命令查看当前使用的SElinux模式及配置文件中的配置:

技术分享

五、SElinux安全上下文

       在传统的linux中,一切皆文件,有用户、组、权限来进行访问控制。

       在SElinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。所有文件、资源端口和进程都具备叫做安全上下文(Security context)的标签。

如何查看文件的安全上下文:

       ll -Z /Path/to/somefile

技术分享

如何查看进程的安全上下文:

       ps -Z

技术分享

安全上下文由五个元素组成:

       user:role:type:sensitivity:category

技术分享

       user:指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统进程,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。

       role:object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色。

       type:文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限。

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

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

六、SElinux的配置

       1、临时配置:setenforce

       2、永久配置:vim /etc/sysconfig/selinux

       3、给文件或目录重新打安全标签

              chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...

              chcon [OPTION]... --reference=RFILE  FILE... 

                     常用选项

                            -R :递归打标

       例:在/var/www/html,新建了一个目录test,目录下的index.html文件的安全上下文类型为httpd_sys_content_t,现在修改ks.cfg、hello.txt的安全类型与index.html的类型一致。

技术分享

修改方法一:直接修改

]#chcon -t httpd_sys_content_t ks.cfg

技术分享

修改方法二:参考index.html文件修改hello.txt文件     

 ]#chcon --reference index.html hello.txt

技术分享

将test目录下的文件的角色都修改为system_u

]#chcon -R -u system_u test/

技术分享

       4、恢复目录或文件默认的安全上下文:

              estorecon [-R] /path/to/somefile

       5、默认安全上下文查询与修改

       使用semanager来管理。需要安装policycoreutils-python包

查看默认的安全上下文:]#semanage fcontext -l | grep httpd

技术分享

修改默认安全上下文:

semanager fcontext -a -t type file

例:修改random.txt的默认类型为,httpd_sys_content_t,之后恢复安全类型至默认类型

技术分享

删除默认安全上下文

semanager fcontext -d -t type file

七、Selinux端口标签

       1、查看端口标签

              semanage port –l

技术分享

       2、添加端口

              semanage port -a -t port_label -p tcp|udp PORT

       例:将9812端口添加为http_port_t的默认端口

              semanage port -a -t http_port_t -p tcp 9812

技术分享

       3、删除端口

              semanage port -d -t port_label -p tcp|udp PORT

              例:将9812端口从为http_port_t的默认端口中删除

semanage port -d -t http_port_t -p tcp 9812

技术分享

       4、修改

              semanage port -m -t port_label -p tcp|udp PORT

       例:将http_port_t的默认端口9812改为http_port_t的默认端口            

 semanage port -m -t http_port_t -p tcp 9812

技术分享

八、SElinux的布尔值

       可以通过布尔值微调 SELinux政策而不必重新编译政策的源代码。这些选项包括允许用户在 Samba下分享他们的主目录,或者允许Apache从用户的主目录伺服文件。否则这些都会被 SELinux 政策所拒绝。

       1、查看bool 命令:

              getsebool [-a] [boolean]

              semanage boolean –l

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

技术分享

  2设置bool 值命令:

              setsebool [-P] boolean value

              setsebool [-P] Boolean=value

技术分享

实战演练:

1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问。

查看是否启用selinux

技术分享

创建/website目录,并设置安全上下文

技术分享

技术分享

编辑httpd.conf文件,修改默认目录

]#vim /etc/httpd/conf/httpd.conf

技术分享

 

技术分享

2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问。

       修改httpd服务监听端口

       ]#vim /etc/httpd/conf/httpd.conf

技术分享

       将9527设置为httpd监听端口

技术分享

3、启用相关的SELinux布尔值,使上述网站的用户student的家目录可通过http访问。

技术分享

配置完成,清空防火墙策略,做访问测试。

技术分享

技术分享

 

 

附:一些常见的布尔类型释义   

allow_ftpd_full_accessFTP

容许 ftpd 全权访问系统

allow_ftpd_anon_writeFTP

容许 ftpd 将文件上载到置标为 public_content_rw_t 的目录

allow_ftpd_use_cifsFTP

容许 ftp 服务器在公开传输服务使用 cifs

allow_ftpd_use_nfsFTP

容许 ftp servers 在公开传输服务使用 nfs

allow_httpd_anon_writeHTTPD 服务)

容许 httpd 守护程序将文件写入置标为 public_content_rw_t 的目录

allow_httpd_mod_auth_pamHTTPD 服务)

容许 Apache 使用 mod_auth_pam.

allow_httpd_sys_script_anon_writeHTTPD 服务)

容许 httpd 脚本将文件写入置标为 public_content_rw_t 的目录

allow_smbd_anon_writeSamba

容许 Samba 将文件写入置标为 public_content_rw_t 的目录

allow_ssh_keysignSSH

容许 ssh 执行 ssh-keysign

SELinux 停止保护 clamscan

ftp_home_dirFTP

容许 ftp 在用户的主目录读/写文件

httpd_builtin_scriptingHTTPD 服务)

容许 HTTPD 支持内置脚本

httpd_can_network_connect_dbHTTPD 服务)

容许 HTTPD 脚本及模块通过网络与数据库连接

httpd_can_network_connectHTTPD 服务)

容许 HTTPD 脚本及模块与网络连接

httpd_can_network_relayHTTPD 服务)

容许 httpd 扮演中继器的角色

httpd_disable_transHTTPD 服务)

SELinux 停止保护 httpd 守护程序

httpd_enable_cgiHTTPD 服务)

容许 HTTPD 支持 cgi

httpd_enable_ftp_serverHTTPD 服务)

容许 HTTPD  ftp 服务器的身份去执行

httpd_enable_homedirsHTTPD 服务)

容许 HTTPD 阅读用户的主目录

httpd_rotatelogs_disable_transSELinux 服务保护)

SELinux 停止保护 httpd rotatelogs

httpd_ssi_execHTTPD 服务)

容许 HTTPD 在系统 CGI 脚本的同一本地里执行 SSI 执行档

httpd_suexec_disable_transHTTPD 服务)

SELinux 停止保护 http suexec

httpd_tty_commHTTPD 服务)

统一 HTTPD 与终端機的沟通。处理凭证时需用

httpd_unifiedHTTPD 服务)

统一 HTTPD 处理所有内容文件

Selinux介绍