selinux的管理

SElinux概述:

     SElinux(Security-enhanced Linux)是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统selinux称为内核级加强型防火墙;selinux的目的在于明确的指明某个进程可以访问那些资源(文件,网络端口等);传统linux中的文件,由用户、组、权限控制访问,而在selinux中的对象,由存在inde表的扩展属性域的安全元素所控制其访问。其主要作用就是最大限度地减小系统中服务进程可访问的资源。

1.selinux的状态的设定

 1)selinux的三种状态:

     

Enforcing   #强制模式,selinux已启动

permissive  #警告模式,selinux已启动,有提示警告信息,但不会禁止

Disabled    #关闭模式,关闭selinux

2)selinux的状态的修改:


临时性修改:

     setenforce 0   #设置selinux的状态为permissive

     setenforce 1   #设置selinux的状态为Enforcing

注意:此方法只能实现 permissive 状态 和 Enforcing 状态之间的转换

即当selinux的状态为 Disabled 时,用此方法不能更改为  permissive 状态或 Enforcing状态

永久性修改:

     通过修改配置文件来更改selinux的状态

具体操作步骤如下

  getenforce                           #查看selinux的状态

  vim /etc/sysconfig/selinux    #编辑配置文件,将Disabled改为Enforcing

 

  reboot          #必须重启,否则不生效

  getenforce    #查看selinux的状态是否更改成功

 

 2.selinux安全上下文的管理

  ls -Z  filename                                     #查看某个文件的安全上下文

 chcon -t public_content_t filename       #更改某个文件的安全上下文的类型为public_content_t

 semanage fcontext -a -t public_content_t '/westos(/.*)?'   #-a 添加;-t 类型;(/ 本身内容;.* 所有隐藏文件;)


配置环境:

 做实验之前,最好先重置虚拟机,以保持纯净的实验环境

注意:重置虚拟机后需要设定ip以及配置yum源

 getenforce                       #查看selinux的状态是否为Enforcing

##如果不是,则需要将selinux的状态永久性设定为Enforcing

 yum install lftp                 #安装lftp服务

 yum install vsftpd lftp -y   #安装ftp服务

 systemctl start vsftpd       #开启ftp服务

 systemctl enable vsftpd    #开机自启动

 systemctl stop firewalld    #关闭火墙

 systemctl disable firewalld #开机自动关闭


 

1)临时性更改

实验:

 touch /mnt/westos3

 mv /mnt/westos3 /var/ftp/   #移动文件

 ls /var/ftp/                           #查看文件

 lftp 172.25.254.230

 ls     #查看不到外来文件westos3

**************

drwxr-xr-x    2 0        0               6 Mar 07  2014 pub

 quit

 cd /var/ftp  

 touch file1

 lftp 172.25.254.230

 ls     #可以查看到file1

****************

-rw-r--r--    1 0        0               0 May 12 02:03 file1

drwxr-xr-x    2 0        0               6 Mar 07  2014 pub

 quit


 ##说明连接lftp时 ls查看的是默认目录/var/ftp里的内容,并且它只能查看到该在该默认目录中建立的文件,

 即无法查看到外来文件

 ls -Z              #查看所有文件的安全上下文 

****************

-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file1

drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub

-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   westos3

 semanage fcontext -l | grep /var/ftp      #内核记录过的安全上下文

****************

/var/ftp(/.*)?                                     all files          system_u:object_r:public_content_t:s0

........

 

 ls

 chcon -t public_content_t westos3  #更改westos3文件的安全上下文的类型为public_content_t

 ls -Z westos3 -d                             #查看westos3的安全上下文的类型是否更改成功

*********************

-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 westos3

 lftp 172.25.254.230

 ls                        #可查看到westos3

********************

-rw-r--r--    1 0        0             0 May 12 02:03 file1

drwxr-xr-x    2 0        0             6 Mar 07  2014 pub

-rw-r--r--    1 0        0             0 May 12 02:02 westos3

 quit


 mkdir /westos

 touch /westos/westosfile

 lftp 172.25.254.230

 ls                           #查看不到,默认只能查看到/var/ftp

 quit

 vim /etc/vsftpd/vsftpd.conf

#########

添加 anon_root=/westos       #更改lftp的默认目录为/westos


 systemctl restart vsftpd

 lftp 172.25.254.230

 ls

 quit

 setenforce 0     #警告

 lftp 172.25.254.230

 ls

******************            

-rw-r--r--    1 0        0               0 May 12 02:24 westosfile

 quit

 

 ls -Z /westos -d                                           #查看westos的安全上下文的类型

*****************

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos

 chcon -t public_content_t /westos -R           #修改westos的安全上下文的类型

 ls -Z /westos -d        #查看

*****************

drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /westos

测试:

 vim /etc/sysconfig/selinux                                   ##相当于重启selinux

#############

SELINUX=disabled  #将selinux的状态改为disabled

 reboot

 vim /etc/sysconfig/selinux    

############

SELINUX=enforcing #将selinux的状态改为enforcing

 reboot

 ls -Z /westos/ -d      #查看

******************

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos/  

#/westos的安全上下文的类型还原为idefault_t


##说明chcon -t public_content_t westos3 只是临时性更改安全上下文的类型


 2)永久性更改

 实验:

 ls -Zd /westos/                           ##对比一下/westos/ 和 /var/ftp/

****************    

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos/

 ls -Zd /var/ftp/                      

****************

drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp/

 semanage fcontext -l | grep /var/ftp   #有(/.*)?

******************         

/var/ftp(/.*)?                                     all files          system_u:object_r:public_content_t:s0  

 semanage fcontext -l | grep /westos/   #没有(/.*)?

 semanage fcontext -a -t public_content_t '/westos(/.*)?'   将 public_content_t 添加到 /westos 及 其子文件中

 semanage fcontext -l | grep /westos    #查看是否更改成功

##有(/.*)? 说明添加成功

********************

/westos(/.*)?                                      all files          system_u:object_r:public_content_t:s0

 restorecon -FvvR /westos/  #必须刷新,否则不生效

 ls -Z /westos/ -d                #查看是否更改成功

*******************

drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /westos/


测试:

 lftp 172.25.254.230

 ls

*****************

-rw-r--r--    1 0        0               0 May 12 01:59 westosfile

 quit

 touch /.autorelabel   #建立/.autorelabel文件,相当于重启selinux

 reboot

 ls -Zd /westos/         #再次查看

***************

drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /westos/

#/westos的安全上下文的类型任为public_content_t


##说明semanage fcontext -a -t public_content_t '/westos(/.*)?'

是永久性更改安全上下文的类型

3.管理linux布尔值

setenforce 0                               #有警告,但操作不会被阻止

setenforce 1                               #禁止,操作会被阻止

getsebool -a |grep ftp                 #查看目前系统上面的所有布尔值条款

setsebool -P ftp_home_dir on      #打开ftp的布尔值


实验:

setenforce的值更改为1时,上传也会成功但不安全,所以选择更改布尔值

 useradd westos

 passwd westos

 touch /etc/group

 lftp 172.25.254.230 -u westos

 ls       

 put /etc/group   #上传失败

***************

put: Access failed: 553 Could not create file. (group)

quit


 getsebool -a |grep ftp               #查看目前系统上面的所有布尔值条款

**************

ftp_home_dir --> off

 setsebool -P ftp_home_dir on    #打开ftp的布尔值

 getsebool -a |grep ftp               #再次查看

**************

ftp_home_dir --> on


测试:

 lftp 172.25.254.230 -u westos

 put /etc/group  #上传成功

 ls

***************

-rw-r--r--    1 1001     1001          878 May 12 03:54 group

 quit


 4.selinux日志的管理

/var/log/audit/audit.log     #记录selinux的日志,

##会说明错误,但不会提供解决方法,且阅读复杂

/var/log/messages            #记录selinux的日志,

##可以详细的记录错误,并且可提供解决方法

 具体操作步骤如下:

vim /etc/vsftpd/vsftpd.conf    #恢复ftp默认目录为/var/ftp/

###########

删除 anon_root=/westos

 systemctl restart vsftpd          #重启ftp服务

 touch /mnt/westos1

 mv /mnt/westos1 /var/ftp/

 > /var/log/audit.log               #清空日志

 > /var/log/messages

 cat /var/log/messages

 ls -Z /var/ftp/westos1


 firefox浏览器中输入ftp://172.25.254.230      ##测试出现问题,看不到刚建立的wetos1文件,因为它的安全上下文与/var/ftp不一致


 cat /var/log/audit/audit.log  ##可查看到selinux的日志

 cat /var/log/messages          ##可查看到解决方案

##此解决方案来自 setroubleshoot-server-3.2.17-2.el7.x86_64

*************

Then execute:

restorecon -v '$FIX_TARGET_PATH'



 restorecon -v  /var/ftp/*    #修改文件为能访问的默认标签

 ls -Z /var/ftp/westos1       #可以看到westos1的安全上下文已经被修改


 此时firefox浏览器中输入ftp://172.25.254.230测试,便可查看到刚才建立的westos1文件


 yum  remove setroubleshoot-server-3.2.17-2.el7.x86_64    #卸载



 touch /mnt/file2

 mv /mnt/file2/var/ftp

 > /var/log/messages           #清空日志

 > /var/log/audit/audit.log

 cat /var/log/messages


firfox里测试出现问题,看不到刚建立的file2文件

 cat /var/log/audit/audit.log    #记录selinux的日志


 cat /var/log/messages         #此时看不到解决方案


 yum install setroubleshoot-server-3.2.17-2.e17.x86_64

 cat /var/log/messages         #又可查看到解决方案



##说明此解决方案来自 setroubleshoot-server-3.2.17-2.el7.x86_64软件

 

5.修改进程访问的端口号

semanage port -l | grep 服务名称               #查看某个服务的端口

semanage port -a -t 类型 -p 协议 端口号    #添加某个端口号为指定服务的访问端口

例如:semanage port -l | grep http                               #查看http服务的端口

          semanage port -a -t http_port_t -p tcp 6666       #添加6666为http_port_t服务的访问端口

实验:

 yum install httpd         #安装阿帕启

#如果安装不了,则是yum源有问题,需要重新配置虚拟机的yum

 vim /etc/httpd/conf/httpd.conf

############

42 修改为 Listen 6666


 systemctl restart httpd   ##会报错

**************

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.


 getenforce                    #查看selinux的状态

 setenforce 0                  #警告

 systemctl restart httpd   #重启成功

 

 semanage port -l | grep http    #查看http的端口

******************

http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010

http_cache_port_t              udp      3130

http_port_t                         tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989


 semanage port -a -t http_port_t -p tcp 6666           #添加 6666为http_port_t服务的访问端口

 测试:

 semanage port -l | grep http     #查看是否添加成功

******************

http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010

http_cache_port_t              udp      3130

http_port_t                    tcp      6666, 80, 81, 443, 488, 8008, 8009, 8443, 9000            #添加成功

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989


 setenforce 1                      #强制

 systemctl restart httpd      #重启成功

##说明 selinux 会影响服务所使用的资源

猜你喜欢

转载自blog.csdn.net/love_sunshine_999/article/details/80345322