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命令
【1】更改selinux的开机状态,重启生效(reboot)
更改配置文件:vim /etc/sysconfig/selinux
【2】更改selinux模式(setenforce 0|1)
0表示permissive警告但并不阻止可以行为
1表示enforcing强制组织可疑行为
SELinux的安全上下文
【1】暂时性更改文件的安全上下文
ls -Z ###查看安全上下文
chcon -t public_content_t file ##修改安全上下文
一次性定制安全上下文,执行restorecon刷新后还原
查看/var/ftp的安全上下文
因为安全上下文不同,所以lftp链接时不显示文件
更改westos的安全上下文
再次链接显示文件
【2】永久性修改安全上下文
semanage fcontext -a -t public_content_t ‘/westos(/.*)?‘ ##(/.*)?表示westos后的所有文件和目录
fcontext 规则中最常用的扩展正则表达式是 (/.*)?, 表示随意匹配 / 后跟任何数量的字符
restorecon -FvvR /westos/ ##使更改的内容生效
新建目录、文件,查看其默认上下文
修改安全上下文
在系统中搜索/westos的安全上下文
管理SELinux布尔值
SELinux 布尔值是更改 SELinux 策略行为的开关, 是可以启用或禁用的规则
安全管理员可以使 SELinux 布尔值来调整策略 , 以有选择地进行调整
getsebool 用于显示布尔值 , setsebool 用于修改布尔值
setsebool -P 修改 SELinux 策略 , 以永久保留修改。
实验环境:selinux状态为警告/强制,在强制状态下,客户端切换到student用户,是不可以上传文件的
设置布尔值(1开启,0关闭)
测试:可登录、上传
监控 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
清空日志:
> /var/log/audit/audit.log
>/var/log/messages
实验:
touch /mnt/westos
mv /mnt/westos /var/ftp/
ftp://172.25.254.205 ##看不到westos
cat /var/log/audit/audit.log ##查看问题出在哪里
cat /var/log/messages ##查看解决方案
【1】方案一:修改安全上下文
【2】方案二:修改布尔值
restorecon -v /var/ftp/*
ftp://172.25.254.205 ##可以看到westos
SELINUX影响服务资源
yum install httpd ##安装Apache
vim /etc/httpd/conf/httpd.conf
修改前
修改后
systemctl restart httpd ##服务不能重启
setenforce 0
systemctl restart httpd ##服务开启证明是selinux的问题
semanage port -l |grep http ##查看http的端口
semanage port -a -t http_port_t -p tcp 6666 ##添加6666端口
semanage port -l |grep http ##6666已经添加
systemctl restart httpd ##重启成功
补充:通过以下方式查看服务端口
cat /etc/services |grep ftp ##查看服务的端口
可以看到ftp服务的端口是21