SELinux的初探

什么是SELinux

SELinux是Security-Enhanced Linux的缩写,字面意思就是安全强化的Linux。

SELinux的基本概念

主体(Subject):可以完全等同于进程

对象(Object):被主体访问的资源。可以是文件、目录、端口、设备等

政策和规划(Policy&Rule):系统中常有大量的文件和进程,为了节省时间和开销,通常只是选择性的对某些进程进行管制。而哪些进程需要管制、要怎么管制是由政策决定的

安全上下文(Security Context):这个是SELinux的核心。

          安全上下文主要用冒号分为三段:Identify(身份识别):role(角色):type(类型)

  •           身份标识(Identify) :主要的身份标识有下面常见的三种:1.root    2.system_u    3.user_u
  •           角色(Role):一般的角色有:1.object_r  2.system_r (_r是role的意思)
  •           类型(Type):基本上,一个主体进程能不能读取到到这个文件资源与类型字段有关。而类型字段在文件与进程的定义不太相同,分别是type和domain  ,domain需要与type搭配,则该程序才能够顺利读取文件资源

SELinux的启动、关闭与查看

SELinux的三种模式,分别是:

1. enforcing:强制模式。代表SELinux正在运行中,且已经正确开始限制domain/type了。

2. permissive:宽容模式。代表SELinux正在运行中,不过仅有警告信息并不会实际限制domain/type的访问。这种模式可以作为SELinux的调试之用

3. disabled:关闭 SELinux,SELinux并没有实际运行

若要知道目前SELinux的工作模式,可通过getenforce命令

SELinux的初探

【1】更改selinux的开机状态,重启生效(reboot)

更改配置文件:vim /etc/sysconfig/selinux    

SELinux的初探

【2】更改selinux模式(setenforce 0|1)

0表示permissive警告但并不阻止可以行为

1表示enforcing强制组织可疑行为

SELinux的初探

SELinux的安全上下文

【1】暂时性更改文件的安全上下文

ls -Z ###查看安全上下文

SELinux的初探

chcon -t public_content_t file  ##修改安全上下文

一次性定制安全上下文,执行restorecon刷新后还原

SELinux的初探

查看/var/ftp的安全上下文

SELinux的初探

因为安全上下文不同,所以lftp链接时不显示文件

SELinux的初探

更改westos的安全上下文

SELinux的初探

再次链接显示文件

SELinux的初探

【2】永久性修改安全上下文

semanage fcontext -a -t public_content_t  ‘/westos(/.*)?‘    ##(/.*)?表示westos后的所有文件和目录

fcontext 规则中最常用的扩展正则表达式是 (/.*)?, 表示随意匹配 / 后跟任何数量的字符

restorecon -FvvR /westos/ ##使更改的内容生效

新建目录、文件,查看其默认上下文

SELinux的初探

修改安全上下文

SELinux的初探

在系统中搜索/westos的安全上下文

SELinux的初探

管理SELinux布尔值

SELinux 布尔值是更改 SELinux 策略行为的开关, 是可以启用或禁用的规则

安全管理员可以使 SELinux 布尔值来调整策略 , 以有选择地进行调整

getsebool 用于显示布尔值 , setsebool 用于修改布尔值

setsebool -P 修改 SELinux 策略 , 以永久保留修改。

实验环境:selinux状态为警告/强制,在强制状态下,客户端切换到student用户,是不可以上传文件的

SELinux的初探

 设置布尔值(1开启,0关闭)

SELinux的初探

测试:可登录、上传

SELinux的初探

 监控 SELinux 冲突

  • 必须安装 setroubleshoot-server 软件包 , 才能将 SELinux消息发送至 /var/log/messages
  • setroubleshoot-server 侦听 /var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/messages
  • 摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ), 可用于收集更多信息
  • Sealert -l UUID 用于生成特定事件的报告。Sealert-a/var/log/audit/audit.log 用于在该文件中生成所有事件的报告
  • 当setroubleshoot-server 软件包存在时,客户端如果访问失败,cat /var/log/messages日志中会有解决方案
  • 如果卸载setroubleshoot-server 软件包  日志中没有解决方案。
/var/log/audit/audit.log selinux日志存放位置
/var/log/messages selinux解决方案

安装软件:

setroubleshoot-server.x86_64 : SELinux troubleshoot server

SELinux的初探

清空日志:

> /var/log/audit/audit.log

>/var/log/messages

实验:
touch /mnt/westos   
mv /mnt/westos  /var/ftp/

ftp://172.25.254.205  ##看不到westos

SELinux的初探

 cat /var/log/audit/audit.log  ##查看问题出在哪里

SELinux的初探

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

【1】方案一:修改安全上下文

SELinux的初探

【2】方案二:修改布尔值

SELinux的初探

restorecon -v /var/ftp/*     

SELinux的初探

ftp://172.25.254.205  ##可以看到westos

SELinux的初探

SELINUX影响服务资源

yum install httpd ##安装Apache

vim /etc/httpd/conf/httpd.conf

修改前

SELinux的初探

修改后

SELinux的初探

systemctl restart httpd  ##服务不能重启

SELinux的初探

setenforce  0  

systemctl restart httpd ##服务开启证明是selinux的问题

SELinux的初探

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

SELinux的初探
semanage port -a -t  http_port_t -p tcp 6666 ##添加6666端口
semanage port -l |grep http ##6666已经添加


SELinux的初探
systemctl restart httpd ##重启成功

补充:通过以下方式查看服务端口
cat /etc/services |grep ftp   ##查看服务的端口
SELinux的初探

可以看到ftp服务的端口是21