一、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 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 [1]
大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统, 它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享 有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的UNIX 权限更好的访问控制。
二、selinux的使用
简单的来说,selinux就是内核级加强型防火墙,有两个主要功能
1.安全上下文:管这个程序可以看什么类型的文件
2.服务:给服务选项加了一个开关
1)selinux的三种状态
enforcing ##打开状态,警告并且拒绝服务
permissive ##打开状态,警告但是不拒绝服务
disabled ##关闭状态
2)查看SELinux状态:
/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
getenforce ##也可以用这个命令检查
3)如何关闭SELinux
临时关闭(不用重启机器):
setenforce 0 ##设置SELinux成为permissive模式
setenforce 1 ##设置SELinux成为enforcing模式
修改配置文件需要重启机器:
vim /etc/sysconfig/selinux
将SELINUX=enforcing改为SELINUX=disabled即可,必须重启电脑,因为需要重新加载内核
4)报错日志存放位置 /var/log/audit/audit.log
三、selinux的功能
1)安全上下文(context)
1.1对文件的影响
情景1:对服务端,此时selinux处于关闭状态,即disabled
touch /mnt/xupt ##新建xupt文件
mv /mnt/xupt /var/ftp ##将新建的文件移动到var/ftp下,为啥移动不是复制,是因为移动是一个重命名的过程,不会改变其属性
ls -Z /var/ftp ##查看ftp内文件的安全上下文
ps auxZ | grep vsftpd ##列出与vsftp有关的进程的安全上下文
在客户端 ,发现直接移动到这里面是可以识别的
情景2:对服务端,当selinux开启,即enforcing
在客户端,发现这个xupt1是不被显示的
如果我们想让xupt1显示,就需要刚改xupt1的安全上下文
chcon -t public_content_t /var/ftp/xupt1 #临时改变
再次查看客户端
开启selinux之后,只有文件的安全上下文对的上,才可以显示
1.2对目录的影响
mkdir /xupt ##在根目录下新建文件夹xupt
touch /xupt/xupt{1..5} ##在westos里面新建5个文件
ls -Zd /xupt ##查看目录的安全上下文
vim /etc/vsftpd/vsftpd.conf
anon_root=/xupt
在客户端 ,发现不可以访问
在服务端进行下列操作
chcon -t public_content_t /xupt -R
ls -Zd /xupt
再次测试
就可以了 ,同理, 开启selinux之后,只有文件的安全上下文对的上,才可以显示
但是上述的方法是临时的,如何才能永久的保存
semanage fcontext -a -t public_content_t '/xupt(/.*)?' ##修改/jay和底下的所有文件的安全上下文, -a表示增加,-t表示类型
restorecon -RvvF /xupt ##递归刷新并显示刷新过程
2)对进程的影响
现在我的服务器的selinux为开启状态,我使用客户端使用本地用户登陆并上上传文件,结果失败
这里就是selinux对于进程的影响了,selinux会对进程加一个开关,就是sebool 插件
getsebool -a | grep ftp ##查看ftp所有的开关状态
ftp_home_dir -->on ##ftp的上传功能
setsebool -P ftp_home_dir on ##打开对家目录控制,即打开上传功能,-P表示永远打开
full_access ##总开关打开
这时ftp_home_dir 是处于关闭的状态
打开ftp_home_dir开关,并试着上传文件
成功,如果需要开启其他功能,操作类似
四、selinux报错
报错服务由软件setroubleshoot-3.2.17-2.el7.x86_64提供,在/var/log/audit/audit.log可查看