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对服务访问文件以及功能的影响
enforceing与permissive二者可以直接进行切换,但是二者与disable(关闭selinux)进行切换时要reboot
enforceing | 表示强制 |
---|---|
permissive | 表示警告 |
disable | 表示关闭 |
2.selinux对文件的影响
selinux给每个文件加标签 标签匹配才能被访问,每个程序安全上下文要匹配(例如:在/var/ftp/下看mv过去的能不能看到)
selinux对功能的影响:
在每个不安全的功能上面加功能开关(默认关闭),安全性提高,0关闭,1开启(在/var/ftp/pub/能不能上传文件)
eg:当selinux状态为disable时,
当selinux状态为enforcing时,westosfile1并没有在lftp 服务中看到
原因:westosfile1的安全上下文与lftp的安全上下文不匹配,lftp只能访问到与之标签相匹配的文件
ls -Z /var/ftp #-Z查看安全上下文
显示进程的selinux的安全上下文:
ps axZ | grep vsftpd ##-Z参数可以查询进程的安全上下文
3.selinux状态的设置
enforceing | 表示强制 |
---|---|
permissive | 表示警告 |
disable | 表示关闭 |
强制和警告表示selinux服务开启
disable表示selinux服务关闭
getenforce | 查看selinux服务的状态 |
---|---|
setenforce 0 | 将selinux设置为警告模式,前提selinux开启 |
setenforce 1 | 将selinux设置为强制模式,前提selinux开启 |
vim/etc/sysconfig/selinux | 修改SELINUX=disable |
注意:当selinux关闭到开启,或者开启到关闭都要重启才能生效
sebool的设定
getsebool -a | grep ftp #查看ftp相关功能的开启状态
setsebool -P ftp_home_dir on|1 #开启本地上传服务设置
测试
在开启安装上下文状态下,开启匿名用户 上传服务
getsebool -a | grep ftp # 查看ftp相关功能的开启状态
setsebool -P ftpd_anon_write on #开启匿名用户上传功能
lz -Zd /var/ftp/pub #查看该目录的安全上下文
semange fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?" #修改/var/ftp/pub目录的安全上下文
restorecon -RvvF /var/ftp/pub/ #刷新该目录上下文
测试
修改文件的安全上下文
#临时修改
chcon -t public_content_t westosfile1 #public_content_t 为安全上下文, westosfile1为文件名
现在westosfile1就可以传过来了
永久修改文件的安全上下文
semanage fcontext -l #查看文件的安全上下文
semanage fcontext -a -t public_content_t "/westos(/.*)?" #更改/westos目录本身以及该目录下的所有文件的安全上下文为public_content_t
restorecon -RvvF /westos #同步安全上下文到该目录本身,不会因重启而改变
ls -Zd /westos 查看该目录安全上下文
selinux 的排错
/var/log/messages 为系统日志,提供一些解决方案 ,需要安装服务才能提供解决方案
/var/audit/audit.log 为selinux真正的日志,不提供解决方案
yum search selinux
yum install setroubleshoot-server.x86_64 -y
>/var/log/messages
>/var/log/audit/audit.log #清空日志
实验:
cd /mnt/
touch /mnt/file
mv /mnt/sfile /var/ftp/
lftp 172.25.254.100
ls 查看并没有mv过来的东西
cat /var/log/messages #可以看到日志提供的解决办法 然后就能看到mv过去的了
restorecon -v /var/ftp/file #刷新
ls -Z /var/ftp/ #查看标签是否一致(只有标签一致的时候才能看见mv过去的东西)
再次 lftp 172.25.254.111 #ls查看就可以看到mv进去的东西了