Lesson18 Linux系统中的 selinux服务
文章目录
1. 了解selinux
selinux是一种控制服务安全,是内核上面的一个插件,也叫做内核加强型火墙
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统
NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件
SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到
SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统
对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的
SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念
由于selinux涉及安全上下文的问题,因此会使很多操作的结果不正确,如果要使用selinux,就需要修改对应文件的安全上下文,非常不方便,所以在企业中很少使用
2. selinux的开关
实验准备:1. 在真机里面reset server虚拟机,并且开启server虚拟机
2. 给server虚拟机配置ip为172.25.254.114
3. 给server虚拟机配置共享yum源
4. 给火墙加上永久允许ftp服务,再使用yum源安装lftp软件
下载ftp服务
给火墙加上永久允许ftp
查看selinux的状态
注意:1.selinux对服务访问文件以及功能有影响
2.enforceing与permissive二者可以直接进行切换,但是二者与disabled(关闭selinux)进行切换时要reboot
即selinux由开到关,或由关到开,都要reboot重启系统
状态 | 说明 |
---|---|
enforceing | 强制模式 |
permissive | 警告模式 |
disabled | 关闭模式 |
selinux对文件的影响:
selinux给每个文件加标签 标签匹配才能被访问,每个程序安全上下文要匹配(在/var/ftp/下看mv过去的能不能看到)
selinux对功能的影响:
在每不安全的功能上面加功能开关(默认关闭),安全性提高,0关闭,1开启(在/var/ftp/pub/能不能上传文件)
不是服务本身不允许,而是selinux不允许
3. 临时更改安全上下文(适用于文件)
开启selinux,开启vsftpd,建立文件/mnt/westos1,并且移动到/var/ftp
用匿名用户身份登录,可以看到,不能ls 查看到westos1
但是,/var/ftp/是有westos1文件的
可以看到,/var/ftp/westos1和pub的安全上下文是不一致的
将selinux的级别改为permissive警告模式
再次连接查看发现可以看到westos1文件
再次setenforce 1
改为强制模式时,就不能看到westos1文件了
chcon -t 安全上下文 文件
chcon -t public_content_t /var/ftp/westos1
#更改westos1的安全上下文与pub一致
更改了westos1的安全上下文,则可以查看到/var/ftp/westos1
开启selinux,在ftp服务器上也不能上传文件
在配置文件里设置允许匿名用户上传文件
可以看到,不能上传文件
将selinux的状态切换到disabled
重启
可以看到,匿名用户可以上传
4. 永久更改安全上下文
semanage fcontext -l
#查看系统默认发布目录设置的标签
建立/westos,在这个目录下创建5个文件
但是我们自己建立的目录与默认发布目录的标签不一致
semanage fcontext -a -t public_content_t '/westos(/.*)?'
#将自己建立的发布目录加上标签(目录里面的内容)
restorecon -RvvF /westos/
#刷新使其生效
可以看到,永久设置/westos安全上下文和pub一致成功
5. ftp功能状态的修改
getsebool -a | grep ftp
#查看ftp的状态
在没修改到on时,匿名用户不能上传
ftpd_anon_write的状态已经修改为on,执行 chcon -t public_content_rw_t /var/ftp/pub
,让匿名用户具有读写这个目录的权力
可以看到,匿名用户上传成功
在enforcing状态下,本地用户家目录上传和删除文件
可以看到,本地用户可以上传文件
本地用户可以删除文件
6. 与selinux相关的日志
/va/log/messagesr
#系统日志,提供解决方案
/var/audit/audit.log
#selinux真正的日志,不提供解决方案
/var/log/secure
#查看登陆系统的用户
7. 管理selinux端口标签
实验准备:
这个实验使用server虚拟机来做,此时server虚拟机的selinux状态为enforcing
配置server虚拟机的ip为172.25.254.214,配置完毕后需要重启网络
配置好server虚拟机的yum源
使用yum源安装apache服务
安装完成
systemctl start httpd #开启apache服务
netstat -antlupe | grep httpd
#查看apache服务开启的端口
vim /etc/httpd/conf/httpd.conf
#编辑apache服务的主配置文件,修改apache服务监听的端口为8888
systemctl restart httpd #重启apache服务
发现配置文件无法重启,这是因为selinux的状态为enforcing,阻止了apache服务端口的修改,如果将selinux的状态设置为permissive,则apache服务能够重启
netstat -antlupe | grep httpd
#查看apache服务开启的端口
将selinux模式设置为enforciung
semanage port -l | grep http
#列出apache服务端口标签
发现没有我们添加的8888端口
semanage port -a -t http_port_t -p tcp 8888
#添加端口标签
systemctl restart httpd #重启apache服务
这里注意,重启apache服务需要等待大约十几秒的时间,如果此时重启失败,显示killed,则是selinux软件本身的bug,换一台虚拟机重新做实验
netstat -antlupe | grep httpd
#查看apache服务开启的端口是否有8888
semanage port -d -t http_port_t -p tcp 8888
#删除端口标签