Selinux

Selinux:强制访问控制的安全模块,linux内核2.6版本后集成在内核中。

    selinux的四种工作类型:

            strict:centos5中,每隔进程都受到selinux的控制,策略认识就允许,不认识就拒绝。

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

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

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

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

            selinux 不同策略及违反策略后的动作:

[email protected]  ~ # cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.   ###违反策略就拒绝
#     permissive - SELinux prints warnings instead of enforcing.    ###违反策略就警告
#     disabled - No SELinux policy is loaded.        ###违反策略不做处理
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted         ###默认工作类型

            setenforce 0 将当前模式由 enforcing 由切换到permissive,临时更改,更改后文件里面还是默认值enforcing(该命令不能切换到disable,如需更改需要修改配置文件,然后重启),setenforce 1切换成enforcing。

[email protected]  ~ # setenforce 0
[email protected]  ~ # sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

            selinux的启用与禁用:

                        禁用方法1、将/etc/selinux/config 文件中的SELINUX=enforcing状态改为disable,重启。    

                        禁用方法2、在/boot/grub/grub.cof 文件中在内核参数处添加,selinux=0,重启

                        注意:在这两个文件中,只要有一个禁用就禁用。

            查看当正在生效的策略:getenforce

[email protected]  ~ # getenforce
Enforcing

            查看当前策略设置的详细信息:sestatus

[email protected]  ~ # sestatus
SELinux status:                 enabled    
SELinuxfs mount:                /selinux
Current mode:                   enforcing    ###当前生效的
Mode from config file:          enforcing    ###/etc/selinux/config文件中的设置状态
Policy version:                 24
Policy from config file:        targeted    ###工作类型

selinux安全上下文:

                传统linux中,一切皆文件,由用户,组,权限控制访问。

                在selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问。

                所有文件和端口资源的进程都具备安全标签,安全上下文(security context)

                查看安全上下文信息:ls -Z;ps -Z

                期望(默认)上下文:存放在二进制的Selinux策略库中

                              semanage fcontext -l

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

                            user:role:type:sensitivty:category

                            user_u:object_r:tmp_t:s0:c0

                五元素详解:

                            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:对于特定的组织划分不分层的分类,一个对象可以有多个categroy,c0-c1023共1024个分类,target策略不使用category。

-rwxr-xr-x. root root system_u:object_r:admin_home_t:s0 install.log.syslog
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 ks.cfg
drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 公共的


selinux策略

                对象(object):所有可以读取的对象,包括文件,目录和进程,端口等。

                主体:进程成为主体(subject)

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

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

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

                  举例:

                           1、 A主机开启http服务,在/var/html/index.html该网页其他主机可以正常访问,现在将index

。html,做如下操作:a、cp index.html /root

                                  b、mv  /root/index.html ./

                             此时,其他主机就不能正常访问了。

                             原因:标签发生变化导致,服务被拒绝。

[email protected]  /var/www/html # ll -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index2.html

[email protected]  ~ # semanage fcontext -l |grep "/var/www"
/var/www(/.*)?                                     all files          system_u:object_r:httpd_sys_content_t:s0 
/var/www(/.*)?/logs(/.*)?                          all files          system_u:object_r:httpd_log_t:s0

                      注意:拷贝到哪里就会继承其父目录的标签,mv移动会保留原父目录的标签,所以,第二步cp就不会出现该问题了。

                          2、 此时系统任务http服务放在/var/www/html目录中,如果想改成/website 目录中,则首先要修改vim /etc/httpd/conf/httpd.conf,Document Root "/var/www/html" 改成/website ,重启服务,由于/website是我们自己创建的,在策略数据库中是查不到的,因此需要 chcon –reference /var/www/html/ /website (不能使用restorecon,因为数据库中没有,加到数据库中才可以使用),重启服务就可以访问了。

       如何查看文件或端口录原有的标签是什么呢?——  semanage fcontex | port -l(数据库中查找)

       如果文件的标签发生变化,如何恢复为默认值呢?—–restorecon fileName (通过查找semanage数据库恢复默认的标签 )

                                                                                 —–restorecon -R dirName 恢复目录及其里面所有文件的默认标签

       知道标签名,如何手动修改?———— chcon -t default_t fileName

       参考前面文件的标签进行修改——————chcon -R –reference dirName1 dirName2

       策略数据库中添加或删除文件或目录————semange fcontext -a -t http_sys_content_t "/website(/.*)?"

                                                                      ——semange fcontext -d -t http_sys_content_t "/website(/.*)?"

                                                                      ——(/.*)?—-指该目录下的任意文件或目录

       策略数据库中添加端口号————-semanage port -a -t http_prot -p tcp 8888 将8888加入到策略数据库中

       修改策略数据库中的端口号给别的端口–semanage prot -m -t ssh_prot_t -p tcp 8888 将原来的http的8888端口号给ssh


selinux布尔值

            有些服务或行为系统认为是危险的就拒绝,比如ftp上传默认是不允许的,下载是可以的,这些行为就是由bool值控制的

            查看bool值命令:getsebool  -a 、semanage boolean -l 、

[email protected]  ~ # getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off            ###ftp上传权限被拒绝
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
[email protected]  ~ # semanage boolean -l | grep ftp
SELinux 布尔值                    状态  默认      描述
sftpd_enable_homedirs          (关    ,    关)  Allow sftpd to enable homedirs
httpd_can_connect_ftp          (关    ,    关)  Allow httpd to can connect ftp
ftpd_use_passive_mode          (关    ,    关)  Allow ftpd to use passive mode
ftpd_use_nfs                   (关    ,    关)  Allow ftpd to use nfs
ftpd_connect_all_unreserved    (关    ,    关)  Allow ftpd to connect all unreserved
sftpd_full_access              (关    ,    关)  Allow sftpd to full access
ftpd_anon_write                (关    ,    关)  Allow ftpd to anon write
状态:当前状态
默认:值文件中的设置

            设置selinux布尔值:

                   setsebool httpd_can_network_relay =1  设置httpd_can_network_relay 状态为1(临时生效)
                   setsebool -P httpd_can_network_relay on|off  设置httpd_can_network_relay 状态和默认值都为1(永久有效)
                   semanage boolean -l -C  查看改过的boolean值

        

                        

                    

原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/47359

(0)
NarutoNaruto
上一篇 2016-09-18 02:08
下一篇 2016-09-18 12:25

相关推荐

  • 马哥教育网络班21期+第17周课程练习

    1、结合图形描述LVS的工作原理; lvs是基于内核的虚拟主机用来做四层的负载均衡,工作在netfilter框架的INPUT链上,有四种模式,上图为lvs-nat lvs-nat:有DNAT功能,支持端口映射,请求报文和响应报文都需要经过Director 请求过程:cip–>vip,Director,cip–>rip 响应…

    Linux干货 2016-12-26
  • linux的各种小命令和目录

    linux的各种小命令   pwd 显示当前工作的目录   w who whoami 显示当前用户及已建立的ssh链接   useradd 新建一个普通用户   passwd 修改用户的密码   # 代表当前工作的是root 超级用户   $ 代表当前工作的普通用户 &…

    Linux干货 2017-03-27
  • mysql基础概念笔记 part1

    mysql基础概念笔记     part1#wmd-preview h1 { color: #0077bb; /* 将标题改为蓝色 */} mysql基础概念笔记     part1 mysql 基础概念 基础原理,逻辑架构,事务,并发控制,读写锁 1、前言     作为一个运维…

    Linux干货 2016-09-19
  • Python入门之迭代,列表解析,生成器及文件操作

    迭代器是访问集合元素的一种方式,迭代器包含了__iter__()(返回迭代器对象本身)next()(返回迭代器的下一个元素)迭代器只能往前不会退后 以下类型支持迭代 序列类型:list,str,tuple 非序列类型:dict,file 自定义类 通过内建的函数iter()或对象自带方法__iter__可以获取迭代器对象 l1=range(5) iter1=…

    Linux干货 2015-12-13
  • CentOS 5.0系统启动流程

    注:CentOS系统5.x,6.x和7.x的启动流程不同,所以本文仅讨论CentOS 5.x的启动流程。 1. POST加电自检 服务器在开机之后首先会先进行硬件的检测,在开机界面我们可能会看到检测硬盘,cpu或raid卡等信息,此界面即硬件自检界面。 2. BIOS引导 BIOS(BootSequence)用于通过指定的引导装置引导系统启动。 3. Boo…

    2017-05-14
  • N25_第十一周的作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。 3、描述DNS查询过程以及DNS服务器类别。          第一段:主机到运营商的DNS服务器(递归)    &nbs…

    Linux干货 2017-02-22