1.什么是selinux?
selinux是强制访问控制系统的实现,且位于Linux Kernel中。它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,如,它可以指明某一个进程访问哪些资源。
强制访问控制系统的用途在于增强系统抵御攻击的能力。
2.selinux的特点是什么?
SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对 整个系统造成重大影响。以前的访问控制基于读/写/执行这三 个控制位,文件所有者、文件所有者所属组、其他人各一套。在SELinux中,访问控制属性总是安全上下文三人组形式,所有文件和主体都有一个关联的安全 上下文,标准Linux使用进程用户/组ID,文件的访问模式,文件用户/组ID要么可以访问要么被拒绝,SELinux使用进程和客体的安全上下文,需 要特别指出的是,因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。若要访问文件,必须同时具有普通访问权限和 SELinux访问权限。因此即使以超级用户身份root运行进程,根据进程以及文件或资源的SELinux安全性上下文可能拒绝访问文件或资源。
3.selinux的状态
SELinux 有三种工作模式,分别是:
1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
2. permissive:警告模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。 查看日志信息:cat /var/log/audit/audit.log
3.disable : 关闭selinux
注:selinux命令状态查询:getenforce
文件编辑: /etc/sysconfig/selinux (修改完之后,reboot 生效)
命令修改:setenforce 0 设置selinux为警告模式 (命令修改为临时修改,重启之后会恢复为之前的状态)
setenforce 1 设置selinux为强制模式
4.selinux产生的影响是什么?
1)影响程序的访问文件,通过安全上下文来控制的;
2)影响程序的服务程序功能,通过sebool值来控制的;
3 )selinux开启后会关闭系统认为所有认为不安全的操作, 在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。
4 ) 系统上的文件和其他资源都设置了权限标签 ,控制哪些用户对哪些文件具有哪些访问权;一般来说,只有同时具有欧通系统访问权限和selinux访问权限,才能访问文件;
5.selinux的安全上下文
1.临时修改安全上下文 chcon -t public_content_t westos
[root@localhost mnt]# getenforce //查看当前selinux的状态
Permissive
[root@localhost ftp]# touch /mnt/westos //建立文件
[root@localhost ftp]# cd /mnt
[root@localhost mnt]# ls -Z //查看安全上下文
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0 westos
[root@localhost mnt]# chcon -t public_content_t westos //临时安全上下文public_content_t
[root@localhost mnt]# ls -Z //查看安全上下文
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 westos
[root@localhost mnt]# vim /etc/sysconfig/selinux //重启selinux,reboot2次,先修改selinux为disabled,后修改为enforcing
[root@localhost mnt]# reboot
[root@localhost mnt]# vim /etc/sysconfig/selinux
[root@localhost mnt]# reboot
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls -Z //重启后查看安全上下文,会发现之前的改动并未生效
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 westos
2.永久修改上下文
semanage fcontext -l 内核指定的所有文件的安全上下文的列表 ;
man semanage fontext 查询semanage用法
mkdir /westos
vim /etc/vsftpd/vsftpd.conf
anon_root=/westos 修改ftp服务的默认目录,添加这一行
systemctl restart vsftpd 重启vsftpd服务
ls -Zd /westos 查看目录的安全上下文,为default_t
semanage fcontext -a -t public_content_t '/westos(/.*)?' 永久修改selinux 其中,-a 添加 ; -t 指定类型 ;(/.*)目录的所有文件
semanage fcontext -l | grep /westos 查看westos的安全上下文是不是public_content_t
restorecon -FvvR /westos 刷新
touch /.autorelabel 建立文件,相当于selinux 初始化
ls -Zd /westos 查看目录安全上下文
6.selinux布尔值
selinux布尔值是更改selinux的开关;有时候,selinux的访问权限可选可通过selinux布尔值触发,可以提高系统安全性。
1. 安装lftp软件
selinux状态为警告/强制,在强制状态下,客户端切换到student用户,是不可以上传文件的
getsebool -a | grep ftp 查看ftp服务的bool值
设置布尔值(1开启,0关闭)
setsebool -P ftp_home_dir 1 开启允许用户lftp到自己的根目录下
测试:
7.监控selinux冲突
1.必须安装 setroubleshoot-server 软件包 , 才能将 SELinux消息发送至 /var/log/messages
2.setroubleshoot-server 侦听 /var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/messages
3.摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ), 可用于收集更多信息
4.Sealert -l UUID 用于生成特定事件的报告。Sealert-a/var/log/audit/audit.log 用于在该文件中生成所有事件的报告
5.当setroubleshoot-server 软件包存在时,客户端如果访问失败,cat /var/log/messages日志中会有解决方案
6.如果卸载setroubleshoot-server 软件包 日志中没有解决方案。
/var/log/audit/audit.log | selinux日志存放处 |
/var/log/messages | selinux解决方案存放处 |
yum install setroubleshoot-server.x86_64 -y
实验环境:
> /var/log/audit/audit.log
> /var/log/audit/audit.log
测试:
ftp://172.25.254.20 没有看见westos
cat /var/log/messages 查看解决方案
注意:
提供解决方案的不是系统而是一个软件程序(setroubleshoot-server.x86_64 ),但此工具不安全,只是解决当前不能访问的问题;
如果删除此工具,在日志/var/log/messages下是不会看到解决方案;
方案1:
方案2:
在浏览器中查看 ftp://172.25.254.20
8.tcp和udp协议
TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基 础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
用户数据报协议(UDP)是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议基本上是IP协议与上层协议的接口。UDP协议适用端口分辨运行在同一台设备上的多个应用程序。
cat /etc/services 查询每一个服务对应端口
cat /etc/services | grep -E "\<http\>" 查询http服务对应端口端口
修改http服务的端口
1.设置selinux为enforcing
2.yum install httpd 安装httpd (默认端口为80)
修改 80 为 6161
systemctl restart httpd 重启服务 ( permissive 下不会报错)
重启时报错,说明不能重启。
semanage port -l | grep http 查询并过滤http对应的端口有哪些
semanage port -a -t http_port_t -p tcp 6161 让httpd使用默认列表之外的端口6161
systemctl restart httpd 然后重启httpd
重启成功
发现httpd 有默认列表之外的端口6161出现。